去掉sane源对话框,sane驱动选择相同型号设备时增加序列号标识

This commit is contained in:
luoliangyi 2023-07-31 16:56:59 +08:00
parent 94ebf55352
commit b2d617ff6d
4 changed files with 68 additions and 3 deletions

View File

@ -164,7 +164,7 @@ DeviceUserMgr::~DeviceUserMgr()
class DeviceUser* DeviceUserMgr::OpenDeviceUser()
{
HGSaneSource source = nullptr;
HGSane_OpenSelectedSource(m_saneMgr, m_wnd, &source);
HGSane_OpenSource(m_saneMgr, 0, &source);
if (nullptr == source)
return nullptr;

View File

@ -43,6 +43,8 @@ Dialog_Device_Select::Dialog_Device_Select(const SANEAPI* saneApi, const char **
{
ui->listWidget->setCurrentRow(0);
}
processSameDeviceType();
}
Dialog_Device_Select::~Dialog_Device_Select()
@ -60,6 +62,58 @@ std::string Dialog_Device_Select::GetDevName()
return m_devName;
}
void Dialog_Device_Select::processSameDeviceType()
{
int len = ui->listWidget->count();
for (int i = 0; i < len - 1; ++i)
{
for (int j = i + 1; j < len; ++j)
{
QString devName = ui->listWidget->item(i)->text();
QString devName2 = ui->listWidget->item(j)->text();
if (devName.contains(" - "))
{
devName.truncate(devName.lastIndexOf(" - "));
if (!devName.contains(" - "))
{
devName = ui->listWidget->item(i)->text();
}
}
if (devName2.contains(" - "))
{
devName2.truncate(devName2.lastIndexOf(" - "));
if (!devName2.contains(" - "))
{
devName2 = ui->listWidget->item(j)->text();
}
}
if (devName == devName2)
{
SANE_Handle dev = nullptr;
SANE_Status ret = m_saneAPI.sane_open_api(ui->listWidget->item(i)->text().toStdString().c_str(), &dev);
if (SANE_STATUS_GOOD == ret && dev != nullptr)
{
char serialNum[32] = {0};
m_saneAPI.sane_control_option_api(dev, SANE_OPT_ID_DEVICE_SERIAL_NO, SANE_ACTION_GET_VALUE, serialNum, NULL);
ui->listWidget->item(i)->setText(ui->listWidget->item(i)->text() + "(" + QString::fromLocal8Bit(serialNum) + ")");
m_saneAPI.sane_close_api(dev);
}
ret = m_saneAPI.sane_open_api(ui->listWidget->item(j)->text().toStdString().c_str(), &dev);
if (SANE_STATUS_GOOD == ret && dev != nullptr)
{
char serialNum[32] = {0};
m_saneAPI.sane_control_option_api(dev, SANE_OPT_ID_DEVICE_SERIAL_NO, SANE_ACTION_GET_VALUE, serialNum, NULL);
ui->listWidget->item(j)->setText(ui->listWidget->item(j)->text() + "(" + QString::fromLocal8Bit(serialNum) + ")");
m_saneAPI.sane_close_api(dev);
}
}
}
}
}
void Dialog_Device_Select::on_pushButton_OK_clicked()
{
int index = ui->listWidget->currentRow();
@ -85,3 +139,8 @@ void Dialog_Device_Select::on_pushButton_Cancel_clicked()
{
reject();
}
void Dialog_Device_Select::on_listWidget_itemDoubleClicked(QListWidgetItem *item)
{
on_pushButton_OK_clicked();
}

View File

@ -5,6 +5,7 @@
#include <QDialog>
#include <string>
#include <vector>
#include <QListWidgetItem>
namespace Ui {
class Dialog_Device_Select;
@ -21,10 +22,15 @@ public:
SANE_Handle GetDevHandle();
std::string GetDevName();
private:
void processSameDeviceType();
private slots:
void on_pushButton_OK_clicked();
void on_pushButton_Cancel_clicked();
void on_listWidget_itemDoubleClicked(QListWidgetItem *item);
private:
Ui::Dialog_Device_Select *ui;

View File

@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>308</width>
<height>184</height>
<width>328</width>
<height>188</height>
</rect>
</property>
<property name="windowTitle">