属性添加界面显示位置字段,同组属性将优先按该字段排序

This commit is contained in:
gb 2023-12-01 11:28:26 +08:00
parent 123a0c5a31
commit 51b93c08df
3 changed files with 48 additions and 10 deletions

View File

@ -91,10 +91,7 @@ char* sane_opt_provider::get_value(const char* name, void* value, size_t* size,
} }
int sane_opt_provider::set_value(const char* name, void* val) int sane_opt_provider::set_value(const char* name, void* val)
{ {
if (following_.count(name)) return SCANNER_ERR_DEVICE_NOT_SUPPORT;
return following_[name]->set_value(name, val);
else
return SCANNER_ERR_DEVICE_NOT_SUPPORT;
} }
void sane_opt_provider::enable(const char* name, bool able) void sane_opt_provider::enable(const char* name, bool able)
{} {}

View File

@ -1152,13 +1152,42 @@ void device_option::insert_option(gb_json* opt, sane_opt_provider* from, const c
} }
else else
{ {
int index = -1; int index = -1, pos = -1;
if (group) if (group)
index = insert_group(group, group); index = insert_group(group, group);
index = next_group(index + 1);
// insert poisition according to 'ui-pos'
if (!opt->get_value("ui-pos", pos) || pos == -1)
{
index = next_group(index + 1);
}
else
{
for (index++; index < origin_->children(); ++index)
{
gb_json* sib = origin_->child(index);
std::string t("");
int sit = -1;
if (!sib->get_value("type", t) || t == JSON_SANE_TYPE_GROUP)
{
sib->release();
break;
}
if (!sib->get_value("ui-pos", sit) || sit == -1)
{
sib->release();
break;
}
sib->release();
if (pos < sit)
break;
}
}
origin_->insert(index, opt->key().c_str(), opt); origin_->insert(index, opt->key().c_str(), opt);
src_[opt->key()] = from; src_[opt->key()] = from;
from->add_ref(); from->add_ref();
} }
@ -1920,7 +1949,7 @@ std::string device_option::get_name_by_sane_id(int sane_ind)
return std::move(value); return std::move(value);
} }
std::string device_option::get_option_value_type(const char* name) std::string device_option::get_option_value_type(const char* name, size_t* size)
{ {
std::string value(""); std::string value("");
gb_json* jsn = now_ ? now_ : origin_; gb_json* jsn = now_ ? now_ : origin_;
@ -1933,6 +1962,12 @@ std::string device_option::get_option_value_type(const char* name)
if (child) if (child)
{ {
child->get_value("type", value); child->get_value("type", value);
if (size)
{
int v = 0;
child->get_value("size", v);
*size = v;
}
child->release(); child->release();
} }
} }
@ -2009,7 +2044,7 @@ std::string device_option::get_option_field_string(const char* name, const char*
return std::move(value); return std::move(value);
} }
std::string device_option::get_option_value_type(int sane_ind) std::string device_option::get_option_value_type(int sane_ind, size_t* size)
{ {
std::string value(""); std::string value("");
gb_json* jsn = now_ ? now_ : origin_; gb_json* jsn = now_ ? now_ : origin_;
@ -2018,6 +2053,12 @@ std::string device_option::get_option_value_type(int sane_ind)
{ {
gb_json* child = now_->child(sane_ind - 1); gb_json* child = now_->child(sane_ind - 1);
child->get_value("type", value); child->get_value("type", value);
if (size)
{
int v = 0;
child->get_value("size", v);
*size = v;
}
child->release(); child->release();
} }

View File

@ -362,8 +362,8 @@ public:
int count(void); // return option count int count(void); // return option count
bool is_auto_restore_default(const char* name); bool is_auto_restore_default(const char* name);
std::string get_name_by_sane_id(int sane_ind); std::string get_name_by_sane_id(int sane_ind);
std::string get_option_value_type(const char* name); std::string get_option_value_type(const char* name, size_t* size = nullptr);
std::string get_option_value_type(int sane_ind); std::string get_option_value_type(int sane_ind, size_t* size = nullptr);
std::string get_option_field_string(const char* name, const char* key); std::string get_option_field_string(const char* name, const char* key);
std::string get_option_value(const char* name, int type/*OPT_VAL_xxx*/, int* size = nullptr, void* in_data = nullptr); // return whole json-text if name was null std::string get_option_value(const char* name, int type/*OPT_VAL_xxx*/, int* size = nullptr, void* in_data = nullptr); // return whole json-text if name was null
std::string get_option_value(int sane_ind, int type/*OPT_VAL_xxx*/, int* size = nullptr, void* in_data = nullptr); // return whole json-text if name was null std::string get_option_value(int sane_ind, int type/*OPT_VAL_xxx*/, int* size = nullptr, void* in_data = nullptr); // return whole json-text if name was null