diff --git a/app/scanner2/dialog_multirotate.ui b/app/scanner2/dialog_multirotate.ui index 3501b546..eae6155e 100644 --- a/app/scanner2/dialog_multirotate.ui +++ b/app/scanner2/dialog_multirotate.ui @@ -6,22 +6,10 @@ 0 0 - 350 - 250 + 414 + 261 - - - 350 - 250 - - - - - 350 - 250 - - Multiple rotation diff --git a/modules/saneui/hg_settingdialog.cpp b/modules/saneui/hg_settingdialog.cpp index fdb082ed..6f43d06c 100644 --- a/modules/saneui/hg_settingdialog.cpp +++ b/modules/saneui/hg_settingdialog.cpp @@ -118,6 +118,7 @@ void hg_settingdialog::updateOpt() bool first = true; m_list_defaultOptions.clear(); + m_list_getOpt.clear(); SANE_Int dev_options = 0; m_saneAPI.sane_control_option_api(m_devHandle, 0, SANE_ACTION_GET_VALUE, &dev_options, nullptr); @@ -137,6 +138,7 @@ void hg_settingdialog::updateOpt() m_saneAPI.sane_control_option_api(m_devHandle, i, SANE_ACTION_GET_VALUE, &init, &method); m_list_defaultOptions.append(QPair(opt, QVariant(init))); + m_list_getOpt.append(QPair(i, opt)); if(first) { @@ -151,6 +153,7 @@ void hg_settingdialog::updateOpt() m_saneAPI.sane_control_option_api(m_devHandle, i, SANE_ACTION_GET_VALUE, &init, &method); m_list_defaultOptions.append(QPair(opt, QVariant(init))); + m_list_getOpt.append(QPair(i, opt)); if(first) { @@ -165,6 +168,7 @@ void hg_settingdialog::updateOpt() m_saneAPI.sane_control_option_api(m_devHandle, i, SANE_ACTION_GET_VALUE, &init, &method); m_list_defaultOptions.append(QPair(opt, QVariant(init))); + m_list_getOpt.append(QPair(i, opt)); if(first) { @@ -180,6 +184,7 @@ void hg_settingdialog::updateOpt() m_saneAPI.sane_control_option_api(m_devHandle, i, SANE_ACTION_GET_VALUE, init, &method); QString str = QString::fromStdString(init); m_list_defaultOptions.append(QPair(opt, QVariant(QString::fromStdString(init)))); + m_list_getOpt.append(QPair(i, opt)); if(first) { @@ -194,6 +199,7 @@ void hg_settingdialog::updateOpt() else { m_list_defaultOptions.append(QPair(opt, QVariant(0))); + m_list_getOpt.append(QPair(i, opt)); } } } @@ -752,6 +758,16 @@ void hg_settingdialog::refresh_control_value(int op_id) char buf[40] = {0}; sprintf(buf, "%d", m_list_defaultOptions.at(op_id - 1).second.toInt()); comb->disconnect(comb, SIGNAL(currentTextChanged(const QString)), this, SLOT(slot_string_list_comboBoxClicked())); + + auto p_str = opt->constraint.word_list; + char buf2[20]; + comb->clear(); + for (SANE_Int i = 0; i < p_str[0]; ++i) + { + sprintf(buf2, "%d", p_str[i + 1]); + comb->addItem(QString::fromStdString(buf2)); + } + comb->setCurrentText(QString::fromStdString(buf)); connect(comb, SIGNAL(currentTextChanged(const QString)), this, SLOT(slot_string_list_comboBoxClicked())); } @@ -823,6 +839,22 @@ void hg_settingdialog::refresh_control_value(int op_id) if(comb) { disconnect(comb, SIGNAL(currentTextChanged(const QString)), this, SLOT(slot_string_list_comboBoxClicked())); + + comb->clear(); + auto p_str = opt->constraint.string_list; + QStringList stringList; + while (*p_str) + { + stringList.append(*p_str); + p_str++; + } + + if (stringList.isEmpty() != true) + { + for (int i = 0; i < (stringList.size()); i++) + comb->addItem(stringList.at(i)); + } + comb->setCurrentText(m_list_defaultOptions.at(op_id - 1).second.toString()); // comb->setProperty(hg_settingdialog::property_combox_data_type_.c_str(), COMBO_VAL_STRING); connect(comb, SIGNAL(currentTextChanged(const QString)), this, SLOT(slot_string_list_comboBoxClicked())); @@ -912,15 +944,7 @@ void hg_settingdialog::slot_checkedClicked() SANE_Int id = checkBox->property("controls_id").toInt(); SANE_Bool checkBoxcurrentState = checkBox->isChecked(); - const SANE_Option_Descriptor* opt = nullptr; - for(int i = 0; i < m_list_getOpt.size(); i++) - if (m_list_getOpt.at(i).first == id) - { - opt = reinterpret_cast(m_list_getOpt.at(i).second); - break; - } - - m_list_IdValueTitle.append(QPair, QString>(QPair(id, checkBoxcurrentState), md5(opt->title))); +// m_list_IdValueTitle.append(QPair, QString>(QPair(id, checkBoxcurrentState), md5(opt->title))); SANE_Int method = 0; SANE_Status ret = m_saneAPI.sane_control_option_api(m_devHandle, id, SANE_ACTION_SET_VALUE, &checkBoxcurrentState, &method); @@ -937,6 +961,15 @@ void hg_settingdialog::slot_checkedClicked() else if(method & SANE_INFO_INEXACT) checkBox->setCheckState(checkBoxcurrentState ? Qt::CheckState::Checked : Qt::CheckState::Unchecked); + for (int i = 0; i < m_list_getOpt.size(); i++) + { + if (m_list_getOpt.at(i).first == id) + { + opt = reinterpret_cast(m_list_getOpt.at(i).second); + break; + } + } + if(strcmp(opt->name, SANE_STD_OPT_NAME_CUSTOM_AREA) == 0) btn_cut_area_->setEnabled(checkBoxcurrentState); else if (strcmp(opt->name, SANE_STD_OPT_NAME_IS_CUSTOM_GAMMA) == 0) @@ -968,14 +1001,16 @@ void hg_settingdialog::slot_string_list_comboBoxClicked() } const SANE_Option_Descriptor* opt = nullptr; - for(int i = 0; i < m_list_getOpt.size(); i++) + for (int i = 0; i < m_list_getOpt.size(); i++) + { if (m_list_getOpt.at(i).first == id) { opt = reinterpret_cast(m_list_getOpt.at(i).second); break; } + } - m_list_IdValueTitle.append(QPair, QString>(QPair(id, &comboBoxcurrentItem.at(0)), md5(opt->title))); +// m_list_IdValueTitle.append(QPair, QString>(QPair(id, &comboBoxcurrentItem.at(0)), md5(opt->title))); SANE_Int method = 0; SANE_String buf = (SANE_String)malloc(opt->size * 2 + 4); @@ -1242,13 +1277,15 @@ void hg_settingdialog::slot_word_list_comboBoxClicked(int value) SANE_Int temp = value; const SANE_Option_Descriptor* opt = nullptr; - for(int i = 0; i < m_list_getOpt.size(); i++) + for (int i = 0; i < m_list_getOpt.size(); i++) + { if (m_list_getOpt.at(i).first == id) { opt = reinterpret_cast(m_list_getOpt.at(i).second); break; } - m_list_IdValueTitle.append(QPair, QString>(QPair(id, temp), md5(opt->title))); + } +// m_list_IdValueTitle.append(QPair, QString>(QPair(id, temp), md5(opt->title))); SANE_Int method = 0; @@ -1279,21 +1316,15 @@ void hg_settingdialog::slot_sliderClicked(int value) QSlider *slider = qobject_cast(sender()); SANE_Int id = slider->property("controls_id").toInt(); - const SANE_Option_Descriptor* opt = nullptr; - for(int i = 0; i < m_list_getOpt.size(); i++) - if (m_list_getOpt.at(i).first == id) - { - opt = reinterpret_cast(m_list_getOpt.at(i).second); - break; - } - QAbstractSpinBox* spin = nullptr; for(int i = 0; i < m_list_sliderSpinbox.size(); i++) - if (m_list_sliderSpinbox.at(i).first == slider) + { + if (m_list_sliderSpinbox.at(i).first == slider) { spin = reinterpret_cast(m_list_sliderSpinbox.at(i).second); break; } + } if (spin != nullptr) { @@ -1304,7 +1335,7 @@ void hg_settingdialog::slot_sliderClicked(int value) QSpinBox* spin_ = reinterpret_cast(spin); spin_->setValue(value); - m_list_IdValueTitle.append(QPair, QString>(QPair(id, val), md5(opt->title))); +// m_list_IdValueTitle.append(QPair, QString>(QPair(id, val), md5(opt->title))); } else { @@ -1316,7 +1347,7 @@ void hg_settingdialog::slot_sliderClicked(int value) val = SANE_FIX(temp); db_val = true; - m_list_IdValueTitle.append(QPair, QString>(QPair(id, temp), md5(opt->title))); +// m_list_IdValueTitle.append(QPair, QString>(QPair(id, temp), md5(opt->title))); } SANE_Status ret = m_saneAPI.sane_control_option_api(m_devHandle, id, SANE_ACTION_SET_VALUE, &val, &method); if (ret == SANE_STATUS_UNSUPPORTED) @@ -1382,14 +1413,6 @@ void hg_settingdialog::slot_spinBoxClicked(int value) QSpinBox* spinBox = qobject_cast(sender()); int id = spinBox->property("controls_id").toInt(); - const SANE_Option_Descriptor* opt = nullptr; - for(int i = 0; i < m_list_getOpt.size(); i++) - if (m_list_getOpt.at(i).first == id) - { - opt = reinterpret_cast(m_list_getOpt.at(i).second); - break; - } - QAbstractSlider* slider = nullptr; for (int i = 0; i < m_list_sliderSpinbox.size(); i++) if (m_list_sliderSpinbox.at(i).second == spinBox) @@ -1401,7 +1424,7 @@ void hg_settingdialog::slot_spinBoxClicked(int value) { SANE_Int temp = value; - m_list_IdValueTitle.append(QPair, QString>(QPair(id, temp), md5(opt->title))); +// m_list_IdValueTitle.append(QPair, QString>(QPair(id, temp), md5(opt->title))); SANE_Int method = 0; SANE_Status ret = m_saneAPI.sane_control_option_api(m_devHandle, id, SANE_ACTION_SET_VALUE, &temp, &method); @@ -1433,14 +1456,16 @@ void hg_settingdialog::slot_lineEditInput() std::string lineEditCurrentText(lineEdit->text().toUtf8()); const SANE_Option_Descriptor* opt = nullptr; - for(int i = 0; i < m_list_getOpt.size(); i++) + for (int i = 0; i < m_list_getOpt.size(); i++) + { if (m_list_getOpt.at(i).first == id) { opt = reinterpret_cast(m_list_getOpt.at(i).second); break; } + } - m_list_IdValueTitle.append(QPair, QString>(QPair(id, &lineEditCurrentText.at(0)), md5(opt->title))); +// m_list_IdValueTitle.append(QPair, QString>(QPair(id, &lineEditCurrentText.at(0)), md5(opt->title))); SANE_Int method = 0; void *buf = NULL; @@ -1479,8 +1504,18 @@ void hg_settingdialog::slot_lineEditInput() v = (char*)buf; lineEdit->setText(QString::fromStdString(v)); } + + const SANE_Option_Descriptor* opt2 = nullptr; + for (int i = 0; i < m_list_getOpt.size(); i++) + { + if (m_list_getOpt.at(i).first == id) + { + opt2 = reinterpret_cast(m_list_getOpt.at(i).second); + break; + } + } - if(opt->type == SANE_TYPE_INT || opt->type == SANE_TYPE_FIXED) + if(opt2->type == SANE_TYPE_INT || opt2->type == SANE_TYPE_FIXED) { cur_scheme_->config_changed(id, (char*)buf, sizeof(SANE_Int)); } diff --git a/modules/twainui/hg_settingdialog.cpp b/modules/twainui/hg_settingdialog.cpp index 7c678f7d..244f54d4 100644 --- a/modules/twainui/hg_settingdialog.cpp +++ b/modules/twainui/hg_settingdialog.cpp @@ -153,6 +153,7 @@ void hg_settingdialog::updateOpt() bool first = true; m_list_defaultOptions.clear(); + m_list_getOpt.clear(); SANE_Int dev_options = 0; m_saneAPI.sane_control_option_api(m_devHandle, 0, SANE_ACTION_GET_VALUE, &dev_options, nullptr); @@ -172,6 +173,7 @@ void hg_settingdialog::updateOpt() m_saneAPI.sane_control_option_api(m_devHandle, i, SANE_ACTION_GET_VALUE, &init, &method); m_list_defaultOptions.append(QPair(opt, QVariant(init))); + m_list_getOpt.append(QPair(i, opt)); if(first) { @@ -186,6 +188,7 @@ void hg_settingdialog::updateOpt() m_saneAPI.sane_control_option_api(m_devHandle, i, SANE_ACTION_GET_VALUE, &init, &method); m_list_defaultOptions.append(QPair(opt, QVariant(init))); + m_list_getOpt.append(QPair(i, opt)); if(first) { @@ -200,6 +203,7 @@ void hg_settingdialog::updateOpt() m_saneAPI.sane_control_option_api(m_devHandle, i, SANE_ACTION_GET_VALUE, &init, &method); m_list_defaultOptions.append(QPair(opt, QVariant(init))); + m_list_getOpt.append(QPair(i, opt)); if(first) { @@ -213,8 +217,8 @@ void hg_settingdialog::updateOpt() char *init = (char*)malloc(opt->size * 2 + 4); m_saneAPI.sane_control_option_api(m_devHandle, i, SANE_ACTION_GET_VALUE, init, &method); - QString str = QString::fromStdString(init); m_list_defaultOptions.append(QPair(opt, QVariant(QString::fromStdString(init)))); + m_list_getOpt.append(QPair(i, opt)); if(first) { @@ -229,6 +233,7 @@ void hg_settingdialog::updateOpt() else { m_list_defaultOptions.append(QPair(opt, QVariant(0))); + m_list_getOpt.append(QPair(i, opt)); } } } @@ -796,6 +801,16 @@ void hg_settingdialog::refresh_control_value(int op_id) char buf[40] = {0}; sprintf(buf, "%d", m_list_defaultOptions.at(op_id - 1).second.toInt()); comb->disconnect(comb, SIGNAL(currentTextChanged(const QString)), this, SLOT(slot_string_list_comboBoxClicked())); + + auto p_str = opt->constraint.word_list; + char buf2[20]; + comb->clear(); + for (SANE_Int i = 0; i < p_str[0]; ++i) + { + sprintf(buf2, "%d", p_str[i + 1]); + comb->addItem(QString::fromStdString(buf2)); + } + comb->setCurrentText(QString::fromStdString(buf)); connect(comb, SIGNAL(currentTextChanged(const QString)), this, SLOT(slot_string_list_comboBoxClicked())); } @@ -867,6 +882,22 @@ void hg_settingdialog::refresh_control_value(int op_id) if(comb) { disconnect(comb, SIGNAL(currentTextChanged(const QString)), this, SLOT(slot_string_list_comboBoxClicked())); + + comb->clear(); + auto p_str = opt->constraint.string_list; + QStringList stringList; + while (*p_str) + { + stringList.append(*p_str); + p_str++; + } + + if (stringList.isEmpty() != true) + { + for (int i = 0; i < (stringList.size()); i++) + comb->addItem(stringList.at(i)); + } + comb->setCurrentText(m_list_defaultOptions.at(op_id - 1).second.toString()); // comb->setProperty(hg_settingdialog::property_combox_data_type_.c_str(), COMBO_VAL_STRING); connect(comb, SIGNAL(currentTextChanged(const QString)), this, SLOT(slot_string_list_comboBoxClicked())); @@ -956,15 +987,7 @@ void hg_settingdialog::slot_checkedClicked() SANE_Int id = checkBox->property("controls_id").toInt(); SANE_Bool checkBoxcurrentState = checkBox->isChecked(); - const SANE_Option_Descriptor* opt = nullptr; - for(int i = 0; i < m_list_getOpt.size(); i++) - if (m_list_getOpt.at(i).first == id) - { - opt = reinterpret_cast(m_list_getOpt.at(i).second); - break; - } - - m_list_IdValueTitle.append(QPair, QString>(QPair(id, checkBoxcurrentState), md5(opt->title))); +// //m_list_IdValueTitle.append(QPair, QString>(QPair(id, checkBoxcurrentState), md5(opt->title))); SANE_Int method = 0; SANE_Status ret = m_saneAPI.sane_control_option_api(m_devHandle, id, SANE_ACTION_SET_VALUE, &checkBoxcurrentState, &method); @@ -982,6 +1005,16 @@ void hg_settingdialog::slot_checkedClicked() else if(method & SANE_INFO_INEXACT) checkBox->setCheckState(checkBoxcurrentState ? Qt::CheckState::Checked : Qt::CheckState::Unchecked); + const SANE_Option_Descriptor* opt = nullptr; + for (int i = 0; i < m_list_getOpt.size(); i++) + { + if (m_list_getOpt.at(i).first == id) + { + opt = reinterpret_cast(m_list_getOpt.at(i).second); + break; + } + } + if(strcmp(opt->name, SANE_STD_OPT_NAME_CUSTOM_AREA) == 0) btn_cut_area_->setEnabled(checkBoxcurrentState); else if (strcmp(opt->name, SANE_STD_OPT_NAME_IS_CUSTOM_GAMMA) == 0) @@ -1013,14 +1046,16 @@ void hg_settingdialog::slot_string_list_comboBoxClicked() } const SANE_Option_Descriptor* opt = nullptr; - for(int i = 0; i < m_list_getOpt.size(); i++) + for (int i = 0; i < m_list_getOpt.size(); i++) + { if (m_list_getOpt.at(i).first == id) { opt = reinterpret_cast(m_list_getOpt.at(i).second); break; } + } - m_list_IdValueTitle.append(QPair, QString>(QPair(id, &comboBoxcurrentItem.at(0)), md5(opt->title))); +// m_list_IdValueTitle.append(QPair, QString>(QPair(id, &comboBoxcurrentItem.at(0)), md5(opt->title))); SANE_Int method = 0; SANE_String buf = (SANE_String)malloc(opt->size * 2 + 4); @@ -1290,14 +1325,16 @@ void hg_settingdialog::slot_word_list_comboBoxClicked(int value) SANE_Int temp = value; const SANE_Option_Descriptor* opt = nullptr; - for(int i = 0; i < m_list_getOpt.size(); i++) + for (int i = 0; i < m_list_getOpt.size(); i++) + { if (m_list_getOpt.at(i).first == id) { opt = reinterpret_cast(m_list_getOpt.at(i).second); break; } - m_list_IdValueTitle.append(QPair, QString>(QPair(id, temp), md5(opt->title))); + } +// m_list_IdValueTitle.append(QPair, QString>(QPair(id, temp), md5(opt->title))); SANE_Int method = 0; SANE_Status ret = m_saneAPI.sane_control_option_api(m_devHandle, id, SANE_ACTION_SET_VALUE, &temp, &method); @@ -1329,14 +1366,6 @@ void hg_settingdialog::slot_sliderClicked(int value) QSlider *slider = qobject_cast(sender()); SANE_Int id = slider->property("controls_id").toInt(); - const SANE_Option_Descriptor* opt = nullptr; - for(int i = 0; i < m_list_getOpt.size(); i++) - if (m_list_getOpt.at(i).first == id) - { - opt = reinterpret_cast(m_list_getOpt.at(i).second); - break; - } - QAbstractSpinBox* spin = nullptr; for(int i = 0; i < m_list_sliderSpinbox.size(); i++) if (m_list_sliderSpinbox.at(i).first == slider) @@ -1354,7 +1383,7 @@ void hg_settingdialog::slot_sliderClicked(int value) QSpinBox* spin_ = reinterpret_cast(spin); spin_->setValue(value); - m_list_IdValueTitle.append(QPair, QString>(QPair(id, val), md5(opt->title))); +// //m_list_IdValueTitle.append(QPair, QString>(QPair(id, val), md5(opt->title))); } else { @@ -1366,7 +1395,7 @@ void hg_settingdialog::slot_sliderClicked(int value) val = SANE_FIX(temp); db_val = true; - m_list_IdValueTitle.append(QPair, QString>(QPair(id, temp), md5(opt->title))); + ////m_list_IdValueTitle.append(QPair, QString>(QPair(id, temp), md5(opt->title))); } SANE_Status ret = m_saneAPI.sane_control_option_api(m_devHandle, id, SANE_ACTION_SET_VALUE, &val, &method); if (ret == SANE_STATUS_UNSUPPORTED) @@ -1383,7 +1412,7 @@ void hg_settingdialog::slot_sliderClicked(int value) ret = m_saneAPI.sane_control_option_api(m_devHandle, id, SANE_ACTION_GET_VALUE, &value, &method); slider->setValue(value); } - + QMessageBox::information(this, tr("Prompt"), tr("The funtion is unsupported")); return; } @@ -1415,11 +1444,14 @@ void hg_settingdialog::slot_doubleSpinboxClicked(double value) QAbstractSlider* slider = nullptr; int id = spinBox->property("controls_id").toInt(); for (int i = 0; i < m_list_sliderSpinbox.size(); i++) + { if (m_list_sliderSpinbox.at(i).second == spinBox) { slider = reinterpret_cast(m_list_sliderSpinbox.at(i).first); break; } + } + if(slider != nullptr) { int temp = static_cast(value / spinBox->singleStep() + 0.5); @@ -1435,25 +1467,22 @@ void hg_settingdialog::slot_spinBoxClicked(int value) int id = spinBox->property("controls_id").toInt(); const SANE_Option_Descriptor* opt = nullptr; - for(int i = 0; i < m_list_getOpt.size(); i++) - if (m_list_getOpt.at(i).first == id) - { - opt = reinterpret_cast(m_list_getOpt.at(i).second); - break; - } QAbstractSlider* slider = nullptr; for (int i = 0; i < m_list_sliderSpinbox.size(); i++) + { if (m_list_sliderSpinbox.at(i).second == spinBox) { slider = reinterpret_cast(m_list_sliderSpinbox.at(i).first); break; } + } + if(slider == nullptr) { SANE_Int temp = value; - m_list_IdValueTitle.append(QPair, QString>(QPair(id, temp), md5(opt->title))); + //m_list_IdValueTitle.append(QPair, QString>(QPair(id, temp), md5(opt->title))); SANE_Int method = 0; SANE_Status ret = m_saneAPI.sane_control_option_api(m_devHandle, id, SANE_ACTION_SET_VALUE, &temp, &method); @@ -1485,14 +1514,16 @@ void hg_settingdialog::slot_lineEditInput() std::string lineEditCurrentText(lineEdit->text().toUtf8()); const SANE_Option_Descriptor* opt = nullptr; - for(int i = 0; i < m_list_getOpt.size(); i++) + for (int i = 0; i < m_list_getOpt.size(); i++) + { if (m_list_getOpt.at(i).first == id) { opt = reinterpret_cast(m_list_getOpt.at(i).second); break; } + } - m_list_IdValueTitle.append(QPair, QString>(QPair(id, &lineEditCurrentText.at(0)), md5(opt->title))); + //m_list_IdValueTitle.append(QPair, QString>(QPair(id, &lineEditCurrentText.at(0)), md5(opt->title))); SANE_Int method = 0; void *buf = NULL; @@ -1532,7 +1563,17 @@ void hg_settingdialog::slot_lineEditInput() lineEdit->setText(QString::fromStdString(v)); } - if(opt->type == SANE_TYPE_INT || opt->type == SANE_TYPE_FIXED) + const SANE_Option_Descriptor* opt2 = nullptr; + for (int i = 0; i < m_list_getOpt.size(); i++) + { + if (m_list_getOpt.at(i).first == id) + { + opt2 = reinterpret_cast(m_list_getOpt.at(i).second); + break; + } + } + + if(opt2->type == SANE_TYPE_INT || opt2->type == SANE_TYPE_FIXED) { cur_scheme_->config_changed(id, (char*)buf, sizeof(SANE_Int)); }