调整属性状态判断位置,以支持将后面的属性设置为前面属性的依赖项
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)
|
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()));
|
// //std::string master(get_option_json(h, (void *)so.master[0].name.c_str()));
|
||||||
//json* m = new json();
|
// //json* m = new json();
|
||||||
//if (m->attach_text(&master[0]))
|
// //if (m->attach_text(&master[0]))
|
||||||
//{
|
// //{
|
||||||
// bool integer = false, str = false;
|
// // bool integer = false, str = false;
|
||||||
|
//
|
||||||
// master = "";
|
// // master = "";
|
||||||
// m->get_value("type", master);
|
// // m->get_value("type", master);
|
||||||
// integer = master == "int";
|
// // integer = master == "int";
|
||||||
// str = master == "string";
|
// // str = master == "string";
|
||||||
// master = "";
|
// // master = "";
|
||||||
// m->get_value_as_string("cur", master, integer);
|
// // m->get_value_as_string("cur", master, integer);
|
||||||
// local_utility::trans_language_if_was_word_id(val);
|
// // local_utility::trans_language_if_was_word_id(val);
|
||||||
so.enable_now = so.is_enable(h, so.master, (*it)->cur_vals);
|
// so.enable_now = so.is_enable(h, so.master, (*it)->cur_vals);
|
||||||
if (!so.enable_now)
|
// if (!so.enable_now)
|
||||||
ret->cap |= SANE_CAP_INACTIVE;
|
// 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)
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Reference in New Issue