调整属性状态判断位置,以支持将后面的属性设置为前面属性的依赖项

This commit is contained in:
gb 2023-06-21 15:33:39 +08:00
parent 8a9b5343ad
commit c84ff12641
2 changed files with 47 additions and 22 deletions

View File

@ -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) 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.enable_now = (ret->cap & SANE_CAP_INACTIVE) != SANE_CAP_INACTIVE;
so.name = name; so.name = name;
// initializing status ... // initializing status ... move to set_status_by_depends (2023-06-21)
if (so.master.size()) //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; // //std::string master(get_option_json(h, (void *)so.master[0].name.c_str()));
// //json* m = new json();
// master = ""; // //if (m->attach_text(&master[0]))
// m->get_value("type", master); // //{
// integer = master == "int"; // // bool integer = false, str = false;
// str = master == "string"; //
// master = ""; // // master = "";
// m->get_value_as_string("cur", master, integer); // // m->get_value("type", master);
// local_utility::trans_language_if_was_word_id(val); // // integer = master == "int";
so.enable_now = so.is_enable(h, so.master, (*it)->cur_vals); // // str = master == "string";
if (!so.enable_now) // // master = "";
ret->cap |= SANE_CAP_INACTIVE; // // 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;
//} //}
//delete m;
}
(*it)->slaves.push_back(so); (*it)->slaves.push_back(so);
} }
delete depend; 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); 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; return ret;
} }
SANE_Status hg_sane_middleware::close_device(SANE_Handle h) SANE_Status hg_sane_middleware::close_device(SANE_Handle h)

View File

@ -142,6 +142,7 @@ class hg_sane_middleware
static void set_value_to_new(void* val, size_t bytes, void* param); static void set_value_to_new(void* val, size_t bytes, void* param);
void reload_options(scanner_handle dev = nullptr); 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_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); 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); std::string get_option_json(scanner_handle handle, void* opt, std::string* key = nullptr, SANE_Int* id = nullptr);