调整属性状态判断位置,以支持将后面的属性设置为前面属性的依赖项
This commit is contained in:
parent
8a9b5343ad
commit
c84ff12641
|
@ -954,6 +954,24 @@ void hg_sane_middleware::reload_options(scanner_handle dev)
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
// do depend logic opertion ...
|
||||
for (auto& d : v->slaves)
|
||||
{
|
||||
SANE_Option_Descriptor* desc = get_option_descriptor(hg_sane_middleware::scanner_handle_to_sane(v->dev), &d.name[0]);
|
||||
set_status_by_depends(v->dev, d, v->cur_vals, desc);
|
||||
}
|
||||
}
|
||||
}
|
||||
void hg_sane_middleware::set_status_by_depends(scanner_handle hdev, SLAVEOP& so, std::vector<CURVAL>& vals, SANE_Option_Descriptor* desc)
|
||||
{
|
||||
if (so.master.size())
|
||||
{
|
||||
so.enable_now = so.is_enable(hdev, so.master, vals);
|
||||
if (so.enable_now)
|
||||
desc->cap &= ~SANE_CAP_INACTIVE;
|
||||
else
|
||||
desc->cap |= SANE_CAP_INACTIVE;
|
||||
}
|
||||
}
|
||||
SANE_Status hg_sane_middleware::open(SANE_String_Const devicename, SANE_Handle* handle, const char* name, const char* pwd, const char* method, char* rsc)
|
||||
|
@ -1184,28 +1202,28 @@ SANE_Option_Descriptor* hg_sane_middleware::from_json(scanner_handle h, const st
|
|||
so.enable_now = (ret->cap & SANE_CAP_INACTIVE) != SANE_CAP_INACTIVE;
|
||||
so.name = name;
|
||||
|
||||
// initializing status ...
|
||||
if (so.master.size())
|
||||
{
|
||||
//std::string master(get_option_json(h, (void *)so.master[0].name.c_str()));
|
||||
//json* m = new json();
|
||||
//if (m->attach_text(&master[0]))
|
||||
//{
|
||||
// bool integer = false, str = false;
|
||||
|
||||
// master = "";
|
||||
// m->get_value("type", master);
|
||||
// integer = master == "int";
|
||||
// str = master == "string";
|
||||
// master = "";
|
||||
// m->get_value_as_string("cur", master, integer);
|
||||
// local_utility::trans_language_if_was_word_id(val);
|
||||
so.enable_now = so.is_enable(h, so.master, (*it)->cur_vals);
|
||||
if (!so.enable_now)
|
||||
ret->cap |= SANE_CAP_INACTIVE;
|
||||
//}
|
||||
//delete m;
|
||||
}
|
||||
// initializing status ... move to set_status_by_depends (2023-06-21)
|
||||
//if (so.master.size())
|
||||
//{
|
||||
// //std::string master(get_option_json(h, (void *)so.master[0].name.c_str()));
|
||||
// //json* m = new json();
|
||||
// //if (m->attach_text(&master[0]))
|
||||
// //{
|
||||
// // bool integer = false, str = false;
|
||||
//
|
||||
// // master = "";
|
||||
// // m->get_value("type", master);
|
||||
// // integer = master == "int";
|
||||
// // str = master == "string";
|
||||
// // master = "";
|
||||
// // m->get_value_as_string("cur", master, integer);
|
||||
// // local_utility::trans_language_if_was_word_id(val);
|
||||
// so.enable_now = so.is_enable(h, so.master, (*it)->cur_vals);
|
||||
// if (!so.enable_now)
|
||||
// ret->cap |= SANE_CAP_INACTIVE;
|
||||
// //}
|
||||
// //delete m;
|
||||
//}
|
||||
(*it)->slaves.push_back(so);
|
||||
}
|
||||
delete depend;
|
||||
|
@ -1619,6 +1637,12 @@ SANE_Status hg_sane_middleware::open_device(SANE_String_Const devicename, SANE_H
|
|||
ret = open(devicename, handle, auth.name, auth.pwd, auth.method, rsc);
|
||||
}
|
||||
|
||||
if (ret == SANE_STATUS_GOOD)
|
||||
{
|
||||
// for depend item maybe later, we move the depend-logic-operation out of 'from_json'. to ensure the status, we get all options actively and do depend-logic operation after all options got - 2023-06-21
|
||||
reload_options(hg_sane_middleware::sane_handle_to_scanner(*handle));
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
SANE_Status hg_sane_middleware::close_device(SANE_Handle h)
|
||||
|
|
|
@ -142,6 +142,7 @@ class hg_sane_middleware
|
|||
static void set_value_to_new(void* val, size_t bytes, void* param);
|
||||
|
||||
void reload_options(scanner_handle dev = nullptr);
|
||||
void set_status_by_depends(scanner_handle hdev, SLAVEOP& so, std::vector<CURVAL>& vals, SANE_Option_Descriptor* desc);
|
||||
SANE_Status open(SANE_String_Const devicename, SANE_Handle* handle, const char* name, const char* pwd, const char* method, char* rsc);
|
||||
SANE_Option_Descriptor* from_json(scanner_handle h, const std::string& name, json* jsn);
|
||||
std::string get_option_json(scanner_handle handle, void* opt, std::string* key = nullptr, SANE_Int* id = nullptr);
|
||||
|
|
Loading…
Reference in New Issue