scantool增加手动扫描功能
This commit is contained in:
parent
32eb7a9166
commit
4b62a7bba0
|
@ -13,13 +13,14 @@ Dialog_Add::Dialog_Add(SANE_Handle devHandle, class MainWindow *mainWnd, const s
|
||||||
setWindowFlags(Qt::Dialog | Qt::WindowCloseButtonHint);
|
setWindowFlags(Qt::Dialog | Qt::WindowCloseButtonHint);
|
||||||
this->setWindowTitle(tr("Add") + " (" + QString(deviceType.c_str()) + ")");
|
this->setWindowTitle(tr("Add") + " (" + QString(deviceType.c_str()) + ")");
|
||||||
|
|
||||||
|
ui->comboBoxButtonId->addItem("Manual");
|
||||||
// TODO 通过devHandle获取支持的按钮,并添加到下拉列表
|
// TODO 通过devHandle获取支持的按钮,并添加到下拉列表
|
||||||
ui->comboBoxButtonType->addItem("Button 1");
|
ui->comboBoxButtonId->addItem("Button 1");
|
||||||
ui->comboBoxButtonType->addItem("Button 2");
|
ui->comboBoxButtonId->addItem("Button 2");
|
||||||
ui->comboBoxButtonType->addItem("Button 3");
|
ui->comboBoxButtonId->addItem("Button 3");
|
||||||
|
|
||||||
m_scanParam.deviceType = deviceType;
|
m_scanParam.deviceType = deviceType;
|
||||||
m_scanParam.buttonType = ButtonType(ui->comboBoxButtonType->currentIndex() + 1);
|
m_scanParam.buttonId = ui->comboBoxButtonId->currentIndex();
|
||||||
m_scanParam.deviceConfigs.clear();
|
m_scanParam.deviceConfigs.clear();
|
||||||
m_scanParam.saveParam = Form_SaveParam::GetDefSaveParam();
|
m_scanParam.saveParam = Form_SaveParam::GetDefSaveParam();
|
||||||
|
|
||||||
|
@ -40,13 +41,14 @@ Dialog_Add::Dialog_Add(SANE_Handle devHandle, class MainWindow *mainWnd, const S
|
||||||
setWindowFlags(Qt::Dialog | Qt::WindowCloseButtonHint);
|
setWindowFlags(Qt::Dialog | Qt::WindowCloseButtonHint);
|
||||||
this->setWindowTitle(tr("Modify") + " (" + QString(scanParam.deviceType.c_str()) + ")");
|
this->setWindowTitle(tr("Modify") + " (" + QString(scanParam.deviceType.c_str()) + ")");
|
||||||
|
|
||||||
|
ui->comboBoxButtonId->addItem("Manual");
|
||||||
// TODO 通过devHandle获取支持的按钮,并添加到下拉列表
|
// TODO 通过devHandle获取支持的按钮,并添加到下拉列表
|
||||||
ui->comboBoxButtonType->addItem("Button 1");
|
ui->comboBoxButtonId->addItem("Button 1");
|
||||||
ui->comboBoxButtonType->addItem("Button 2");
|
ui->comboBoxButtonId->addItem("Button 2");
|
||||||
ui->comboBoxButtonType->addItem("Button 3");
|
ui->comboBoxButtonId->addItem("Button 3");
|
||||||
|
|
||||||
m_scanParam = scanParam;
|
m_scanParam = scanParam;
|
||||||
ui->comboBoxButtonType->setCurrentIndex(m_scanParam.buttonType - 1);
|
ui->comboBoxButtonId->setCurrentIndex(m_scanParam.buttonId);
|
||||||
|
|
||||||
m_formDeviceConfig = new Form_DeviceConfig(devHandle, m_scanParam.deviceConfigs, this);
|
m_formDeviceConfig = new Form_DeviceConfig(devHandle, m_scanParam.deviceConfigs, this);
|
||||||
m_formSaveParam = new Form_SaveParam(m_scanParam.saveParam, this);
|
m_formSaveParam = new Form_SaveParam(m_scanParam.saveParam, this);
|
||||||
|
@ -77,14 +79,14 @@ void Dialog_Add::on_pushButtonSaveParam_clicked()
|
||||||
ui->stackedWidget->setCurrentIndex(1);
|
ui->stackedWidget->setCurrentIndex(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Dialog_Add::on_comboBoxButtonType_currentIndexChanged(int index)
|
void Dialog_Add::on_comboBoxButtonId_currentIndexChanged(int index)
|
||||||
{
|
{
|
||||||
m_scanParam.buttonType = ButtonType(index + 1);
|
m_scanParam.buttonId = index;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Dialog_Add::on_pushButtonOK_clicked()
|
void Dialog_Add::on_pushButtonOK_clicked()
|
||||||
{
|
{
|
||||||
if (m_mainWnd->FindScanParam(m_scanParam.deviceType, m_scanParam.buttonType, m_index))
|
if (m_mainWnd->FindScanParam(m_scanParam.deviceType, m_scanParam.buttonId, m_index))
|
||||||
{
|
{
|
||||||
QMessageBox::information(this, tr("Tips"), tr("Item find in list"));
|
QMessageBox::information(this, tr("Tips"), tr("Item find in list"));
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -10,17 +10,10 @@ namespace Ui {
|
||||||
class Dialog_Add;
|
class Dialog_Add;
|
||||||
}
|
}
|
||||||
|
|
||||||
enum ButtonType
|
|
||||||
{
|
|
||||||
DeviceType_1 = 1,
|
|
||||||
DeviceType_2,
|
|
||||||
DeviceType_3
|
|
||||||
};
|
|
||||||
|
|
||||||
struct ScanParam
|
struct ScanParam
|
||||||
{
|
{
|
||||||
std::string deviceType;
|
std::string deviceType;
|
||||||
ButtonType buttonType;
|
unsigned int buttonId;
|
||||||
std::vector<DeviceConfig> deviceConfigs;
|
std::vector<DeviceConfig> deviceConfigs;
|
||||||
SaveParam saveParam;
|
SaveParam saveParam;
|
||||||
};
|
};
|
||||||
|
@ -41,7 +34,7 @@ private slots:
|
||||||
|
|
||||||
void on_pushButtonSaveParam_clicked();
|
void on_pushButtonSaveParam_clicked();
|
||||||
|
|
||||||
void on_comboBoxButtonType_currentIndexChanged(int index);
|
void on_comboBoxButtonId_currentIndexChanged(int index);
|
||||||
|
|
||||||
void on_pushButtonOK_clicked();
|
void on_pushButtonOK_clicked();
|
||||||
|
|
||||||
|
|
|
@ -31,7 +31,7 @@
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QComboBox" name="comboBoxButtonType"/>
|
<widget class="QComboBox" name="comboBoxButtonId"/>
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
|
|
|
@ -51,6 +51,159 @@ Dialog_Scan::~Dialog_Scan()
|
||||||
delete ui;
|
delete ui;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Dialog_Scan::StartScan(unsigned int buttonId)
|
||||||
|
{
|
||||||
|
if (nullptr == m_devHandle)
|
||||||
|
{
|
||||||
|
QMessageBox::information(this, tr("Tips"), tr("Device is offline"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_scanning)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string deviceType = m_devName.toStdString();
|
||||||
|
char v[256] = {0};
|
||||||
|
SANE_Status status = sane_control_option(m_devHandle, (SANE_Int)0x886D, SANE_ACTION_GET_VALUE, v, NULL);
|
||||||
|
if (SANE_STATUS_GOOD == status)
|
||||||
|
{
|
||||||
|
deviceType = v;
|
||||||
|
}
|
||||||
|
|
||||||
|
ScanParam scanParam;
|
||||||
|
if (!m_mainWnd->GetScanParam(deviceType, buttonId, scanParam))
|
||||||
|
{
|
||||||
|
QMessageBox::information(this, tr("Tips"), tr("No key scanning configuration found"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 1.恢复默认
|
||||||
|
|
||||||
|
SANE_Int num_dev_options = 0;
|
||||||
|
sane_control_option(m_devHandle, 0, SANE_ACTION_GET_VALUE, &num_dev_options, NULL);
|
||||||
|
for (int i = 1; i < num_dev_options; ++i)
|
||||||
|
{
|
||||||
|
const SANE_Option_Descriptor* desp = sane_get_option_descriptor(m_devHandle, i);
|
||||||
|
if (NULL == desp)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
const char* name = desp->name;
|
||||||
|
while (' ' == *name)
|
||||||
|
++name;
|
||||||
|
|
||||||
|
if (0 == strcmp(SANE_STD_OPT_NAME_RESTORE, name) && SANE_TYPE_BUTTON == desp->type)
|
||||||
|
{
|
||||||
|
sane_control_option(m_devHandle, i, SANE_ACTION_SET_VALUE, NULL, NULL);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2.设置新的属性
|
||||||
|
|
||||||
|
for (int i = 0; i < (int)scanParam.deviceConfigs.size(); ++i)
|
||||||
|
{
|
||||||
|
for (int j = 1; j < num_dev_options; ++j)
|
||||||
|
{
|
||||||
|
const SANE_Option_Descriptor* desp = sane_get_option_descriptor(m_devHandle, j);
|
||||||
|
if (NULL == desp)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
const char* name = desp->name;
|
||||||
|
while (' ' == *name)
|
||||||
|
++name;
|
||||||
|
|
||||||
|
if (0 == strcmp(scanParam.deviceConfigs[i].name.c_str(), name))
|
||||||
|
{
|
||||||
|
if (SANE_TYPE_STRING == desp->type)
|
||||||
|
{
|
||||||
|
sane_control_option(m_devHandle, j, SANE_ACTION_SET_VALUE, (void*)scanParam.deviceConfigs[i].stringValue.c_str(), NULL);
|
||||||
|
}
|
||||||
|
else if (SANE_TYPE_INT == desp->type)
|
||||||
|
{
|
||||||
|
SANE_Int value = scanParam.deviceConfigs[i].intValue;
|
||||||
|
sane_control_option(m_devHandle, j, SANE_ACTION_SET_VALUE, &value, NULL);
|
||||||
|
}
|
||||||
|
else if (SANE_TYPE_FIXED == desp->type)
|
||||||
|
{
|
||||||
|
SANE_Fixed value = SANE_FIX(scanParam.deviceConfigs[i].doubleValue);
|
||||||
|
sane_control_option(m_devHandle, j, SANE_ACTION_SET_VALUE, &value, NULL);
|
||||||
|
}
|
||||||
|
else if (SANE_TYPE_BOOL == desp->type)
|
||||||
|
{
|
||||||
|
SANE_Bool value = (SANE_Bool)scanParam.deviceConfigs[i].boolValue;
|
||||||
|
sane_control_option(m_devHandle, j, SANE_ACTION_SET_VALUE, &value, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 3. 获取DPI
|
||||||
|
|
||||||
|
for (int i = 1; i < num_dev_options; ++i)
|
||||||
|
{
|
||||||
|
const SANE_Option_Descriptor* desp = sane_get_option_descriptor(m_devHandle, i);
|
||||||
|
if (nullptr == desp)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (SANE_TYPE_INT == desp->type)
|
||||||
|
{
|
||||||
|
SANE_Int value = 0;
|
||||||
|
sane_control_option(m_devHandle, i, SANE_ACTION_GET_VALUE, &value, nullptr);
|
||||||
|
if (0 == strcmp(desp->name, SANE_STD_OPT_NAME_RESOLUTION))
|
||||||
|
{
|
||||||
|
m_dpi = (HGUInt)value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 4.保存配置
|
||||||
|
assert(m_scanFileName.isEmpty());
|
||||||
|
assert(nullptr == m_scanImgFmtWriter);
|
||||||
|
m_aquireIntoSaveParam = scanParam.saveParam;
|
||||||
|
m_aquireIntoInBlank = true;
|
||||||
|
m_aquireIntoBatchStartIndex = 0;
|
||||||
|
m_aquireIntoPageIndex = 0;
|
||||||
|
m_aquireIntoMultiPageCount = 0;
|
||||||
|
|
||||||
|
QDateTime dateTime = QDateTime::currentDateTime();
|
||||||
|
if (m_aquireIntoSaveParam.m_isUseSubfolderByTime)
|
||||||
|
{
|
||||||
|
m_aquireIntoSaveParam.m_savePath = getStdFileName(m_aquireIntoSaveParam.m_savePath + dateTime.toString("yyyy-MM-dd") + "/");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_aquireIntoSaveParam.m_isOcr)
|
||||||
|
{
|
||||||
|
HGBase_CreateMsgPump(&m_ocrMsgPump);
|
||||||
|
HGBase_OpenThread(ocrThreadFunc, this, &m_ocrThread);
|
||||||
|
}
|
||||||
|
|
||||||
|
m_scanning = true;
|
||||||
|
ui->comboBox->setEnabled(false);
|
||||||
|
ui->pushButtonScan->setEnabled(false);
|
||||||
|
status = sane_start(m_devHandle);
|
||||||
|
if (SANE_STATUS_GOOD != status)
|
||||||
|
{
|
||||||
|
if (NULL != m_ocrMsgPump)
|
||||||
|
{
|
||||||
|
HGBase_ExitMsgPump(m_ocrMsgPump);
|
||||||
|
HGBase_CloseThread(m_ocrThread);
|
||||||
|
m_ocrThread = NULL;
|
||||||
|
HGBase_DestroyMsgPump(m_ocrMsgPump);
|
||||||
|
m_ocrMsgPump = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_scanning = false;
|
||||||
|
m_dpi = 200;
|
||||||
|
ui->comboBox->setEnabled(true);
|
||||||
|
ui->pushButtonScan->setEnabled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void Dialog_Scan::StopScan()
|
void Dialog_Scan::StopScan()
|
||||||
{
|
{
|
||||||
if (m_scanning)
|
if (m_scanning)
|
||||||
|
@ -59,6 +212,8 @@ void Dialog_Scan::StopScan()
|
||||||
sane_cancel(m_devHandle);
|
sane_cancel(m_devHandle);
|
||||||
m_scanning = false;
|
m_scanning = false;
|
||||||
m_dpi = 200;
|
m_dpi = 200;
|
||||||
|
ui->comboBox->setEnabled(true);
|
||||||
|
ui->pushButtonScan->setEnabled(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -445,149 +600,10 @@ void Dialog_Scan::on_deviceRemove(QString devName)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Dialog_Scan::on_keyPress(unsigned int buttonType)
|
void Dialog_Scan::on_keyPress(unsigned int buttonId)
|
||||||
{
|
{
|
||||||
assert(NULL != m_devHandle);
|
assert(NULL != m_devHandle);
|
||||||
if (m_scanning)
|
StartScan(buttonId);
|
||||||
{
|
|
||||||
// 扫描过程中,不响应按键
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string deviceType = m_devName.toStdString(); // TODO 获取m_devHandle设备类型
|
|
||||||
char v[256] = {0};
|
|
||||||
SANE_Status status = sane_control_option(m_devHandle, (SANE_Int)0x886D, SANE_ACTION_GET_VALUE, v, NULL);
|
|
||||||
if (SANE_STATUS_GOOD == status)
|
|
||||||
{
|
|
||||||
deviceType = v;
|
|
||||||
}
|
|
||||||
|
|
||||||
ScanParam scanParam;
|
|
||||||
if (!m_mainWnd->GetScanParam(deviceType, (ButtonType)buttonType, scanParam))
|
|
||||||
{
|
|
||||||
QMessageBox::information(this, tr("Tips"), tr("No key scanning configuration found"));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 1.恢复默认
|
|
||||||
|
|
||||||
SANE_Int num_dev_options = 0;
|
|
||||||
sane_control_option(m_devHandle, 0, SANE_ACTION_GET_VALUE, &num_dev_options, NULL);
|
|
||||||
for (int i = 1; i < num_dev_options; ++i)
|
|
||||||
{
|
|
||||||
const SANE_Option_Descriptor* desp = sane_get_option_descriptor(m_devHandle, i);
|
|
||||||
if (NULL == desp)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
const char* name = desp->name;
|
|
||||||
while (' ' == *name)
|
|
||||||
++name;
|
|
||||||
|
|
||||||
if (0 == strcmp(SANE_STD_OPT_NAME_RESTORE, name) && SANE_TYPE_BUTTON == desp->type)
|
|
||||||
{
|
|
||||||
sane_control_option(m_devHandle, i, SANE_ACTION_SET_VALUE, NULL, NULL);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 2.设置新的属性
|
|
||||||
|
|
||||||
for (int i = 0; i < (int)scanParam.deviceConfigs.size(); ++i)
|
|
||||||
{
|
|
||||||
for (int j = 1; j < num_dev_options; ++j)
|
|
||||||
{
|
|
||||||
const SANE_Option_Descriptor* desp = sane_get_option_descriptor(m_devHandle, j);
|
|
||||||
if (NULL == desp)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
const char* name = desp->name;
|
|
||||||
while (' ' == *name)
|
|
||||||
++name;
|
|
||||||
|
|
||||||
if (0 == strcmp(scanParam.deviceConfigs[i].name.c_str(), name))
|
|
||||||
{
|
|
||||||
if (SANE_TYPE_STRING == desp->type)
|
|
||||||
{
|
|
||||||
sane_control_option(m_devHandle, j, SANE_ACTION_SET_VALUE, (void*)scanParam.deviceConfigs[i].stringValue.c_str(), NULL);
|
|
||||||
}
|
|
||||||
else if (SANE_TYPE_INT == desp->type)
|
|
||||||
{
|
|
||||||
SANE_Int value = scanParam.deviceConfigs[i].intValue;
|
|
||||||
sane_control_option(m_devHandle, j, SANE_ACTION_SET_VALUE, &value, NULL);
|
|
||||||
}
|
|
||||||
else if (SANE_TYPE_FIXED == desp->type)
|
|
||||||
{
|
|
||||||
SANE_Fixed value = SANE_FIX(scanParam.deviceConfigs[i].doubleValue);
|
|
||||||
sane_control_option(m_devHandle, j, SANE_ACTION_SET_VALUE, &value, NULL);
|
|
||||||
}
|
|
||||||
else if (SANE_TYPE_BOOL == desp->type)
|
|
||||||
{
|
|
||||||
SANE_Bool value = (SANE_Bool)scanParam.deviceConfigs[i].boolValue;
|
|
||||||
sane_control_option(m_devHandle, j, SANE_ACTION_SET_VALUE, &value, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 3. 获取DPI
|
|
||||||
|
|
||||||
for (int i = 1; i < num_dev_options; ++i)
|
|
||||||
{
|
|
||||||
const SANE_Option_Descriptor* desp = sane_get_option_descriptor(m_devHandle, i);
|
|
||||||
if (nullptr == desp)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (SANE_TYPE_INT == desp->type)
|
|
||||||
{
|
|
||||||
SANE_Int value = 0;
|
|
||||||
sane_control_option(m_devHandle, i, SANE_ACTION_GET_VALUE, &value, nullptr);
|
|
||||||
if (0 == strcmp(desp->name, SANE_STD_OPT_NAME_RESOLUTION))
|
|
||||||
{
|
|
||||||
m_dpi = (HGUInt)value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 4.保存配置
|
|
||||||
assert(m_scanFileName.isEmpty());
|
|
||||||
assert(nullptr == m_scanImgFmtWriter);
|
|
||||||
m_aquireIntoSaveParam = scanParam.saveParam;
|
|
||||||
m_aquireIntoInBlank = true;
|
|
||||||
m_aquireIntoBatchStartIndex = 0;
|
|
||||||
m_aquireIntoPageIndex = 0;
|
|
||||||
m_aquireIntoMultiPageCount = 0;
|
|
||||||
|
|
||||||
QDateTime dateTime = QDateTime::currentDateTime();
|
|
||||||
if (m_aquireIntoSaveParam.m_isUseSubfolderByTime)
|
|
||||||
{
|
|
||||||
m_aquireIntoSaveParam.m_savePath = getStdFileName(m_aquireIntoSaveParam.m_savePath + dateTime.toString("yyyy-MM-dd") + "/");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (m_aquireIntoSaveParam.m_isOcr)
|
|
||||||
{
|
|
||||||
HGBase_CreateMsgPump(&m_ocrMsgPump);
|
|
||||||
HGBase_OpenThread(ocrThreadFunc, this, &m_ocrThread);
|
|
||||||
}
|
|
||||||
|
|
||||||
m_scanning = true;
|
|
||||||
status = sane_start(m_devHandle);
|
|
||||||
if (SANE_STATUS_GOOD != status)
|
|
||||||
{
|
|
||||||
if (NULL != m_ocrMsgPump)
|
|
||||||
{
|
|
||||||
HGBase_ExitMsgPump(m_ocrMsgPump);
|
|
||||||
HGBase_CloseThread(m_ocrThread);
|
|
||||||
m_ocrThread = NULL;
|
|
||||||
HGBase_DestroyMsgPump(m_ocrMsgPump);
|
|
||||||
m_ocrMsgPump = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
m_scanning = false;
|
|
||||||
m_dpi = 200;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Dialog_Scan::on_scanWorking()
|
void Dialog_Scan::on_scanWorking()
|
||||||
|
@ -602,7 +618,7 @@ void Dialog_Scan::on_scanInfo(QString info, bool error)
|
||||||
|
|
||||||
void Dialog_Scan::on_scanImage(unsigned int count)
|
void Dialog_Scan::on_scanImage(unsigned int count)
|
||||||
{
|
{
|
||||||
// 更新扫描数量到进度窗口
|
// TODO 更新扫描数量到进度窗口
|
||||||
}
|
}
|
||||||
|
|
||||||
void Dialog_Scan::on_scanFinish()
|
void Dialog_Scan::on_scanFinish()
|
||||||
|
@ -659,3 +675,9 @@ void Dialog_Scan::on_comboBox_currentIndexChanged(const QString &arg1)
|
||||||
m_devName = arg1;
|
m_devName = arg1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Dialog_Scan::on_pushButtonScan_clicked()
|
||||||
|
{
|
||||||
|
assert(!m_scanning);
|
||||||
|
StartScan(0);
|
||||||
|
}
|
||||||
|
|
|
@ -25,6 +25,7 @@ public:
|
||||||
~Dialog_Scan();
|
~Dialog_Scan();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
void StartScan(unsigned int buttonId);
|
||||||
void StopScan();
|
void StopScan();
|
||||||
void SaveImage(HGImage image);
|
void SaveImage(HGImage image);
|
||||||
static int sane_ex_callback(SANE_Handle hdev, int code, void* data, unsigned int* len, void* param);
|
static int sane_ex_callback(SANE_Handle hdev, int code, void* data, unsigned int* len, void* param);
|
||||||
|
@ -37,7 +38,7 @@ protected:
|
||||||
signals:
|
signals:
|
||||||
void deviceArrive(QString devName);
|
void deviceArrive(QString devName);
|
||||||
void deviceRemove(QString devName);
|
void deviceRemove(QString devName);
|
||||||
void keyPress(unsigned int buttonType);
|
void keyPress(unsigned int buttonId);
|
||||||
void scanWorking();
|
void scanWorking();
|
||||||
void scanInfo(QString info, bool error);
|
void scanInfo(QString info, bool error);
|
||||||
void scanImage(unsigned int count);
|
void scanImage(unsigned int count);
|
||||||
|
@ -46,7 +47,7 @@ signals:
|
||||||
private slots:
|
private slots:
|
||||||
void on_deviceArrive(QString devName);
|
void on_deviceArrive(QString devName);
|
||||||
void on_deviceRemove(QString devName);
|
void on_deviceRemove(QString devName);
|
||||||
void on_keyPress(unsigned int buttonType);
|
void on_keyPress(unsigned int buttonId);
|
||||||
void on_scanWorking();
|
void on_scanWorking();
|
||||||
void on_scanInfo(QString info, bool error);
|
void on_scanInfo(QString info, bool error);
|
||||||
void on_scanImage(unsigned int count);
|
void on_scanImage(unsigned int count);
|
||||||
|
@ -54,6 +55,8 @@ private slots:
|
||||||
|
|
||||||
void on_comboBox_currentIndexChanged(const QString &arg1);
|
void on_comboBox_currentIndexChanged(const QString &arg1);
|
||||||
|
|
||||||
|
void on_pushButtonScan_clicked();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Ui::Dialog_Scan *ui;
|
Ui::Dialog_Scan *ui;
|
||||||
class MainWindow *m_mainWnd;
|
class MainWindow *m_mainWnd;
|
||||||
|
|
|
@ -74,6 +74,62 @@
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="verticalSpacer_3">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>40</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||||
|
<item>
|
||||||
|
<spacer name="horizontalSpacer_3">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>40</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="pushButtonScan">
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>81</width>
|
||||||
|
<height>31</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Scan</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="horizontalSpacer_4">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>40</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<spacer name="verticalSpacer_2">
|
<spacer name="verticalSpacer_2">
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
|
|
|
@ -62,8 +62,8 @@ MainWindow::MainWindow(QWidget *parent)
|
||||||
ui->tableWidget->item(index, 0)->setTextAlignment(Qt::AlignCenter);
|
ui->tableWidget->item(index, 0)->setTextAlignment(Qt::AlignCenter);
|
||||||
ui->tableWidget->item(index, 0)->setFlags(ui->tableWidget->item(index, 0)->flags() & ~Qt::ItemIsEditable);
|
ui->tableWidget->item(index, 0)->setFlags(ui->tableWidget->item(index, 0)->flags() & ~Qt::ItemIsEditable);
|
||||||
|
|
||||||
const char *btnTypeStr[] = {NULL, "Button 1", "Button 2", "Button 3"};
|
const char *btnTypeStr[] = {"Manual", "Button 1", "Button 2", "Button 3"};
|
||||||
ui->tableWidget->setItem(index, 1, new QTableWidgetItem(btnTypeStr[m_vScanParams[index].buttonType]));
|
ui->tableWidget->setItem(index, 1, new QTableWidgetItem(btnTypeStr[m_vScanParams[index].buttonId]));
|
||||||
ui->tableWidget->item(index, 1)->setTextAlignment(Qt::AlignCenter);
|
ui->tableWidget->item(index, 1)->setTextAlignment(Qt::AlignCenter);
|
||||||
ui->tableWidget->item(index, 1)->setFlags(ui->tableWidget->item(index, 1)->flags() & ~Qt::ItemIsEditable);
|
ui->tableWidget->item(index, 1)->setFlags(ui->tableWidget->item(index, 1)->flags() & ~Qt::ItemIsEditable);
|
||||||
|
|
||||||
|
@ -85,11 +85,11 @@ MainWindow::~MainWindow()
|
||||||
delete ui;
|
delete ui;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MainWindow::GetScanParam(const std::string &deviceType, ButtonType buttonType, ScanParam &scanParam)
|
bool MainWindow::GetScanParam(const std::string &deviceType, unsigned int buttonId, ScanParam &scanParam)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < (int)m_vScanParams.size(); ++i)
|
for (int i = 0; i < (int)m_vScanParams.size(); ++i)
|
||||||
{
|
{
|
||||||
if (deviceType == m_vScanParams[i].deviceType && buttonType == m_vScanParams[i].buttonType)
|
if (deviceType == m_vScanParams[i].deviceType && buttonId == m_vScanParams[i].buttonId)
|
||||||
{
|
{
|
||||||
scanParam = m_vScanParams[i];
|
scanParam = m_vScanParams[i];
|
||||||
return true;
|
return true;
|
||||||
|
@ -99,11 +99,11 @@ bool MainWindow::GetScanParam(const std::string &deviceType, ButtonType buttonTy
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MainWindow::FindScanParam(const std::string &deviceType, ButtonType buttonType, int ignoreIndex)
|
bool MainWindow::FindScanParam(const std::string &deviceType, unsigned int buttonId, int ignoreIndex)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < (int)m_vScanParams.size(); ++i)
|
for (int i = 0; i < (int)m_vScanParams.size(); ++i)
|
||||||
{
|
{
|
||||||
if (deviceType == m_vScanParams[i].deviceType && buttonType == m_vScanParams[i].buttonType)
|
if (deviceType == m_vScanParams[i].deviceType && buttonId == m_vScanParams[i].buttonId)
|
||||||
{
|
{
|
||||||
if (-1 == ignoreIndex) // 表示均不忽略
|
if (-1 == ignoreIndex) // 表示均不忽略
|
||||||
{
|
{
|
||||||
|
@ -189,14 +189,7 @@ void MainWindow::on_pushButtonAdd_clicked()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO 获取m_scanDlg->m_devHandle是否支持按键扫描
|
std::string deviceType = m_scanDlg->m_devName.toStdString();
|
||||||
if (0)
|
|
||||||
{
|
|
||||||
QMessageBox::information(this, tr("Tips"), tr("The device does not support key scanning"));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string deviceType = m_scanDlg->m_devName.toStdString(); // TODO 获取m_scanDlg->m_devHandle设备类型
|
|
||||||
char v[256] = {0};
|
char v[256] = {0};
|
||||||
SANE_Status status = sane_control_option(m_scanDlg->m_devHandle, (SANE_Int)0x886D, SANE_ACTION_GET_VALUE, v, NULL);
|
SANE_Status status = sane_control_option(m_scanDlg->m_devHandle, (SANE_Int)0x886D, SANE_ACTION_GET_VALUE, v, NULL);
|
||||||
if (SANE_STATUS_GOOD == status)
|
if (SANE_STATUS_GOOD == status)
|
||||||
|
@ -220,8 +213,8 @@ void MainWindow::on_pushButtonAdd_clicked()
|
||||||
ui->tableWidget->item(index, 0)->setTextAlignment(Qt::AlignCenter);
|
ui->tableWidget->item(index, 0)->setTextAlignment(Qt::AlignCenter);
|
||||||
ui->tableWidget->item(index, 0)->setFlags(ui->tableWidget->item(index, 0)->flags() & ~Qt::ItemIsEditable);
|
ui->tableWidget->item(index, 0)->setFlags(ui->tableWidget->item(index, 0)->flags() & ~Qt::ItemIsEditable);
|
||||||
|
|
||||||
const char *btnTypeStr[] = {NULL, "Button 1", "Button 2", "Button 3"};
|
const char *btnTypeStr[] = {"Manual", "Button 1", "Button 2", "Button 3"};
|
||||||
ui->tableWidget->setItem(index, 1, new QTableWidgetItem(btnTypeStr[m_vScanParams[index].buttonType]));
|
ui->tableWidget->setItem(index, 1, new QTableWidgetItem(btnTypeStr[m_vScanParams[index].buttonId]));
|
||||||
ui->tableWidget->item(index, 1)->setTextAlignment(Qt::AlignCenter);
|
ui->tableWidget->item(index, 1)->setTextAlignment(Qt::AlignCenter);
|
||||||
ui->tableWidget->item(index, 1)->setFlags(ui->tableWidget->item(index, 1)->flags() & ~Qt::ItemIsEditable);
|
ui->tableWidget->item(index, 1)->setFlags(ui->tableWidget->item(index, 1)->flags() & ~Qt::ItemIsEditable);
|
||||||
|
|
||||||
|
@ -252,7 +245,7 @@ void MainWindow::on_pushButtonModify_clicked()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string deviceType = m_scanDlg->m_devName.toStdString(); // TODO 获取m_scanDlg->m_devHandle设备类型
|
std::string deviceType = m_scanDlg->m_devName.toStdString();
|
||||||
char v[256] = {0};
|
char v[256] = {0};
|
||||||
SANE_Status status = sane_control_option(m_scanDlg->m_devHandle, (SANE_Int)0x886D, SANE_ACTION_GET_VALUE, v, NULL);
|
SANE_Status status = sane_control_option(m_scanDlg->m_devHandle, (SANE_Int)0x886D, SANE_ACTION_GET_VALUE, v, NULL);
|
||||||
if (SANE_STATUS_GOOD == status)
|
if (SANE_STATUS_GOOD == status)
|
||||||
|
@ -275,8 +268,8 @@ void MainWindow::on_pushButtonModify_clicked()
|
||||||
|
|
||||||
ui->tableWidget->item(index, 0)->setText(QString::fromStdString(m_vScanParams[index].deviceType));
|
ui->tableWidget->item(index, 0)->setText(QString::fromStdString(m_vScanParams[index].deviceType));
|
||||||
|
|
||||||
const char *btnTypeStr[] = {NULL, "Button 1", "Button 2", "Button 3"};
|
const char *btnTypeStr[] = {"Manual", "Button 1", "Button 2", "Button 3"};
|
||||||
ui->tableWidget->item(index, 1)->setText(QString::fromStdString(btnTypeStr[m_vScanParams[index].buttonType]));
|
ui->tableWidget->item(index, 1)->setText(QString::fromStdString(btnTypeStr[m_vScanParams[index].buttonId]));
|
||||||
|
|
||||||
ui->tableWidget->item(index, 2)->setText(GetDesc(m_vScanParams[index].deviceConfigs));
|
ui->tableWidget->item(index, 2)->setText(GetDesc(m_vScanParams[index].deviceConfigs));
|
||||||
ui->tableWidget->item(index, 3)->setText(GetDesc(m_vScanParams[index].saveParam));
|
ui->tableWidget->item(index, 3)->setText(GetDesc(m_vScanParams[index].saveParam));
|
||||||
|
|
|
@ -20,8 +20,8 @@ public:
|
||||||
MainWindow(QWidget *parent = nullptr);
|
MainWindow(QWidget *parent = nullptr);
|
||||||
~MainWindow();
|
~MainWindow();
|
||||||
|
|
||||||
bool GetScanParam(const std::string &deviceType, ButtonType buttonType, ScanParam &scanParam);
|
bool GetScanParam(const std::string &deviceType, unsigned int buttonId, ScanParam &scanParam);
|
||||||
bool FindScanParam(const std::string &deviceType, ButtonType buttonType, int ignoreIndex);
|
bool FindScanParam(const std::string &deviceType, unsigned int buttonId, int ignoreIndex);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QString GetDesc(const std::vector<DeviceConfig> &deviceConfigs);
|
QString GetDesc(const std::vector<DeviceConfig> &deviceConfigs);
|
||||||
|
|
Loading…
Reference in New Issue