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

View File

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