增加“bind”属性,当默认值改变时,可即时同步到当前值上
This commit is contained in:
parent
1d76b40512
commit
dcf2c0215a
|
@ -55,7 +55,7 @@ typedef struct BITMAPINFOHEADER
|
|||
u_int32_t biYPelsPerMeter;
|
||||
u_int32_t biClrUsed;
|
||||
u_int32_t biClrImportant;
|
||||
}BITMAPINFODEADER;
|
||||
}BITMAPINFOHEADER;
|
||||
#pragma pack(pop)
|
||||
#define BI_RGB 0
|
||||
#define MAKEWORD(a, b) (((a) & 0x0ff) | (((b) & 0x0ff) << 8))
|
||||
|
|
|
@ -1245,7 +1245,7 @@ namespace utils
|
|||
|
||||
std::string bitmap_info_header(int pixel_w, int pixel_h, int bpp, int dpix, int dpiy)
|
||||
{
|
||||
BITMAPINFODEADER bih = {0};
|
||||
BITMAPINFOHEADER bih = {0};
|
||||
std::string stream("");
|
||||
|
||||
if(dpiy == 0)
|
||||
|
|
|
@ -1377,16 +1377,50 @@ gb_json* device_option::copy_opt(gb_json* from)
|
|||
{
|
||||
std::string val(init_value_[to->key()]->value(&device_option::calc_simple_logic_expression, this));
|
||||
std::string type("");
|
||||
to->get_value("type", type);
|
||||
bool apply_cur = false, rdo = false;
|
||||
|
||||
// should we change current value ??? - answer: add boolean field "bind" to specify
|
||||
if (!from->get_value("bind", apply_cur))
|
||||
apply_cur = false;
|
||||
if (!from->get_value("readonly", rdo))
|
||||
rdo = false;
|
||||
to->get_value("type", type);
|
||||
if (type == JSON_SANE_TYPE_BOOL)
|
||||
{
|
||||
to->set_value("default", *(bool*)val.c_str());
|
||||
if (apply_cur)
|
||||
{
|
||||
to->set_value("cur", *(bool*)val.c_str());
|
||||
update_provider_value(to->key().c_str(), &val[0], rdo);
|
||||
}
|
||||
}
|
||||
else if (type == JSON_SANE_TYPE_INT)
|
||||
{
|
||||
to->set_value("default", *(int*)val.c_str());
|
||||
if (apply_cur)
|
||||
{
|
||||
to->set_value("cur", *(int*)val.c_str());
|
||||
update_provider_value(to->key().c_str(), &val[0], rdo);
|
||||
}
|
||||
}
|
||||
else if (type == JSON_SANE_TYPE_FIXED)
|
||||
{
|
||||
to->set_value("default", *(double*)val.c_str());
|
||||
if (apply_cur)
|
||||
{
|
||||
to->set_value("cur", *(double*)val.c_str());
|
||||
update_provider_value(to->key().c_str(), &val[0], rdo);
|
||||
}
|
||||
}
|
||||
else if (type == JSON_SANE_TYPE_STRING)
|
||||
to->set_value("default", (const wchar_t*)val.c_str());
|
||||
{
|
||||
to->set_value("default", val.c_str());
|
||||
if (apply_cur)
|
||||
{
|
||||
to->set_value("cur", val.c_str());
|
||||
update_provider_value(to->key().c_str(), &val[0], rdo);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 4: range value ...
|
||||
|
@ -1626,6 +1660,32 @@ bool device_option::to_now(bool init, bool* changed)
|
|||
|
||||
return now_ != nullptr;
|
||||
}
|
||||
void device_option::update_provider_value(const char* name, void* value, bool skip_first)
|
||||
{
|
||||
if (src_.count(name))
|
||||
{
|
||||
sane_opt_provider* opt = nullptr;
|
||||
|
||||
if (skip_first)
|
||||
{
|
||||
opt = src_[name]->get_following(name);
|
||||
}
|
||||
else
|
||||
{
|
||||
opt = src_[name];
|
||||
opt->add_ref();
|
||||
}
|
||||
|
||||
while (opt)
|
||||
{
|
||||
opt->set_value(name, value);
|
||||
|
||||
sane_opt_provider* next = opt->get_following(name);
|
||||
opt->release();
|
||||
opt = next;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
std::string device_option::option_value(gb_json* jsn, bool def_val)
|
||||
{
|
||||
|
@ -1787,18 +1847,7 @@ int device_option::update_data(const char* name, void* value, bool reorder_if_ne
|
|||
err = SCANNER_ERR_ACCESS_DENIED;
|
||||
|
||||
// following ...
|
||||
if (src_.count(name))
|
||||
{
|
||||
sane_opt_provider* opt = src_[name]->get_following(name);
|
||||
while(opt)
|
||||
{
|
||||
opt->set_value(name, value);
|
||||
|
||||
sane_opt_provider* next = opt->get_following(name);
|
||||
opt->release();
|
||||
opt = next;
|
||||
}
|
||||
}
|
||||
update_provider_value(name, value, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -1807,22 +1856,7 @@ int device_option::update_data(const char* name, void* value, bool reorder_if_ne
|
|||
|
||||
// pass to sane_opt_provider ...
|
||||
err = SCANNER_ERR_OK;
|
||||
if (src_.count(name))
|
||||
{
|
||||
sane_opt_provider* opt = src_[name];
|
||||
opt->add_ref();
|
||||
|
||||
while (opt)
|
||||
{
|
||||
int r = opt->set_value(name, value);
|
||||
if (r)
|
||||
err = r;
|
||||
|
||||
sane_opt_provider* next = opt->get_following(name);
|
||||
opt->release();
|
||||
opt = next;
|
||||
}
|
||||
}
|
||||
update_provider_value(name, value);
|
||||
|
||||
child->get_value("type", type);
|
||||
utils::to_log(LOG_LEVEL_DEBUG, "set option '%s' value to '%s' = %d.\n", name, sane_opt_provider::sane_value_2_text(type.c_str(), value).c_str(), err);
|
||||
|
|
|
@ -184,6 +184,7 @@ class device_option : public refer
|
|||
gb_json* copy_opt(gb_json* from);
|
||||
int visibility(gb_json* jsn);
|
||||
bool to_now(bool init, bool* changed);
|
||||
void update_provider_value(const char* name, void* value, bool skip_first = false/*readonly value should skip first*/);
|
||||
|
||||
protected:
|
||||
static std::string option_value(gb_json* jsn, bool def_val);
|
||||
|
|
Loading…
Reference in New Issue