HGSaneUI:show_devlist_ui函数接口修改,增加传入参数设备名列表

This commit is contained in:
luoliangyi 2023-04-12 10:30:14 +08:00
parent a8770f5af7
commit 0af83ed048
8 changed files with 42 additions and 27 deletions

View File

@ -63,7 +63,12 @@ void HGAPI DeviceUser::DSCloseReqFunc(HGTwainDS ds, HGPointer param)
void HGAPI DeviceUser::DSImageFunc(HGTwainDS ds, HGImage image, HGPointer param) void HGAPI DeviceUser::DSImageFunc(HGTwainDS ds, HGImage image, HGPointer param)
{ {
DeviceUser* p = (DeviceUser*)param; DeviceUser* p = (DeviceUser*)param;
emit p->newImage(image); HGImage image2 = nullptr;
HGBase_CloneImage(image, 0, 0, &image2);
if (nullptr != image2)
{
emit p->newImage(image2);
}
} }
#else #else
@ -156,7 +161,12 @@ HGResult DeviceUser::StartScan()
void HGAPI DeviceUser::DeviceImageFunc(HGSaneDevice dev, HGImage image, HGPointer param) void HGAPI DeviceUser::DeviceImageFunc(HGSaneDevice dev, HGImage image, HGPointer param)
{ {
DeviceUser* p = (DeviceUser*)param; DeviceUser* p = (DeviceUser*)param;
emit p->newImage(image); HGImage image2 = nullptr;
HGBase_CloneImage(image, 0, 0, &image2);
if (nullptr != image2)
{
emit p->newImage(image2);
}
} }
#endif #endif

View File

@ -34,6 +34,7 @@ void MainWindow::on_newImage(void *image)
char fileName[256]; char fileName[256];
sprintf(fileName, "D:\\test_%d.jpg", i++); sprintf(fileName, "D:\\test_%d.jpg", i++);
HGImgFmt_SaveImage((HGImage)image, 0, NULL, fileName); HGImgFmt_SaveImage((HGImage)image, 0, NULL, fileName);
HGBase_DestroyImage((HGImage)image);
} }
void MainWindow::on_pushButton_selectDev_clicked() void MainWindow::on_pushButton_selectDev_clicked()

View File

@ -62,7 +62,8 @@ int show_srclist_ui(const char **manuNames, const char **sanePaths, HGWindow par
return 0; return 0;
} }
int show_devlist_ui(const SANEAPI* saneApi, HGWindow parent, SANE_Handle *handle, char *devName, unsigned int maxLen) int show_devlist_ui(const SANEAPI* saneApi, const char **devNames, HGWindow parent,
SANE_Handle *handle, char *devName, unsigned int maxLen)
{ {
if (nullptr == saneApi || nullptr == handle) if (nullptr == saneApi || nullptr == handle)
return -1; return -1;
@ -87,7 +88,7 @@ int show_devlist_ui(const SANEAPI* saneApi, HGWindow parent, SANE_Handle *handle
QCoreApplication::installTranslator(&translator); QCoreApplication::installTranslator(&translator);
*handle = nullptr; *handle = nullptr;
Dialog_Device_Select dlg(saneApi, qParent); Dialog_Device_Select dlg(saneApi, devNames, qParent);
if (dlg.exec()) if (dlg.exec())
{ {
if (nullptr != devName) if (nullptr != devName)

View File

@ -12,7 +12,8 @@ typedef void (*show_scan_ui_image_callback)(const SANE_Parameters *imageFormat,
HGEXPORT int show_srclist_ui(const char **manuNames, const char **sanePaths, HGWindow parent, HGDll *dll, HGEXPORT int show_srclist_ui(const char **manuNames, const char **sanePaths, HGWindow parent, HGDll *dll,
SANEAPI* saneApi, char *manuName, unsigned int maxLen); SANEAPI* saneApi, char *manuName, unsigned int maxLen);
HGEXPORT int show_devlist_ui(const SANEAPI* saneApi, HGWindow parent, SANE_Handle *handle, char *devName, unsigned int maxLen); HGEXPORT int show_devlist_ui(const SANEAPI* saneApi, const char **devNames, HGWindow parent,
SANE_Handle *handle, char *devName, unsigned int maxLen);
HGEXPORT int show_setting_ui(const SANEAPI* saneApi, SANE_Handle handle, const char *devName, HGWindow parent); HGEXPORT int show_setting_ui(const SANEAPI* saneApi, SANE_Handle handle, const char *devName, HGWindow parent);
HGEXPORT int show_scan_ui(const SANEAPI* saneApi, SANE_Handle handle, const char *devName, HGWindow parent, HGEXPORT int show_scan_ui(const SANEAPI* saneApi, SANE_Handle handle, const char *devName, HGWindow parent,
show_scan_ui_image_callback callback, void *callbackParam); show_scan_ui_image_callback callback, void *callbackParam);

View File

@ -26,7 +26,6 @@ Dialog_Device_Scan::Dialog_Device_Scan(const SANEAPI* saneApi, SANE_Handle dev,
qRegisterMetaType<SANE_Parameters>("SANE_Parameters"); qRegisterMetaType<SANE_Parameters>("SANE_Parameters");
qRegisterMetaType<SANE_Byte *>("SANE_Byte *"); qRegisterMetaType<SANE_Byte *>("SANE_Byte *");
connect(this, &Dialog_Device_Scan::eventFunc, this, &Dialog_Device_Scan::on_eventFunc, Qt::QueuedConnection); connect(this, &Dialog_Device_Scan::eventFunc, this, &Dialog_Device_Scan::on_eventFunc, Qt::QueuedConnection);
connect(this, &Dialog_Device_Scan::newImage, this, &Dialog_Device_Scan::on_newImage, Qt::QueuedConnection);
ui->pushButton_Continue->setEnabled(true); ui->pushButton_Continue->setEnabled(true);
ui->pushButton_Cancel->setEnabled(false); ui->pushButton_Cancel->setEnabled(false);
@ -59,13 +58,6 @@ void Dialog_Device_Scan::on_eventFunc(QString errInfo)
ui->pushButton_Complete->setEnabled(true); ui->pushButton_Complete->setEnabled(true);
} }
void Dialog_Device_Scan::on_newImage(SANE_Parameters format, SANE_Byte *data)
{
if (NULL != m_callback)
m_callback(&format, data, m_callbackParam);
delete [] data;
}
void Dialog_Device_Scan::on_pushButton_Cancel_clicked() void Dialog_Device_Scan::on_pushButton_Cancel_clicked()
{ {
m_saneAPI.sane_cancel_api(m_saneDev); m_saneAPI.sane_cancel_api(m_saneDev);
@ -105,7 +97,7 @@ void Dialog_Device_Scan::on_pushButton_Continue_clicked()
void Dialog_Device_Scan::closeEvent(QCloseEvent *e) void Dialog_Device_Scan::closeEvent(QCloseEvent *e)
{ {
if (NULL != m_thread) if (nullptr != m_thread)
{ {
QMessageBox::warning(this, tr("Warning"), tr("Scanning in progress, closing not allowed")); QMessageBox::warning(this, tr("Warning"), tr("Scanning in progress, closing not allowed"));
e->ignore(); e->ignore();
@ -172,8 +164,7 @@ void HGAPI Dialog_Device_Scan::ThreadFunc(HGThread thread, HGPointer param)
break; break;
} }
SANE_Byte *data = new HGByte [readSize]; if (nullptr != p->m_callback)
memcpy(data, p->m_buffer, readSize); p->m_callback(&params, p->m_buffer, p->m_callbackParam);
emit p->newImage(params, data);
} }
} }

View File

@ -21,11 +21,9 @@ public:
signals: signals:
void eventFunc(QString errInfo); void eventFunc(QString errInfo);
void newImage(SANE_Parameters format, SANE_Byte *data);
private slots: private slots:
void on_eventFunc(QString errInfo); void on_eventFunc(QString errInfo);
void on_newImage(SANE_Parameters format, SANE_Byte *data);
void on_pushButton_Cancel_clicked(); void on_pushButton_Cancel_clicked();
void on_pushButton_Complete_clicked(); void on_pushButton_Complete_clicked();
void on_pushButton_Continue_clicked(); void on_pushButton_Continue_clicked();

View File

@ -2,7 +2,7 @@
#include "ui_dialog_device_select.h" #include "ui_dialog_device_select.h"
#include <QMessageBox> #include <QMessageBox>
Dialog_Device_Select::Dialog_Device_Select(const SANEAPI* saneApi, QWidget *parent) : Dialog_Device_Select::Dialog_Device_Select(const SANEAPI* saneApi, const char **devNames, QWidget *parent) :
QDialog(parent), QDialog(parent),
ui(new Ui::Dialog_Device_Select) ui(new Ui::Dialog_Device_Select)
{ {
@ -15,14 +15,27 @@ Dialog_Device_Select::Dialog_Device_Select(const SANEAPI* saneApi, QWidget *pare
setWindowFlags(Qt::Dialog | Qt::WindowCloseButtonHint); setWindowFlags(Qt::Dialog | Qt::WindowCloseButtonHint);
const SANE_Device** device_list; if (nullptr == devNames)
if (SANE_STATUS_GOOD == saneApi->sane_get_devices_api(&device_list, SANE_TRUE))
{ {
const SANE_Device** p; const SANE_Device** device_list;
for (p = device_list; *p != nullptr; ++p) if (SANE_STATUS_GOOD == saneApi->sane_get_devices_api(&device_list, SANE_TRUE))
{ {
m_vDevName.push_back((*p)->name); const SANE_Device** p;
ui->listWidget->addItem((*p)->name); for (p = device_list; *p != nullptr; ++p)
{
m_vDevName.push_back((*p)->name);
ui->listWidget->addItem((*p)->name);
}
}
}
else
{
const char **p = devNames;
while (*p != nullptr)
{
m_vDevName.push_back(*p);
ui->listWidget->addItem(*p);
++p;
} }
} }

View File

@ -15,7 +15,7 @@ class Dialog_Device_Select : public QDialog
Q_OBJECT Q_OBJECT
public: public:
Dialog_Device_Select(const SANEAPI* saneApi, QWidget *parent = nullptr); Dialog_Device_Select(const SANEAPI* saneApi, const char **devNames, QWidget *parent = nullptr);
~Dialog_Device_Select(); ~Dialog_Device_Select();
SANE_Handle GetDevHandle(); SANE_Handle GetDevHandle();