去掉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() class DeviceUser* DeviceUserMgr::OpenDeviceUser()
{ {
HGSaneSource source = nullptr; HGSaneSource source = nullptr;
HGSane_OpenSelectedSource(m_saneMgr, m_wnd, &source); HGSane_OpenSource(m_saneMgr, 0, &source);
if (nullptr == source) if (nullptr == source)
return nullptr; return nullptr;

View File

@ -43,6 +43,8 @@ Dialog_Device_Select::Dialog_Device_Select(const SANEAPI* saneApi, const char **
{ {
ui->listWidget->setCurrentRow(0); ui->listWidget->setCurrentRow(0);
} }
processSameDeviceType();
} }
Dialog_Device_Select::~Dialog_Device_Select() Dialog_Device_Select::~Dialog_Device_Select()
@ -60,6 +62,58 @@ std::string Dialog_Device_Select::GetDevName()
return m_devName; 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() void Dialog_Device_Select::on_pushButton_OK_clicked()
{ {
int index = ui->listWidget->currentRow(); int index = ui->listWidget->currentRow();
@ -85,3 +139,8 @@ void Dialog_Device_Select::on_pushButton_Cancel_clicked()
{ {
reject(); reject();
} }
void Dialog_Device_Select::on_listWidget_itemDoubleClicked(QListWidgetItem *item)
{
on_pushButton_OK_clicked();
}

View File

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

View File

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