修复自定义gamma配置保存BUG,修复程序退出不能记住上次配置方案BUG
This commit is contained in:
parent
60c954898d
commit
eddab192aa
|
@ -347,7 +347,10 @@ void config::load_scanner_configs(QString dev_name, DEVCFG* cfg)
|
||||||
if(item.get_value("name", val.name) &&
|
if(item.get_value("name", val.name) &&
|
||||||
// item.get_value("type", val.type) &&
|
// item.get_value("type", val.type) &&
|
||||||
item.get_value("value", val.val))
|
item.get_value("value", val.val))
|
||||||
scheme.opts.push_back(val);
|
{
|
||||||
|
item.get_value("extra", val.extra);
|
||||||
|
scheme.opts.push_back(val);
|
||||||
|
}
|
||||||
}while(son->next_child(cont));
|
}while(son->next_child(cont));
|
||||||
}
|
}
|
||||||
delete son;
|
delete son;
|
||||||
|
@ -397,6 +400,7 @@ int config::save_scanner_configs(const DEVCFG* cfg)
|
||||||
val = new gb::json();
|
val = new gb::json();
|
||||||
val->set_value("name", cfg->schemes[i].opts[j].name);
|
val->set_value("name", cfg->schemes[i].opts[j].name);
|
||||||
// val->set_value("type", cfg->schemes[i].opts[j].type);
|
// val->set_value("type", cfg->schemes[i].opts[j].type);
|
||||||
|
val->set_value("extra", cfg->schemes[i].opts[j].extra);
|
||||||
val->set_value("value", cfg->schemes[i].opts[j].val);
|
val->set_value("value", cfg->schemes[i].opts[j].val);
|
||||||
text = val->to_string(false);
|
text = val->to_string(false);
|
||||||
opt->set_value(NULL, val);
|
opt->set_value(NULL, val);
|
||||||
|
|
|
@ -15,6 +15,7 @@ typedef struct _opt_val
|
||||||
std::string name;
|
std::string name;
|
||||||
std::string type;
|
std::string type;
|
||||||
std::string val;
|
std::string val;
|
||||||
|
std::string extra;
|
||||||
|
|
||||||
bool operator==(const struct _opt_val& r)
|
bool operator==(const struct _opt_val& r)
|
||||||
{
|
{
|
||||||
|
@ -26,7 +27,7 @@ typedef struct _opt_val
|
||||||
return IS_DOUBLE_EQUAL(atof(val.c_str()), atof(r.val.c_str()));
|
return IS_DOUBLE_EQUAL(atof(val.c_str()), atof(r.val.c_str()));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return val == r.val;
|
return val == r.val && extra == r.extra;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
bool operator==(const std::string& n)
|
bool operator==(const std::string& n)
|
||||||
|
|
|
@ -14,7 +14,7 @@ hg_settingdialog::hg_settingdialog(void *handle, QWidget *parent
|
||||||
, DEVCFG* cfg)
|
, DEVCFG* cfg)
|
||||||
: QDialog(parent)
|
: QDialog(parent)
|
||||||
, schemes_(cfg), cur_ind_(cfg->cur_scheme), changed_count_(0), save_(false)
|
, schemes_(cfg), cur_ind_(cfg->cur_scheme), changed_count_(0), save_(false)
|
||||||
, btn_cut_area_(nullptr), btn_gamma_(nullptr), cfg_file_(nullptr)
|
, btn_cut_area_(nullptr), btn_gamma_(nullptr), cfg_file_(nullptr), clicked_gamma_(false)
|
||||||
{
|
{
|
||||||
m_dpiId = -1;
|
m_dpiId = -1;
|
||||||
m_dpiValue = 200;
|
m_dpiValue = 200;
|
||||||
|
@ -1119,6 +1119,7 @@ void hg_settingdialog::slot_gammaButtonClicked()
|
||||||
if (dlg.exec())
|
if (dlg.exec())
|
||||||
{
|
{
|
||||||
memset(&m_gammaData, 0, sizeof(m_gammaData));
|
memset(&m_gammaData, 0, sizeof(m_gammaData));
|
||||||
|
clicked_gamma_ = true;
|
||||||
|
|
||||||
if (1 == colorMode)
|
if (1 == colorMode)
|
||||||
{
|
{
|
||||||
|
@ -1682,6 +1683,8 @@ void hg_settingdialog::on_select_scheme(int scheme_ind, bool apply_to_dev)
|
||||||
memset(&m_gammaData, 0, sizeof(m_gammaData));
|
memset(&m_gammaData, 0, sizeof(m_gammaData));
|
||||||
for(int i = 0; i < sizeof(m_gammaData.table) / sizeof(m_gammaData.table[0]); ++i)
|
for(int i = 0; i < sizeof(m_gammaData.table) / sizeof(m_gammaData.table[0]); ++i)
|
||||||
m_gammaData.table[i] = i & 0x0ff;
|
m_gammaData.table[i] = i & 0x0ff;
|
||||||
|
btn_cut_area_->setEnabled(false);
|
||||||
|
btn_gamma_->setEnabled(false);
|
||||||
|
|
||||||
changed_opts_.clear();
|
changed_opts_.clear();
|
||||||
if(scheme_ind >= 0 && scheme_ind + 1 < (int)schemes_->schemes.size())
|
if(scheme_ind >= 0 && scheme_ind + 1 < (int)schemes_->schemes.size())
|
||||||
|
@ -1706,20 +1709,24 @@ void hg_settingdialog::on_select_scheme(int scheme_ind, bool apply_to_dev)
|
||||||
else
|
else
|
||||||
ok = false;
|
ok = false;
|
||||||
if(ok)
|
if(ok)
|
||||||
|
{
|
||||||
changed_opts_.push_back(co);
|
changed_opts_.push_back(co);
|
||||||
}
|
if(strcmp(opt->title, OPTION_TITLE_ZDYSMQY) == 0)
|
||||||
else if(schm->opts[i].name == OPTION_TITLE_ZDYGM)
|
btn_cut_area_->setEnabled(co.val.toBool());
|
||||||
{
|
else if(strcmp(opt->title, OPTION_TITLE_QYSDQX) == 0)
|
||||||
co.opt = (int)OPTION_ID_ZDYGM;
|
{
|
||||||
co.val = QVariant(QString::fromStdString(schm->opts[i].val));
|
btn_gamma_->setEnabled(co.val.toBool());
|
||||||
changed_opts_.push_back(co);
|
if(co.val.toBool())
|
||||||
config::load_custom_gamma(schm->opts[i].val.c_str(), &m_gammaData);
|
config::load_custom_gamma(schm->opts[i].extra.c_str(), &m_gammaData);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(apply_to_dev)
|
if(apply_to_dev)
|
||||||
{
|
{
|
||||||
|
clicked_gamma_ = false;
|
||||||
if(scheme_ind >= 0 && scheme_ind + 1 < (int)schemes_->schemes.size())
|
if(scheme_ind >= 0 && scheme_ind + 1 < (int)schemes_->schemes.size())
|
||||||
schemes_->cur_scheme = scheme_ind;
|
schemes_->cur_scheme = scheme_ind;
|
||||||
else
|
else
|
||||||
|
@ -1728,6 +1735,30 @@ void hg_settingdialog::on_select_scheme(int scheme_ind, bool apply_to_dev)
|
||||||
updateUIStatus();
|
updateUIStatus();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
QString hg_settingdialog::gen_gamma_file_path(void)
|
||||||
|
{
|
||||||
|
time_t now = time(nullptr);
|
||||||
|
tm *ptm = localtime(&now);
|
||||||
|
char name[80] = {0};
|
||||||
|
QString gamma_file;
|
||||||
|
|
||||||
|
sprintf(name, "/%04d%02d%02d%02d%02d%02d.gma", ptm->tm_year + 1900, ptm->tm_mon + 1, ptm->tm_mday, ptm->tm_hour, ptm->tm_min, ptm->tm_sec);
|
||||||
|
if(cfg_file_)
|
||||||
|
{
|
||||||
|
std::string str(cfg_file_->get_file().toStdString());
|
||||||
|
size_t pos = str.rfind('/');
|
||||||
|
if(pos == std::string::npos)
|
||||||
|
pos = str.rfind('\\');
|
||||||
|
if(pos != std::string::npos)
|
||||||
|
str.erase(pos);
|
||||||
|
gamma_file = QString::fromStdString(str);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
gamma_file = config::self_path();
|
||||||
|
gamma_file += QString::fromStdString(name);
|
||||||
|
|
||||||
|
return gamma_file;
|
||||||
|
}
|
||||||
|
|
||||||
void hg_settingdialog::closeEvent(QCloseEvent* e)
|
void hg_settingdialog::closeEvent(QCloseEvent* e)
|
||||||
{
|
{
|
||||||
|
@ -1760,7 +1791,6 @@ void hg_settingdialog::save_scheme(void)
|
||||||
int names = 0;
|
int names = 0;
|
||||||
OPTVAL ov;
|
OPTVAL ov;
|
||||||
OPTSCHEME os;
|
OPTSCHEME os;
|
||||||
bool save_gamma = false;
|
|
||||||
QString gamma_file("");
|
QString gamma_file("");
|
||||||
const SANE_Option_Descriptor *opt = nullptr;
|
const SANE_Option_Descriptor *opt = nullptr;
|
||||||
|
|
||||||
|
@ -1771,13 +1801,7 @@ void hg_settingdialog::save_scheme(void)
|
||||||
{
|
{
|
||||||
opt = (const SANE_Option_Descriptor*)find_option_description(changed_opts_[i].opt);
|
opt = (const SANE_Option_Descriptor*)find_option_description(changed_opts_[i].opt);
|
||||||
if(!opt)
|
if(!opt)
|
||||||
{
|
|
||||||
if(changed_opts_[i].opt == (int)OPTION_ID_ZDYGM)
|
|
||||||
{
|
|
||||||
gamma_file = changed_opts_[i].val.toString();
|
|
||||||
}
|
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
|
|
||||||
if(is_equal_default_value(changed_opts_[i], opt->type))
|
if(is_equal_default_value(changed_opts_[i], opt->type))
|
||||||
continue;
|
continue;
|
||||||
|
@ -1812,24 +1836,37 @@ void hg_settingdialog::save_scheme(void)
|
||||||
names++;
|
names++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// custom gamma ...
|
|
||||||
if(strcmp(opt->title, OPTION_TITLE_QYSDQX) == 0 && ov.val == "true")
|
|
||||||
{
|
|
||||||
save_gamma = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(os == src && !save_gamma)
|
if(os == src)
|
||||||
{
|
{
|
||||||
if(changed_count_ == 0)
|
if(changed_count_ == 0)
|
||||||
changed_count_ = schemes_->cur_scheme != cur_ind_;
|
changed_count_ = schemes_->cur_scheme != cur_ind_;
|
||||||
schemes_->cur_scheme = cur_ind_;
|
schemes_->cur_scheme = cur_ind_;
|
||||||
|
|
||||||
|
if(cur_ind_ >= 0 && cur_ind_ + 1 < (int)schemes_->schemes.size())
|
||||||
|
{
|
||||||
|
OPTSCHEME& schm = schemes_->schemes[cur_ind_ + 1];
|
||||||
|
std::vector<OPTVAL>::iterator it1 = std::find(schm.opts.begin(), schm.opts.end(), OPTION_TITLE_QYSDQX);
|
||||||
|
if(it1 != schm.opts.end())
|
||||||
|
{
|
||||||
|
if(it1->extra.empty())
|
||||||
|
{
|
||||||
|
changed_count_++;
|
||||||
|
gamma_file = gen_gamma_file_path();
|
||||||
|
it1->extra = gamma_file.toStdString();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
gamma_file = QString::fromStdString(it1->extra);
|
||||||
|
config::save_2_file(gamma_file, &m_gammaData, sizeof(m_gammaData));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if(os.opts.size())
|
else if(os.opts.size())
|
||||||
{
|
{
|
||||||
char buf[20];
|
char buf[20];
|
||||||
int ind = 1;
|
int ind = 1;
|
||||||
|
bool save_gamma = false;
|
||||||
|
|
||||||
if(os.name.empty())
|
if(os.name.empty())
|
||||||
os.name = os.opts[0].name + "(" + os.opts[0].val + ")";
|
os.name = os.opts[0].name + "(" + os.opts[0].val + ")";
|
||||||
|
@ -1841,20 +1878,43 @@ void hg_settingdialog::save_scheme(void)
|
||||||
}
|
}
|
||||||
os.name += buf;
|
os.name += buf;
|
||||||
|
|
||||||
|
std::vector<OPTVAL>::iterator it1 = std::find(os.opts.begin(), os.opts.end(), OPTION_TITLE_QYSDQX);
|
||||||
|
save_gamma = it1 != os.opts.end();
|
||||||
if (cur_ind_ >= 0 && cur_ind_ + 1 < (int)schemes_->schemes.size())
|
if (cur_ind_ >= 0 && cur_ind_ + 1 < (int)schemes_->schemes.size())
|
||||||
{
|
{
|
||||||
QString title(tr("save the configuration"));
|
bool overwrite = true, ask = true;
|
||||||
QString text(tr("The Settings you just set are in the original configuration \""));
|
std::vector<OPTVAL>::iterator it2 = std::find(src.opts.begin(), src.opts.end(), OPTION_TITLE_QYSDQX);
|
||||||
|
|
||||||
text += QString::fromStdString(schemes_->schemes[cur_ind_ + 1].name);
|
if(save_gamma && it2 != src.opts.end())
|
||||||
text += tr("\" changed on the basis,Please select overwrite this configuration or add a new one?\nYes: cover \"") + QString::fromStdString(schemes_->schemes[cur_ind_ + 1].name);
|
{
|
||||||
text += tr("\"\nNo: add new configuration") + QString::fromStdString(os.name);
|
OPTVAL v1(*it1), v2(*it2);
|
||||||
|
os.opts.erase(it1);
|
||||||
|
src.opts.erase(it2);
|
||||||
|
if(os == src)
|
||||||
|
{
|
||||||
|
v1 = v2;
|
||||||
|
gamma_file = QString::fromStdString(v1.extra);
|
||||||
|
ask = false;
|
||||||
|
}
|
||||||
|
os.opts.push_back(v1);
|
||||||
|
src.opts.push_back(v2);
|
||||||
|
}
|
||||||
|
if(ask)
|
||||||
|
{
|
||||||
|
QString title(tr("save the configuration"));
|
||||||
|
QString text(tr("The Settings you just set are in the original configuration \""));
|
||||||
|
|
||||||
QMessageBox msg(QMessageBox::Question, title, text, QMessageBox::Yes | QMessageBox::No, this);
|
text += QString::fromStdString(schemes_->schemes[cur_ind_ + 1].name);
|
||||||
msg.setButtonText(QMessageBox::Yes, tr("yes"));
|
text += tr("\" changed on the basis,Please select overwrite this configuration or add a new one?\nYes: cover \"") + QString::fromStdString(schemes_->schemes[cur_ind_ + 1].name);
|
||||||
msg.setButtonText(QMessageBox::No, tr("no"));
|
text += tr("\"\nNo: add new configuration") + QString::fromStdString(os.name);
|
||||||
msg.exec();
|
|
||||||
if (msg.clickedButton() == msg.button(QMessageBox::Yes))
|
QMessageBox msg(QMessageBox::Question, title, text, QMessageBox::Yes | QMessageBox::No, this);
|
||||||
|
msg.setButtonText(QMessageBox::Yes, tr("yes"));
|
||||||
|
msg.setButtonText(QMessageBox::No, tr("no"));
|
||||||
|
msg.exec();
|
||||||
|
overwrite = msg.clickedButton() == msg.button(QMessageBox::Yes);
|
||||||
|
}
|
||||||
|
if (overwrite)
|
||||||
{
|
{
|
||||||
os.name = schemes_->schemes[cur_ind_ + 1].name;
|
os.name = schemes_->schemes[cur_ind_ + 1].name;
|
||||||
schemes_->schemes.erase(schemes_->schemes.begin() + cur_ind_ + 1);
|
schemes_->schemes.erase(schemes_->schemes.begin() + cur_ind_ + 1);
|
||||||
|
@ -1871,31 +1931,12 @@ void hg_settingdialog::save_scheme(void)
|
||||||
if(save_gamma)
|
if(save_gamma)
|
||||||
{
|
{
|
||||||
if(gamma_file.length() == 0)
|
if(gamma_file.length() == 0)
|
||||||
{
|
gamma_file = gen_gamma_file_path();
|
||||||
time_t now = time(nullptr);
|
|
||||||
tm *ptm = localtime(&now);
|
|
||||||
char name[40] = {0};
|
|
||||||
|
|
||||||
sprintf(name, "/%04d%02d%02d%02d%02d%02d.gma", ptm->tm_year + 1900, ptm->tm_mon + 1, ptm->tm_mday, ptm->tm_hour, ptm->tm_min, ptm->tm_sec);
|
|
||||||
if(cfg_file_)
|
|
||||||
{
|
|
||||||
std::string str(cfg_file_->get_file().toStdString());
|
|
||||||
size_t pos = str.rfind('/');
|
|
||||||
if(pos == std::string::npos)
|
|
||||||
pos = str.rfind('\\');
|
|
||||||
if(pos != std::string::npos)
|
|
||||||
str.erase(pos);
|
|
||||||
gamma_file = QString::fromStdString(str);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
gamma_file = config::self_path();
|
|
||||||
gamma_file += QString::fromStdString(name);
|
|
||||||
}
|
|
||||||
config::save_2_file(gamma_file, &m_gammaData, sizeof(m_gammaData));
|
config::save_2_file(gamma_file, &m_gammaData, sizeof(m_gammaData));
|
||||||
ov.val = gamma_file.toStdString();
|
|
||||||
ov.type = "file";
|
std::vector<OPTVAL>::iterator it1 = std::find(os.opts.begin(), os.opts.end(), OPTION_TITLE_QYSDQX);
|
||||||
ov.name = OPTION_TITLE_ZDYGM;
|
if(it1 != os.opts.end())
|
||||||
os.opts.push_back(ov);
|
it1->extra = gamma_file.toStdString();
|
||||||
}
|
}
|
||||||
|
|
||||||
schemes_->schemes.insert(schemes_->schemes.begin() + cur_ind_ + 1, os);
|
schemes_->schemes.insert(schemes_->schemes.begin() + cur_ind_ + 1, os);
|
||||||
|
@ -2164,11 +2205,11 @@ void hg_settingdialog::slot_pushButton_scheme_management(void)
|
||||||
OPTSCHEME* s = &schemes_->schemes[id + 1];
|
OPTSCHEME* s = &schemes_->schemes[id + 1];
|
||||||
for(size_t i = 0; i < s->opts.size(); ++i)
|
for(size_t i = 0; i < s->opts.size(); ++i)
|
||||||
{
|
{
|
||||||
if(s->opts[i].name == OPTION_TITLE_ZDYGM)
|
if(s->opts[i].name == OPTION_TITLE_QYSDQX)
|
||||||
{
|
{
|
||||||
SANE_Gamma gmma;
|
SANE_Gamma gmma;
|
||||||
if(config::load_custom_gamma(s->opts[i].val.c_str(), &gmma))
|
if(config::load_custom_gamma(s->opts[i].extra.c_str(), &gmma))
|
||||||
remove(s->opts[i].val.c_str());
|
remove(s->opts[i].extra.c_str());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
schemes_->schemes.erase(schemes_->schemes.begin() + id + 1);
|
schemes_->schemes.erase(schemes_->schemes.begin() + id + 1);
|
||||||
|
@ -2198,11 +2239,11 @@ void hg_settingdialog::slot_pushButton_scheme_management(void)
|
||||||
OPTSCHEME* s = &schemes_->schemes[i];
|
OPTSCHEME* s = &schemes_->schemes[i];
|
||||||
for(size_t i = 0; i < s->opts.size(); ++i)
|
for(size_t i = 0; i < s->opts.size(); ++i)
|
||||||
{
|
{
|
||||||
if(s->opts[i].name == OPTION_TITLE_ZDYGM)
|
if(s->opts[i].name == OPTION_TITLE_QYSDQX)
|
||||||
{
|
{
|
||||||
SANE_Gamma gmma;
|
SANE_Gamma gmma;
|
||||||
if(config::load_custom_gamma(s->opts[i].val.c_str(), &gmma))
|
if(config::load_custom_gamma(s->opts[i].extra.c_str(), &gmma))
|
||||||
remove(s->opts[i].val.c_str());
|
remove(s->opts[i].extra.c_str());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,11 +29,13 @@ class hg_settingdialog : public QDialog
|
||||||
std::vector<CHANGEDOPT> changed_opts_; // values which changed
|
std::vector<CHANGEDOPT> changed_opts_; // values which changed
|
||||||
int changed_count_;
|
int changed_count_;
|
||||||
bool save_;
|
bool save_;
|
||||||
|
bool clicked_gamma_;
|
||||||
config* cfg_file_;
|
config* cfg_file_;
|
||||||
|
|
||||||
void refresh_control_value(int op_id);
|
void refresh_control_value(int op_id);
|
||||||
bool is_covered(std::vector<OPTVAL>& org, std::vector<OPTVAL>& now); // if all options in org are inclued in now, then return true
|
bool is_covered(std::vector<OPTVAL>& org, std::vector<OPTVAL>& now); // if all options in org are inclued in now, then return true
|
||||||
void on_select_scheme(int scheme_ind, bool apply_to_dev = true);
|
void on_select_scheme(int scheme_ind, bool apply_to_dev = true);
|
||||||
|
QString gen_gamma_file_path(void);
|
||||||
|
|
||||||
QMenu *top_menu_;
|
QMenu *top_menu_;
|
||||||
QLineEdit *edit_name_;
|
QLineEdit *edit_name_;
|
||||||
|
|
|
@ -2504,10 +2504,26 @@ void MainWindow::on_scanOptions_changed(const QString &device, const QString &op
|
||||||
QString info(tr("apply setting") + " '" + option + "' ");
|
QString info(tr("apply setting") + " '" + option + "' ");
|
||||||
bool ok = cur_dev_.apply_setting(schm); // check result ?
|
bool ok = cur_dev_.apply_setting(schm); // check result ?
|
||||||
if(ok)
|
if(ok)
|
||||||
|
{
|
||||||
info += tr("success");
|
info += tr("success");
|
||||||
|
cfg.select(option.toStdString().c_str());
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
|
ui->menu_device->setOptionChecked(device, option, false);
|
||||||
|
{
|
||||||
|
DEVCFG init;
|
||||||
|
if(init.schemes.size())
|
||||||
|
{
|
||||||
|
std::string name(init.schemes[0].name);
|
||||||
|
cfg.select(name.c_str());
|
||||||
|
ui->menu_device->setOptionChecked(device, QString::fromStdString(name), true);
|
||||||
|
}
|
||||||
|
}
|
||||||
info += tr("failed");
|
info += tr("failed");
|
||||||
|
}
|
||||||
|
|
||||||
|
m_config.save_scanner_configs(&cfg);
|
||||||
m_wndStatusBar->setDeviceStatusInfo(info, !ok);
|
m_wndStatusBar->setDeviceStatusInfo(info, !ok);
|
||||||
m_dialogLog->addLog(info, !ok);
|
m_dialogLog->addLog(info, !ok);
|
||||||
HGBase_WriteInfo(!ok ? HGBASE_INFOTYPE_ERROR : HGBASE_INFOTYPE_DESC, "%s", getStdString(info).c_str());
|
HGBase_WriteInfo(!ok ? HGBASE_INFOTYPE_ERROR : HGBASE_INFOTYPE_DESC, "%s", getStdString(info).c_str());
|
||||||
|
|
|
@ -20,7 +20,6 @@ bool sane_dev::apply(OPTSCHEME* schm)
|
||||||
for(int i = 1; i < count; ++i)
|
for(int i = 1; i < count; ++i)
|
||||||
{
|
{
|
||||||
const SANE_Option_Descriptor* desc = sane_get_option_descriptor(hdev_, i);
|
const SANE_Option_Descriptor* desc = sane_get_option_descriptor(hdev_, i);
|
||||||
int extra = 0;
|
|
||||||
|
|
||||||
if(!desc)
|
if(!desc)
|
||||||
continue;
|
continue;
|
||||||
|
@ -28,16 +27,16 @@ bool sane_dev::apply(OPTSCHEME* schm)
|
||||||
desc->type == SANE_TYPE_BUTTON)
|
desc->type == SANE_TYPE_BUTTON)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
act_result result = apply(desc, i, schm->opts, &extra);
|
act_result result = apply(desc, i, schm->opts);
|
||||||
if(result == ACT_RESULT_NO_NEED)
|
if(result == ACT_RESULT_NO_NEED)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if(result == ACT_RESULT_SUCCESS)
|
if(result == ACT_RESULT_SUCCESS)
|
||||||
applied += extra + 1;
|
applied++;
|
||||||
else
|
else
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
ret = schm->opts.size() <= applied;
|
ret = schm->opts.size() == applied;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(ret)
|
if(ret)
|
||||||
|
@ -45,13 +44,11 @@ bool sane_dev::apply(OPTSCHEME* schm)
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
sane_dev::act_result sane_dev::apply(const SANE_Option_Descriptor* desc, int opt, const std::vector<OPTVAL>& vals, int *apply_extra)
|
sane_dev::act_result sane_dev::apply(const SANE_Option_Descriptor* desc, int opt, const std::vector<OPTVAL>& vals)
|
||||||
{
|
{
|
||||||
act_result result = ACT_RESULT_NO_NEED;
|
act_result result = ACT_RESULT_NO_NEED;
|
||||||
const OPTVAL *cfg = nullptr;
|
const OPTVAL *cfg = nullptr;
|
||||||
|
|
||||||
if(apply_extra)
|
|
||||||
*apply_extra = 0;
|
|
||||||
for(size_t i = 0; i < vals.size(); ++i)
|
for(size_t i = 0; i < vals.size(); ++i)
|
||||||
{
|
{
|
||||||
if(vals[i].name == desc->title)
|
if(vals[i].name == desc->title)
|
||||||
|
@ -104,19 +101,10 @@ sane_dev::act_result sane_dev::apply(const SANE_Option_Descriptor* desc, int opt
|
||||||
|
|
||||||
if(cfg->name == OPTION_TITLE_QYSDQX && cfg->val == "true")
|
if(cfg->name == OPTION_TITLE_QYSDQX && cfg->val == "true")
|
||||||
{
|
{
|
||||||
for(size_t i = 0; i < vals.size(); ++i)
|
SANE_Gamma gamma = {0};
|
||||||
{
|
unsigned int l = 0;
|
||||||
if(vals[i].name == OPTION_TITLE_ZDYGM)
|
if(config::load_custom_gamma(cfg->extra.c_str(), &gamma))
|
||||||
{
|
sane_io_control(hdev_, IO_CTRL_CODE_SET_CUSTOM_GAMMA, &gamma, &l);
|
||||||
SANE_Gamma gamma = {0};
|
|
||||||
unsigned int l = 0;
|
|
||||||
if(config::load_custom_gamma(vals[i].val.c_str(), &gamma))
|
|
||||||
sane_io_control(hdev_, IO_CTRL_CODE_SET_CUSTOM_GAMMA, &gamma, &l);
|
|
||||||
if(apply_extra)
|
|
||||||
*apply_extra = 1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,7 @@ class sane_dev
|
||||||
};
|
};
|
||||||
|
|
||||||
bool apply(OPTSCHEME* schm);
|
bool apply(OPTSCHEME* schm);
|
||||||
act_result apply(const SANE_Option_Descriptor* desc, int opt, const std::vector<OPTVAL>& vals, int *apply_extra = nullptr);
|
act_result apply(const SANE_Option_Descriptor* desc, int opt, const std::vector<OPTVAL>& vals);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
sane_dev();
|
sane_dev();
|
||||||
|
|
Loading…
Reference in New Issue