This commit is contained in:
luoliangyi 2024-04-30 10:39:08 +08:00
parent 83886ff8b7
commit bfdb042f6b
2 changed files with 31 additions and 86 deletions

View File

@ -227,6 +227,7 @@ void Form_DeviceConfig::Init(const std::vector<DeviceConfig>& deviceConfigs)
devConfigEx.title = title;
devConfigEx.valueType = 1;
devConfigEx.stringValue = value;
devConfigEx.hide = ((desp->cap & SANE_CAP_INACTIVE) == SANE_CAP_INACTIVE);
if (SANE_CONSTRAINT_STRING_LIST == desp->constraint_type)
{
@ -253,6 +254,7 @@ void Form_DeviceConfig::Init(const std::vector<DeviceConfig>& deviceConfigs)
devConfigEx.title = title;
devConfigEx.valueType = 2;
devConfigEx.intValue = (int)value;
devConfigEx.hide = ((desp->cap & SANE_CAP_INACTIVE) == SANE_CAP_INACTIVE);
if (SANE_CONSTRAINT_WORD_LIST == desp->constraint_type)
{
@ -284,6 +286,7 @@ void Form_DeviceConfig::Init(const std::vector<DeviceConfig>& deviceConfigs)
devConfigEx.title = title;
devConfigEx.valueType = 3;
devConfigEx.doubleValue = SANE_UNFIX(value);
devConfigEx.hide = ((desp->cap & SANE_CAP_INACTIVE) == SANE_CAP_INACTIVE);
if (SANE_CONSTRAINT_WORD_LIST == desp->constraint_type)
{
@ -315,6 +318,7 @@ void Form_DeviceConfig::Init(const std::vector<DeviceConfig>& deviceConfigs)
devConfigEx.title = title;
devConfigEx.valueType = 4;
devConfigEx.boolValue = (bool)value;
devConfigEx.hide = ((desp->cap & SANE_CAP_INACTIVE) == SANE_CAP_INACTIVE);
assert(!m_deviceConfigsGroups.empty());
m_deviceConfigsGroups[m_deviceConfigsGroups.size() - 1].deviceConfigs.push_back(devConfigEx);
@ -505,23 +509,13 @@ void Form_DeviceConfig::Init(const std::vector<DeviceConfig>& deviceConfigs)
deviceConfigEx.ctrl = ctrl;
deviceConfigEx.ctrlWidget = ctrlWidget;
layout->addRow(label, ctrlWidget);
label->setVisible(!deviceConfigEx.hide);
ctrlWidget->setVisible(!deviceConfigEx.hide);
}
tabWidget->addTab(scrollArea, QString::fromStdString(m_deviceConfigsGroups[i].groupTitle));
}
// 6.更新控件显示状态
for (int i = 0; i < (int)m_deviceConfigsGroups.size(); ++i)
{
for (int j = 0; j < (int)m_deviceConfigsGroups[i].deviceConfigs.size(); ++j)
{
const DeviceConfigEx &deviceConfigEx = m_deviceConfigsGroups[i].deviceConfigs[j];
const SANE_Option_Descriptor* desp = sane_get_option_descriptor(m_devHandle, deviceConfigEx.id);
bool hide = ((desp->cap & SANE_CAP_INACTIVE) == SANE_CAP_INACTIVE);
deviceConfigEx.label->setVisible(!hide);
deviceConfigEx.ctrlWidget->setVisible(!hide);
}
}
}
void Form_DeviceConfig::Update(int ignoreId)
@ -531,11 +525,11 @@ void Form_DeviceConfig::Update(int ignoreId)
sane_control_option(m_devHandle, 0, SANE_ACTION_GET_VALUE, &num_dev_options, NULL);
for (int k = 1; k < num_dev_options; ++k)
{
const SANE_Option_Descriptor* desp = sane_get_option_descriptor(m_devHandle, k);
if (NULL == desp)
if (k == ignoreId)
continue;
if (k == ignoreId)
const SANE_Option_Descriptor* desp = sane_get_option_descriptor(m_devHandle, k);
if (NULL == desp)
continue;
const char* name = desp->name;
@ -545,6 +539,10 @@ void Form_DeviceConfig::Update(int ignoreId)
if (0 == strcmp(SANE_STD_OPT_NAME_IS_CUSTOM_GAMMA, name))
continue;
const char* title = desp->title;
while (' ' == *title)
++title;
DeviceConfigEx *pDeviceConfigEx = nullptr;
for (int i = 0; i < (int)m_deviceConfigsGroups.size(); ++i)
{
@ -560,6 +558,11 @@ void Form_DeviceConfig::Update(int ignoreId)
if (nullptr != pDeviceConfigEx)
{
assert(pDeviceConfigEx->id == k);
assert(pDeviceConfigEx->name == name);
assert(pDeviceConfigEx->title == title);
pDeviceConfigEx->hide = ((desp->cap & SANE_CAP_INACTIVE) == SANE_CAP_INACTIVE);
pDeviceConfigEx->valueType = 0;
pDeviceConfigEx->stringValue.clear();
pDeviceConfigEx->intValue = 0;
@ -759,21 +762,9 @@ void Form_DeviceConfig::Update(int ignoreId)
connect(checkBox, SIGNAL(stateChanged(int)), this, SLOT(on_checkedClicked()));
}
}
}
}
for (int i = 0; i < (int)m_deviceConfigsGroups.size(); ++i)
{
for (int j = 0; j < (int)m_deviceConfigsGroups[i].deviceConfigs.size(); ++j)
{
const DeviceConfigEx &deviceConfigEx = m_deviceConfigsGroups[i].deviceConfigs[j];
if (deviceConfigEx.id == ignoreId)
continue;
const SANE_Option_Descriptor* desp = sane_get_option_descriptor(m_devHandle, deviceConfigEx.id);
bool hide = ((desp->cap & SANE_CAP_INACTIVE) == SANE_CAP_INACTIVE);
deviceConfigEx.label->setVisible(!hide);
deviceConfigEx.ctrlWidget->setVisible(!hide);
deviceConfigEx.label->setVisible(!deviceConfigEx.hide);
deviceConfigEx.ctrlWidget->setVisible(!deviceConfigEx.hide);
}
}
}
@ -837,24 +828,18 @@ void Form_DeviceConfig::on_string_list_comboBoxClicked()
return;
}
DeviceConfigEx *pDeviceConfigEx = nullptr;
for (int i = 0; i < (int)m_deviceConfigsGroups.size(); ++i)
{
for (int j = 0; j < (int)m_deviceConfigsGroups[i].deviceConfigs.size(); ++j)
{
if (m_deviceConfigsGroups[i].deviceConfigs[j].id == id)
{
pDeviceConfigEx = &m_deviceConfigsGroups[i].deviceConfigs[j];
m_deviceConfigsGroups[i].deviceConfigs[j].stringValue = currentText;
break;
}
}
}
if (nullptr != pDeviceConfigEx)
{
pDeviceConfigEx->stringValue = currentText;
}
if ((method & SANE_INFO_RELOAD_OPTIONS) == SANE_INFO_RELOAD_OPTIONS)
{
Update(id);
@ -880,24 +865,18 @@ void Form_DeviceConfig::on_int_list_comboBoxClicked()
return;
}
DeviceConfigEx *pDeviceConfigEx = nullptr;
for (int i = 0; i < (int)m_deviceConfigsGroups.size(); ++i)
{
for (int j = 0; j < (int)m_deviceConfigsGroups[i].deviceConfigs.size(); ++j)
{
if (m_deviceConfigsGroups[i].deviceConfigs[j].id == id)
{
pDeviceConfigEx = &m_deviceConfigsGroups[i].deviceConfigs[j];
m_deviceConfigsGroups[i].deviceConfigs[j].intValue = currentValue;
break;
}
}
}
if (nullptr != pDeviceConfigEx)
{
pDeviceConfigEx->intValue = currentValue;
}
if ((method & SANE_INFO_RELOAD_OPTIONS) == SANE_INFO_RELOAD_OPTIONS)
{
Update(id);
@ -923,24 +902,18 @@ void Form_DeviceConfig::on_double_list_comboBoxClicked()
return;
}
DeviceConfigEx *pDeviceConfigEx = nullptr;
for (int i = 0; i < (int)m_deviceConfigsGroups.size(); ++i)
{
for (int j = 0; j < (int)m_deviceConfigsGroups[i].deviceConfigs.size(); ++j)
{
if (m_deviceConfigsGroups[i].deviceConfigs[j].id == id)
{
pDeviceConfigEx = &m_deviceConfigsGroups[i].deviceConfigs[j];
m_deviceConfigsGroups[i].deviceConfigs[j].doubleValue = comboBox->currentText().toDouble();
break;
}
}
}
if (nullptr != pDeviceConfigEx)
{
pDeviceConfigEx->doubleValue = comboBox->currentText().toDouble();
}
if ((method & SANE_INFO_RELOAD_OPTIONS) == SANE_INFO_RELOAD_OPTIONS)
{
Update(id);
@ -973,24 +946,18 @@ void Form_DeviceConfig::on_int_sliderClicked(int value)
return;
}
DeviceConfigEx *pDeviceConfigEx = nullptr;
for (int i = 0; i < (int)m_deviceConfigsGroups.size(); ++i)
{
for (int j = 0; j < (int)m_deviceConfigsGroups[i].deviceConfigs.size(); ++j)
{
if (m_deviceConfigsGroups[i].deviceConfigs[j].id == id)
{
pDeviceConfigEx = &m_deviceConfigsGroups[i].deviceConfigs[j];
m_deviceConfigsGroups[i].deviceConfigs[j].intValue = currentValue;
break;
}
}
}
if (nullptr != pDeviceConfigEx)
{
pDeviceConfigEx->intValue = currentValue;
}
if ((method & SANE_INFO_RELOAD_OPTIONS) == SANE_INFO_RELOAD_OPTIONS)
{
Update(id);
@ -1023,24 +990,18 @@ void Form_DeviceConfig::on_double_sliderClicked(int value)
return;
}
DeviceConfigEx *pDeviceConfigEx = nullptr;
for (int i = 0; i < (int)m_deviceConfigsGroups.size(); ++i)
{
for (int j = 0; j < (int)m_deviceConfigsGroups[i].deviceConfigs.size(); ++j)
{
if (m_deviceConfigsGroups[i].deviceConfigs[j].id == id)
{
pDeviceConfigEx = &m_deviceConfigsGroups[i].deviceConfigs[j];
m_deviceConfigsGroups[i].deviceConfigs[j].doubleValue = value / 100.0;
break;
}
}
}
if (nullptr != pDeviceConfigEx)
{
pDeviceConfigEx->doubleValue = value / 100.0;
}
if ((method & SANE_INFO_RELOAD_OPTIONS) == SANE_INFO_RELOAD_OPTIONS)
{
Update(id);
@ -1080,24 +1041,18 @@ void Form_DeviceConfig::on_string_comboBoxClicked()
return;
}
DeviceConfigEx *pDeviceConfigEx = nullptr;
for (int i = 0; i < (int)m_deviceConfigsGroups.size(); ++i)
{
for (int j = 0; j < (int)m_deviceConfigsGroups[i].deviceConfigs.size(); ++j)
{
if (m_deviceConfigsGroups[i].deviceConfigs[j].id == id)
{
pDeviceConfigEx = &m_deviceConfigsGroups[i].deviceConfigs[j];
m_deviceConfigsGroups[i].deviceConfigs[j].stringValue = currentText;
break;
}
}
}
if (nullptr != pDeviceConfigEx)
{
pDeviceConfigEx->stringValue = currentText;
}
if ((method & SANE_INFO_RELOAD_OPTIONS) == SANE_INFO_RELOAD_OPTIONS)
{
Update(id);
@ -1123,24 +1078,18 @@ void Form_DeviceConfig::on_spinBoxClicked(int value)
return;
}
DeviceConfigEx *pDeviceConfigEx = nullptr;
for (int i = 0; i < (int)m_deviceConfigsGroups.size(); ++i)
{
for (int j = 0; j < (int)m_deviceConfigsGroups[i].deviceConfigs.size(); ++j)
{
if (m_deviceConfigsGroups[i].deviceConfigs[j].id == id)
{
pDeviceConfigEx = &m_deviceConfigsGroups[i].deviceConfigs[j];
m_deviceConfigsGroups[i].deviceConfigs[j].intValue = currentValue;
break;
}
}
}
if (nullptr != pDeviceConfigEx)
{
pDeviceConfigEx->intValue = currentValue;
}
if ((method & SANE_INFO_RELOAD_OPTIONS) == SANE_INFO_RELOAD_OPTIONS)
{
Update(id);
@ -1166,24 +1115,18 @@ void Form_DeviceConfig::on_checkedClicked()
return;
}
DeviceConfigEx *pDeviceConfigEx = nullptr;
for (int i = 0; i < (int)m_deviceConfigsGroups.size(); ++i)
{
for (int j = 0; j < (int)m_deviceConfigsGroups[i].deviceConfigs.size(); ++j)
{
if (m_deviceConfigsGroups[i].deviceConfigs[j].id == id)
{
pDeviceConfigEx = &m_deviceConfigsGroups[i].deviceConfigs[j];
m_deviceConfigsGroups[i].deviceConfigs[j].boolValue = currentState;
break;
}
}
}
if (nullptr != pDeviceConfigEx)
{
pDeviceConfigEx->boolValue = currentState;
}
if ((method & SANE_INFO_RELOAD_OPTIONS) == SANE_INFO_RELOAD_OPTIONS)
{
Update(id);

View File

@ -36,6 +36,7 @@ struct DeviceConfigEx
id = -1;
name.clear();
title.clear();
hide = false;
valueType = 0;
stringValue.clear();
@ -61,6 +62,7 @@ struct DeviceConfigEx
int id;
std::string name;
std::string title;
bool hide;
// 配置值
int valueType; // 0-无1-字符串2-整型3-浮点4-布尔