HGSaneUser增加扫描事件
This commit is contained in:
parent
3ce2281139
commit
8350e95a20
|
@ -27,5 +27,5 @@ HGSane_GetDeviceLogPath
|
|||
HGSane_ClearDeviceLog
|
||||
HGSane_StartDevice
|
||||
HGSane_StopDevice
|
||||
HGSane_StartDeviceWithUI
|
||||
HGSane_StartDevice
|
||||
HGSane_StartDeviceWithSingleScan
|
||||
|
|
|
@ -53,8 +53,8 @@ win32 {
|
|||
}
|
||||
|
||||
# DEF_FILE = HGSaneUser.def
|
||||
LIBS += -lgdi32 -lgdiplus -ldbghelp
|
||||
LIBS += -L$$PWD/../../build/$${MY_OS}/$${OEM_NAME}/$${MY_ARCH}/$${MY_CONFIGURE} -l$${OEM_PREFIX}Base -l$${OEM_PREFIX}SaneUI
|
||||
# LIBS += -lgdi32 -lgdiplus -ldbghelp
|
||||
# LIBS += -L$$PWD/../../build/$${MY_OS}/$${OEM_NAME}/$${MY_ARCH}/$${MY_CONFIGURE} -l$${OEM_PREFIX}Base -l$${OEM_PREFIX}SaneUI
|
||||
}
|
||||
|
||||
unix {
|
||||
|
|
|
@ -301,7 +301,8 @@ HGResult HGAPI HGSane_ClearDeviceLog(HGSaneDevice dev)
|
|||
return saneDeviceImpl->ClearDeviceLog();
|
||||
}
|
||||
|
||||
HGResult HGAPI HGSane_StartDeviceWithUI(HGSaneDevice dev, HGWindow parent, HGSane_DeviceImageFunc imageFunc, HGPointer imageParam)
|
||||
HGResult HGAPI HGSane_StartDevice(HGSaneDevice dev, HGWindow parent, HGDSEventFunc eventFunc, HGPointer eventParam,
|
||||
HGDSImageFunc imageFunc, HGPointer imageParam)
|
||||
{
|
||||
if (NULL == dev)
|
||||
{
|
||||
|
@ -309,10 +310,11 @@ HGResult HGAPI HGSane_StartDeviceWithUI(HGSaneDevice dev, HGWindow parent, HGSan
|
|||
}
|
||||
|
||||
HGSaneDeviceImpl* saneDeviceImpl = (HGSaneDeviceImpl*)dev;
|
||||
return saneDeviceImpl->StartWithUI(parent, imageFunc, imageParam);
|
||||
return saneDeviceImpl->Start(parent, eventFunc, eventParam, imageFunc, imageParam);
|
||||
}
|
||||
|
||||
HGResult HGAPI HGSane_StartDeviceWithSingleScan(HGSaneDevice dev, HGWindow parent, HGSane_DeviceImageFunc imageFunc, HGPointer imageParam)
|
||||
HGResult HGAPI HGSane_StartDeviceWithSingleScan(HGSaneDevice dev, HGWindow parent, HGDSEventFunc eventFunc, HGPointer eventParam,
|
||||
HGDSImageFunc imageFunc, HGPointer imageParam)
|
||||
{
|
||||
if (NULL == dev)
|
||||
{
|
||||
|
@ -320,5 +322,5 @@ HGResult HGAPI HGSane_StartDeviceWithSingleScan(HGSaneDevice dev, HGWindow paren
|
|||
}
|
||||
|
||||
HGSaneDeviceImpl* saneDeviceImpl = (HGSaneDeviceImpl*)dev;
|
||||
return saneDeviceImpl->StartWithSingleScan(parent, imageFunc, imageParam);
|
||||
return saneDeviceImpl->StartWithSingleScan(parent, eventFunc, eventParam, imageFunc, imageParam);
|
||||
}
|
||||
|
|
|
@ -90,8 +90,10 @@ HGEXPORT HGResult HGAPI HGSane_GetDeviceLog(HGSaneDevice dev, const HGChar *file
|
|||
|
||||
HGEXPORT HGResult HGAPI HGSane_ClearDeviceLog(HGSaneDevice dev);
|
||||
|
||||
HGEXPORT HGResult HGAPI HGSane_StartDeviceWithUI(HGSaneDevice dev, HGWindow parent, HGSane_DeviceImageFunc imageFunc, HGPointer imageParam);
|
||||
HGEXPORT HGResult HGAPI HGSane_StartDevice(HGSaneDevice dev, HGWindow parent, HGDSEventFunc eventFunc, HGPointer eventParam,
|
||||
HGDSImageFunc imageFunc, HGPointer imageParam);
|
||||
|
||||
HGEXPORT HGResult HGAPI HGSane_StartDeviceWithSingleScan(HGSaneDevice dev, HGWindow parent, HGSane_DeviceImageFunc imageFunc, HGPointer imageParam);
|
||||
HGEXPORT HGResult HGAPI HGSane_StartDeviceWithSingleScan(HGSaneDevice dev, HGWindow parent, HGDSEventFunc eventFunc, HGPointer eventParam,
|
||||
HGDSImageFunc imageFunc, HGPointer imageParam);
|
||||
|
||||
#endif /* __HGSANE_H__ */
|
||||
|
|
|
@ -724,7 +724,8 @@ HGResult HGSaneDeviceImpl::ShowSettingDlg(HGWindow parent)
|
|||
return HGBASE_ERR_OK;
|
||||
}
|
||||
|
||||
HGResult HGSaneDeviceImpl::StartWithUI(HGWindow parent, HGSane_DeviceImageFunc imageFunc, HGPointer imageParam)
|
||||
HGResult HGSaneDeviceImpl::Start(HGWindow parent, HGDSEventFunc eventFunc, HGPointer eventParam,
|
||||
HGDSImageFunc imageFunc, HGPointer imageParam)
|
||||
{
|
||||
HGResult ret = GetValueInt32(0x8818, &m_dpi);
|
||||
if (HGBASE_ERR_OK != ret)
|
||||
|
@ -732,10 +733,13 @@ HGResult HGSaneDeviceImpl::StartWithUI(HGWindow parent, HGSane_DeviceImageFunc i
|
|||
return ret;
|
||||
}
|
||||
|
||||
m_eventFunc = eventFunc;
|
||||
m_eventParam = eventParam;
|
||||
m_imageFunc = imageFunc;
|
||||
m_imageParam = imageParam;
|
||||
|
||||
if (-2 == show_scan_ui(&m_sourceImpl->m_saneApi, m_devHandle, m_devName.c_str(), parent, ShowScanImageCallback, this))
|
||||
if (-2 == show_scan_ui(&m_sourceImpl->m_saneApi, m_devHandle, m_devName.c_str(), parent,
|
||||
show_scan_ui_event_func, this, show_scan_ui_image_func, this))
|
||||
{
|
||||
m_dpi = 0;
|
||||
return HGBASE_ERR_NOTSUPPORT;
|
||||
|
@ -744,7 +748,8 @@ HGResult HGSaneDeviceImpl::StartWithUI(HGWindow parent, HGSane_DeviceImageFunc i
|
|||
return HGBASE_ERR_OK;
|
||||
}
|
||||
|
||||
HGResult HGSaneDeviceImpl::StartWithSingleScan(HGWindow parent, HGSane_DeviceImageFunc imageFunc, HGPointer imageParam)
|
||||
HGResult HGSaneDeviceImpl::StartWithSingleScan(HGWindow parent, HGDSEventFunc eventFunc, HGPointer eventParam,
|
||||
HGDSImageFunc imageFunc, HGPointer imageParam)
|
||||
{
|
||||
HGChar scanMode[256] = {0};
|
||||
HGResult ret = GetValueStr256(0x882E, scanMode, 256);
|
||||
|
@ -771,10 +776,13 @@ HGResult HGSaneDeviceImpl::StartWithSingleScan(HGWindow parent, HGSane_DeviceIma
|
|||
SetValueStr256(0x882E, newScanMode);
|
||||
SetValueInt32(0x882F, 1);
|
||||
|
||||
m_eventFunc = eventFunc;
|
||||
m_eventParam = eventParam;
|
||||
m_imageFunc = imageFunc;
|
||||
m_imageParam = imageParam;
|
||||
|
||||
if (-2 == show_scan_ui(&m_sourceImpl->m_saneApi, m_devHandle, m_devName.c_str(), parent, ShowScanImageCallback, this))
|
||||
if (-2 == show_scan_ui(&m_sourceImpl->m_saneApi, m_devHandle, m_devName.c_str(), parent,
|
||||
show_scan_ui_event_func, this, show_scan_ui_image_func, this))
|
||||
{
|
||||
SetValueStr256(0x882E, scanMode);
|
||||
SetValueInt32(0x882F, scanCount);
|
||||
|
@ -842,34 +850,21 @@ HGResult HGSaneDeviceImpl::GetValueStr256(HGUInt optionId, HGChar *value, HGUInt
|
|||
return HGBASE_ERR_OK;
|
||||
}
|
||||
|
||||
void HGSaneDeviceImpl::ShowScanImageCallback(const SANE_Parameters* imageFormat, const SANE_Byte* imageData, void* callbackParam)
|
||||
void HGSaneDeviceImpl::show_scan_ui_event_func(HGUInt event, HGPointer param)
|
||||
{
|
||||
HGSaneDeviceImpl* p = (HGSaneDeviceImpl*)callbackParam;
|
||||
|
||||
if (NULL != p->m_imageFunc)
|
||||
{
|
||||
HGUInt imgType = 0;
|
||||
if (imageFormat->format == SANE_FRAME_GRAY)
|
||||
{
|
||||
if (1 == imageFormat->depth)
|
||||
imgType = HGBASE_IMGTYPE_BINARY;
|
||||
else if (8 == imageFormat->depth)
|
||||
imgType = HGBASE_IMGTYPE_GRAY;
|
||||
}
|
||||
else if (imageFormat->format == SANE_FRAME_RGB)
|
||||
{
|
||||
imgType = HGBASE_IMGTYPE_RGB;
|
||||
}
|
||||
|
||||
HGImageInfo imgInfo = { (HGUInt)imageFormat->pixels_per_line, (HGUInt)imageFormat->lines,
|
||||
imgType, (HGUInt)imageFormat->bytes_per_line, HGBASE_IMGORIGIN_TOP };
|
||||
HGImage img = NULL;
|
||||
HGBase_CreateImageWithData((HGByte*)imageData, &imgInfo, &img);
|
||||
if (NULL != img)
|
||||
{
|
||||
HGBase_SetImageDpi(img, p->m_dpi, p->m_dpi);
|
||||
p->m_imageFunc((HGSaneDevice)p, img, p->m_imageParam);
|
||||
HGBase_DestroyImage(img);
|
||||
}
|
||||
}
|
||||
HGSaneDeviceImpl* p = (HGSaneDeviceImpl*)param;
|
||||
if (NULL != p->m_eventFunc)
|
||||
{
|
||||
p->m_eventFunc((HGSaneDevice)p, event, p->m_eventParam);
|
||||
}
|
||||
}
|
||||
|
||||
void HGSaneDeviceImpl::show_scan_ui_image_func(HGImage image, HGPointer param)
|
||||
{
|
||||
HGSaneDeviceImpl* p = (HGSaneDeviceImpl*)param;
|
||||
if (NULL != p->m_imageFunc)
|
||||
{
|
||||
HGBase_SetImageDpi(image, p->m_dpi, p->m_dpi);
|
||||
p->m_imageFunc((HGSaneDevice)p, image, p->m_imageParam);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -82,15 +82,18 @@ public:
|
|||
HGResult ClearDriverLog();
|
||||
HGResult GetDeviceLog(const HGChar *fileName);
|
||||
HGResult ClearDeviceLog();
|
||||
HGResult StartWithUI(HGWindow parent, HGSane_DeviceImageFunc imageFunc, HGPointer imageParam);
|
||||
HGResult StartWithSingleScan(HGWindow parent, HGSane_DeviceImageFunc imageFunc, HGPointer imageParam);
|
||||
HGResult Start(HGWindow parent, HGDSEventFunc eventFunc, HGPointer eventParam,
|
||||
HGDSImageFunc imageFunc, HGPointer imageParam);
|
||||
HGResult StartWithSingleScan(HGWindow parent, HGDSEventFunc eventFunc, HGPointer eventParam,
|
||||
HGDSImageFunc imageFunc, HGPointer imageParam);
|
||||
|
||||
private:
|
||||
HGResult SetValueInt32(HGUInt optionId, HGInt value);
|
||||
HGResult GetValueInt32(HGUInt optionId, HGInt *value);
|
||||
HGResult SetValueStr256(HGUInt optionId, const HGChar *value);
|
||||
HGResult GetValueStr256(HGUInt optionId, HGChar *value, HGUInt maxLen);
|
||||
static void ShowScanImageCallback(const SANE_Parameters* imageFormat, const SANE_Byte* imageData, void* callbackParam);
|
||||
static void show_scan_ui_event_func(HGUInt event, HGPointer param);
|
||||
static void show_scan_ui_image_func(HGImage image, HGPointer param);
|
||||
|
||||
private:
|
||||
HGSaneSourceImpl* m_sourceImpl;
|
||||
|
|
|
@ -154,7 +154,8 @@ int show_setting_ui(const SANEAPI* saneApi, SANE_Handle handle, const char *devN
|
|||
}
|
||||
|
||||
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_event_callback eventCallback, void *eventParam,
|
||||
show_scan_ui_image_callback imageCallback, void *imageParam)
|
||||
{
|
||||
if (nullptr == saneApi || nullptr == handle)
|
||||
return -1;
|
||||
|
|
|
@ -3,9 +3,14 @@
|
|||
|
||||
#include "../base/HGDef.h"
|
||||
#include "../base/HGDll.h"
|
||||
#include "../base/HGImage.h"
|
||||
#include "sane/sane_ex.h"
|
||||
|
||||
typedef void (*show_scan_ui_image_callback)(const SANE_Parameters *imageFormat, const SANE_Byte *imageData, void * callbackParam);
|
||||
#define SHOW_SCAN_UI_EVENT_WORKING 1L
|
||||
#define SHOW_SCAN_UI_EVENT_SCANFINISHED 2L
|
||||
|
||||
typedef void (*show_scan_ui_event_callback)(HGUInt event, void *eventParam);
|
||||
typedef void (*show_scan_ui_image_callback)(HGImage image, void *imageParam);
|
||||
|
||||
HGEXPORT int show_srclist_ui(const char **manuNames, const char **sanePaths, HGWindow parent, HGDll *dll,
|
||||
SANEAPI* saneApi, char *manuName, unsigned int maxLen);
|
||||
|
@ -13,7 +18,8 @@ HGEXPORT int show_devlist_ui(const SANEAPI* saneApi, const char **devNames, HGWi
|
|||
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_scan_ui(const SANEAPI* saneApi, SANE_Handle handle, const char *devName, HGWindow parent,
|
||||
show_scan_ui_image_callback callback, void *callbackParam);
|
||||
show_scan_ui_event_callback eventCallback, void *eventParam,
|
||||
show_scan_ui_image_callback imageCallback, void *imageParam);
|
||||
|
||||
HGEXPORT int show_msgbox_info(const char *title, const char *text, HGWindow parent);
|
||||
HGEXPORT int show_msgbox_warning(const char *title, const char *text, HGWindow parent);
|
||||
|
|
|
@ -5,7 +5,8 @@
|
|||
#include <QCloseEvent>
|
||||
|
||||
Dialog_Device_Scan::Dialog_Device_Scan(const SANEAPI* saneApi, SANE_Handle dev, const char *devName,
|
||||
show_scan_ui_image_callback callback, void *callbackParam, QWidget *parent) :
|
||||
show_scan_ui_event_callback eventCallback, void *eventParam,
|
||||
show_scan_ui_image_callback imageCallback, void *imageParam, QWidget *parent) :
|
||||
QDialog(parent),
|
||||
ui(new Ui::Dialog_Device_Scan)
|
||||
{
|
||||
|
@ -13,8 +14,10 @@ Dialog_Device_Scan::Dialog_Device_Scan(const SANEAPI* saneApi, SANE_Handle dev,
|
|||
|
||||
memcpy(&m_saneAPI, saneApi, sizeof(SANEAPI));
|
||||
m_saneDev = dev;
|
||||
m_callback = callback;
|
||||
m_callbackParam = callbackParam;
|
||||
m_eventCallback = eventCallback;
|
||||
m_eventParam = eventParam;
|
||||
m_imageCallback = imageCallback;
|
||||
m_imageParam = imageParam;
|
||||
m_buffer = NULL;
|
||||
m_bufferSize = 0;
|
||||
m_stopThread = HGFALSE;
|
||||
|
@ -23,10 +26,6 @@ Dialog_Device_Scan::Dialog_Device_Scan(const SANEAPI* saneApi, SANE_Handle dev,
|
|||
setWindowTitle(QString::fromStdString(devName));
|
||||
setWindowFlags(Qt::Dialog | Qt::WindowCloseButtonHint);
|
||||
|
||||
qRegisterMetaType<SANE_Parameters>("SANE_Parameters");
|
||||
qRegisterMetaType<SANE_Byte *>("SANE_Byte *");
|
||||
connect(this, &Dialog_Device_Scan::eventFunc, this, &Dialog_Device_Scan::on_eventFunc, Qt::QueuedConnection);
|
||||
|
||||
ui->pushButton_Continue->setEnabled(true);
|
||||
ui->pushButton_Cancel->setEnabled(false);
|
||||
ui->pushButton_Complete->setEnabled(true);
|
||||
|
@ -116,6 +115,11 @@ void HGAPI Dialog_Device_Scan::ThreadFunc(HGThread thread, HGPointer param)
|
|||
return;
|
||||
}
|
||||
|
||||
if (nullptr != p->m_eventCallback)
|
||||
{
|
||||
p->m_eventCallback(SHOW_SCAN_UI_EVENT_WORKING, p->m_eventParam);
|
||||
}
|
||||
|
||||
while (!p->m_stopThread)
|
||||
{
|
||||
SANE_Parameters params;
|
||||
|
@ -164,7 +168,35 @@ void HGAPI Dialog_Device_Scan::ThreadFunc(HGThread thread, HGPointer param)
|
|||
break;
|
||||
}
|
||||
|
||||
if (nullptr != p->m_callback)
|
||||
p->m_callback(¶ms, p->m_buffer, p->m_callbackParam);
|
||||
if (nullptr != p->m_imageCallback)
|
||||
{
|
||||
HGUInt imgType = 0;
|
||||
if (params.format == SANE_FRAME_GRAY)
|
||||
{
|
||||
if (1 == params.depth)
|
||||
imgType = HGBASE_IMGTYPE_BINARY;
|
||||
else if (8 == params.depth)
|
||||
imgType = HGBASE_IMGTYPE_GRAY;
|
||||
}
|
||||
else if (params.format == SANE_FRAME_RGB)
|
||||
{
|
||||
imgType = HGBASE_IMGTYPE_RGB;
|
||||
}
|
||||
|
||||
HGImageInfo imgInfo = { (HGUInt)params.pixels_per_line, (HGUInt)params.lines,
|
||||
imgType, (HGUInt)params.bytes_per_line, HGBASE_IMGORIGIN_TOP };
|
||||
HGImage img = NULL;
|
||||
HGBase_CreateImageWithData((HGByte*)p->m_buffer, &imgInfo, &img);
|
||||
if (NULL != img)
|
||||
{
|
||||
p->m_imageCallback(img, p->m_imageParam);
|
||||
HGBase_DestroyImage(img);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (nullptr != p->m_eventCallback)
|
||||
{
|
||||
p->m_eventCallback(SHOW_SCAN_UI_EVENT_SCANFINISHED, p->m_eventParam);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -16,7 +16,8 @@ class Dialog_Device_Scan : public QDialog
|
|||
|
||||
public:
|
||||
Dialog_Device_Scan(const SANEAPI* saneApi, SANE_Handle dev, const char *devName,
|
||||
show_scan_ui_image_callback callback, void *callbackParam, QWidget *parent = nullptr);
|
||||
show_scan_ui_event_callback eventCallback, void *eventParam,
|
||||
show_scan_ui_image_callback imageCallback, void *imageParam, QWidget *parent = nullptr);
|
||||
~Dialog_Device_Scan();
|
||||
|
||||
signals:
|
||||
|
@ -38,8 +39,10 @@ private:
|
|||
Ui::Dialog_Device_Scan *ui;
|
||||
SANEAPI m_saneAPI;
|
||||
SANE_Handle m_saneDev;
|
||||
show_scan_ui_image_callback m_callback;
|
||||
void *m_callbackParam;
|
||||
show_scan_ui_event_callback m_eventCallback;
|
||||
void *m_eventParam;
|
||||
show_scan_ui_image_callback m_imageCallback;
|
||||
void *m_imageParam;
|
||||
HGByte* m_buffer;
|
||||
HGInt m_bufferSize;
|
||||
volatile HGBool m_stopThread;
|
||||
|
|
Loading…
Reference in New Issue