From 27267513c562476548ad7a5eeb5b1f0ac3b4480e Mon Sep 17 00:00:00 2001 From: yangjiaxuan <171295266@qq.com> Date: Fri, 12 May 2023 14:39:19 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=86saneui=E7=9A=84showTwainSrcui=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E7=A7=BB=E5=88=B0twainui?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build2/qt/HGSaneUI/HGSaneUI.def | 3 +- build2/qt/HGSaneUI/HGSaneUI.pro | 3 -- build2/qt/HGTwainUI/HGTwainUI.def | 4 +- build2/qt/HGTwainUI/HGTwainUI.pro | 24 +++-------- build2/qt/HGTwainUser/HGTwainUser.pro | 4 +- modules/saneui/HGSaneUI.cpp | 43 ------------------- modules/saneui/HGSaneUI.h | 7 --- modules/twain_user/HGTwainImpl.hpp | 1 + modules/twainui/Manager.cpp | 43 ++++++++++++++++++- modules/twainui/Manager.h | 9 ++++ .../dialog_twain_source_select.cpp | 0 .../dialog_twain_source_select.h | 4 +- .../dialog_twain_source_select.ui | 0 modules/twainui/twainui.cpp | 18 ++++++++ 14 files changed, 83 insertions(+), 80 deletions(-) rename modules/{saneui => twainui}/dialog_twain_source_select.cpp (100%) rename modules/{saneui => twainui}/dialog_twain_source_select.h (90%) rename modules/{saneui => twainui}/dialog_twain_source_select.ui (100%) diff --git a/build2/qt/HGSaneUI/HGSaneUI.def b/build2/qt/HGSaneUI/HGSaneUI.def index 166f1a12..989c5c64 100644 --- a/build2/qt/HGSaneUI/HGSaneUI.def +++ b/build2/qt/HGSaneUI/HGSaneUI.def @@ -7,5 +7,4 @@ show_devlist_ui show_setting_ui show_scan_ui show_msgbox_info -show_msgbox_warning -show_twain_srclist_ui \ No newline at end of file +show_msgbox_warning \ No newline at end of file diff --git a/build2/qt/HGSaneUI/HGSaneUI.pro b/build2/qt/HGSaneUI/HGSaneUI.pro index 6a04ea06..18ca37c7 100644 --- a/build2/qt/HGSaneUI/HGSaneUI.pro +++ b/build2/qt/HGSaneUI/HGSaneUI.pro @@ -34,14 +34,11 @@ win32 { SOURCES += ../../../modules/saneui/qmfcapp.cpp SOURCES += ../../../modules/saneui/qwinhost.cpp SOURCES += ../../../modules/saneui/qwinwidget.cpp - SOURCES += ../../../modules/saneui/dialog_twain_source_select.cpp HEADERS += ../../../modules/saneui/qmfcapp.hpp HEADERS += ../../../modules/saneui/qwinhost.hpp HEADERS += ../../../modules/saneui/qwinwidget.hpp - HEADERS += ../../../modules/saneui/dialog_twain_source_select.h - FORMS += ../../../modules/saneui/dialog_twain_source_select.ui MY_OS = windows TARGET = $${OEM_PREFIX}SaneUI diff --git a/build2/qt/HGTwainUI/HGTwainUI.def b/build2/qt/HGTwainUI/HGTwainUI.def index 9285cfee..bd6b2f57 100644 --- a/build2/qt/HGTwainUI/HGTwainUI.def +++ b/build2/qt/HGTwainUI/HGTwainUI.def @@ -7,5 +7,5 @@ apply_current_config twain_ui_free show_setting_ui show_progress_ui - -show_messagebox_ui \ No newline at end of file +show_messagebox_ui +show_twain_srclist_ui \ No newline at end of file diff --git a/build2/qt/HGTwainUI/HGTwainUI.pro b/build2/qt/HGTwainUI/HGTwainUI.pro index 41c82956..8ee8bd89 100644 --- a/build2/qt/HGTwainUI/HGTwainUI.pro +++ b/build2/qt/HGTwainUI/HGTwainUI.pro @@ -152,21 +152,6 @@ win32 { } } -unix { - - CONFIG(release, debug|release) { - DESTDLL_PATH = $$PWD/../../../../release/$${MY_OS}/$${MY_ARCH2}/ - message(DESTDLL_PATH: $$DESTDLL_PATH) - - SRCDLL_FILE = $${DESTDIR}/lib$${TARGET}.so - message(SRCDLL_FILE: $$SRCDLL_FILE) - SRCHEADER_FILE = $${PWD}/../../../modules/twainui/*.h - message(SRCHEADER_FILE: $$SRCHEADER_FILE) - - QMAKE_POST_LINK += cp $$SRCDLL_FILE $$DESTDLL_PATH - } -} - SOURCES += \ ../../../modules/twainui/Manager.cpp \ ../../../modules/twainui/cfg/cJSON.c \ @@ -181,7 +166,8 @@ SOURCES += \ ../../../utility/HGString.cpp \ ../../../modules/twainui/widget.cpp \ ../../../modules/twainui/dialog_progress_ui.cpp \ - ../../../modules/twainui/dialog_device_select.cpp + ../../../modules/twainui/dialog_device_select.cpp \ + ../../../modules/twainui/dialog_twain_source_select.cpp HEADERS += \ ../../../modules/twainui/Manager.h \ ../../../modules/twainui/cfg/cJSON.h \ @@ -195,7 +181,8 @@ HEADERS += \ ../../../utility/HGString.h \ ../../../modules/twainui/widget.h \ ../../../modules/twainui/dialog_progress_ui.h \ - ../../../modules/twainui/dialog_device_select.h + ../../../modules/twainui/dialog_device_select.h \ + ../../../modules/twainui/dialog_twain_source_select.h FORMS += \ ../../../modules/twainui/cutdialog.ui \ @@ -204,7 +191,8 @@ FORMS += \ ../../../modules/twainui/setpicclrtool.ui \ ../../../modules/twainui/widget.ui \ ../../../modules/twainui/dialog_progress_ui.ui \ - ../../../modules/twainui/dialog_device_select.ui + ../../../modules/twainui/dialog_device_select.ui \ + ../../../modules/twainui/dialog_twain_source_select.ui RESOURCES += \ ../../../modules/twainui/TwainUI_resource.qrc diff --git a/build2/qt/HGTwainUser/HGTwainUser.pro b/build2/qt/HGTwainUser/HGTwainUser.pro index 7a177dbc..732effc2 100644 --- a/build2/qt/HGTwainUser/HGTwainUser.pro +++ b/build2/qt/HGTwainUser/HGTwainUser.pro @@ -62,7 +62,7 @@ win32 { DEF_FILE = HGTwainUser.def LIBS += -lgdi32 -lgdiplus -ldbghelp -luser32 - LIBS += -L$$PWD/../../build/$${MY_OS}/$${OEM_NAME}/$${MY_ARCH}/$${MY_CONFIGURE} -l$${OEM_PREFIX}Base -l$${OEM_PREFIX}SaneUI + LIBS += -L$$PWD/../../build/$${MY_OS}/$${OEM_NAME}/$${MY_ARCH}/$${MY_CONFIGURE} -l$${OEM_PREFIX}Base -l$${OEM_PREFIX}TwainUI } unix { @@ -99,7 +99,7 @@ unix { QMAKE_LFLAGS += -z defs -B direct LIBS += -lpthread -ldl - LIBS += -L$$PWD/../../build/$${MY_OS}/$${OEM_NAME}/$${MY_ARCH}/$${MY_CONFIGURE} -l$${OEM_PREFIX2}Base -l$${OEM_PREFIX2}SaneUI + LIBS += -L$$PWD/../../build/$${MY_OS}/$${OEM_NAME}/$${MY_ARCH}/$${MY_CONFIGURE} -l$${OEM_PREFIX2}Base -l$${OEM_PREFIX2}TwainUI } INCLUDEPATH += $$PWD/../../../modules diff --git a/modules/saneui/HGSaneUI.cpp b/modules/saneui/HGSaneUI.cpp index 3c032e8a..9eb0b878 100644 --- a/modules/saneui/HGSaneUI.cpp +++ b/modules/saneui/HGSaneUI.cpp @@ -2,9 +2,6 @@ #include "dialog_source_select.h" #include "dialog_device_select.h" #include "dialog_device_scan.h" -#ifdef HG_CMP_MSC -#include "dialog_twain_source_select.h" -#endif #include "hg_settingdialog.h" #include "lang/app_language.h" #include @@ -236,43 +233,3 @@ int show_msgbox_warning(const char *title, const char *text, HGWindow parent) QMessageBox::warning(qParent, QString::fromUtf8(title), QString::fromUtf8(text)); return 0; } - -#if defined(HG_CMP_MSC) -int show_twain_srclist_ui(DSMENTRYPROC dsmProc, const TW_IDENTITY *appId, HGWindow parent, TW_IDENTITY *ds) -{ - if (nullptr == dsmProc || nullptr == appId || nullptr == ds) - return -1; - - QWidget *qParent = nullptr; -#ifdef HG_CMP_MSC - if (!g_ownApplication) - g_ownApplication = QMfcApp::pluginInstance(g_hInst); - QWinWidget win(parent); - if (nullptr != parent) - { - win.showCentered(); - qParent = &win; - } -#else - qParent = parent; -#endif - - QTranslator translator; - int cp = lang_get_cur_code_page(); - if (20127 == cp) - translator.load(":translation/SaneUI_zh_EN.qm"); - else - translator.load(":translation/SaneUI_zh_CN.qm"); - QCoreApplication::installTranslator(&translator); - - memset(ds, 0, sizeof(TW_IDENTITY)); - Dialog_Twain_Source_Select dlg(dsmProc, appId, qParent); - if (dlg.exec()) - { - dlg.GetIdentify(ds); - } - - QCoreApplication::removeTranslator(&translator); - return 0; -} -#endif diff --git a/modules/saneui/HGSaneUI.h b/modules/saneui/HGSaneUI.h index 2c3ffd5a..eaf42a1d 100644 --- a/modules/saneui/HGSaneUI.h +++ b/modules/saneui/HGSaneUI.h @@ -4,9 +4,6 @@ #include "../base/HGDef.h" #include "../base/HGDll.h" #include "sane/sane_ex.h" -#if defined(HG_CMP_MSC) -#include "twain/twain.h" -#endif typedef void (*show_scan_ui_image_callback)(const SANE_Parameters *imageFormat, const SANE_Byte *imageData, void * callbackParam); @@ -22,8 +19,4 @@ HGEXPORT int show_scan_ui(const SANEAPI* saneApi, SANE_Handle handle, const char 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); -#if defined(HG_CMP_MSC) -HGEXPORT int show_twain_srclist_ui(DSMENTRYPROC dsmProc, const TW_IDENTITY *appId, HGWindow parent, TW_IDENTITY *ds); -#endif - #endif diff --git a/modules/twain_user/HGTwainImpl.hpp b/modules/twain_user/HGTwainImpl.hpp index 13431736..f97f0710 100644 --- a/modules/twain_user/HGTwainImpl.hpp +++ b/modules/twain_user/HGTwainImpl.hpp @@ -6,6 +6,7 @@ #include "../base/HGEvent.h" #include "../base/HGThread.h" #include "twain/twain.h" +#include "twain_user/twainui.h" #include "saneui/HGSaneUI.h" #include #include diff --git a/modules/twainui/Manager.cpp b/modules/twainui/Manager.cpp index a154b5fa..161d75cb 100644 --- a/modules/twainui/Manager.cpp +++ b/modules/twainui/Manager.cpp @@ -45,7 +45,7 @@ int Manager::showDeviceSelect(const std::vector& devs) int Manager::showSettingUi(SANE_Handle device, HWND parent, LPSANEAPI api, const char *devName, bool with_scan, std::function callback) { m_device = device; - m_settingUiParent = nullptr; + m_settingUiParent = parent; memcpy(&m_api, api, sizeof(m_api)); m_devName = devName; m_with_scan = with_scan; @@ -72,7 +72,7 @@ int Manager::showProgressUi(HWND parent, std::function callbac int Manager::showMessageBoxUi(HWND parent, int event, void *msg, int flag) { - m_messageBoxUiParent = nullptr; + m_messageBoxUiParent = parent; m_notifyEvent = event; m_message = (char*)msg; m_flag = flag; @@ -84,6 +84,23 @@ int Manager::showMessageBoxUi(HWND parent, int event, void *msg, int flag) return 0; } +int Manager::showTwainSrcUi(DSMENTRYPROC dsmProc, const TW_IDENTITY *appId, HGWindow parent, TW_IDENTITY *ds) +{ + m_TwainSrcUiparent = parent; + m_dsmProc = dsmProc; + memcpy(&m_appId, appId, sizeof(TW_IDENTITY)); + memset(&ds, 0, sizeof(TW_IDENTITY)); + memset(&m_ds, 0, sizeof(TW_IDENTITY)); + + MSG msg; + while (GetMessage(&msg, NULL, 0, 0)) + { + TranslateMessage(&msg); + DispatchMessage(&msg); + } + return 0; +} + void Manager::on_init() { m_langCode = lang_get_cur_code_page(); @@ -166,3 +183,25 @@ void Manager::on_createMessageBoxUi() msg->setModal(true); msg->show(); } + +void Manager::on_createTwainSrcUi() +{ + QWidget *qParent = nullptr; +#ifdef HG_CMP_MSC + if (nullptr != m_TwainSrcUiparent) + { + QWinWidget *win = new QWinWidget(m_TwainSrcUiparent); + win->showCentered(); + qParent = win; + } +#else + qParent = m_TwainSrcUiparent; +#endif + + Dialog_Twain_Source_Select dlg(m_dsmProc, &m_appId, qParent); + if (dlg.exec()) + { + dlg.GetIdentify(&m_ds); + } + ::PostThreadMessage(m_DeviceSelectThreadId, WM_QUIT, 0, 0); +} diff --git a/modules/twainui/Manager.h b/modules/twainui/Manager.h index 399fa5c0..ed1460c2 100644 --- a/modules/twainui/Manager.h +++ b/modules/twainui/Manager.h @@ -5,6 +5,7 @@ #include "dialog_device_select.h" #include "hg_settingdialog.h" #include "dialog_progress_ui.h" +#include "dialog_twain_source_select.h" class Manager : public QObject { @@ -18,6 +19,7 @@ public: int showSettingUi(SANE_Handle device, HWND settingUiParent, LPSANEAPI api, const char *devName, bool with_scan, std::function callback); int showProgressUi(HWND parent, std::function callback, std::function *notify); int showMessageBoxUi(HWND parent, int event, void *msg, int flag); + int showTwainSrcUi(DSMENTRYPROC dsmProc, const TW_IDENTITY *appId, HGWindow parent, TW_IDENTITY *ds); signals: void init(); @@ -25,6 +27,7 @@ signals: void createSettingUi(); void createProgressUi(); void createMessageBoxUi(); + void createTwainSrcUi(); private slots: void on_init(); @@ -32,6 +35,7 @@ private slots: void on_createSettingUi(); void on_createProgressUi(); void on_createMessageBoxUi(); + void on_createTwainSrcUi(); private: QTranslator m_translator; @@ -62,4 +66,9 @@ private: int m_notifyEvent; std::string m_message; int m_flag; + + DSMENTRYPROC m_dsmProc; + TW_IDENTITY m_appId; + HGWindow m_TwainSrcUiparent; + TW_IDENTITY m_ds; }; diff --git a/modules/saneui/dialog_twain_source_select.cpp b/modules/twainui/dialog_twain_source_select.cpp similarity index 100% rename from modules/saneui/dialog_twain_source_select.cpp rename to modules/twainui/dialog_twain_source_select.cpp diff --git a/modules/saneui/dialog_twain_source_select.h b/modules/twainui/dialog_twain_source_select.h similarity index 90% rename from modules/saneui/dialog_twain_source_select.h rename to modules/twainui/dialog_twain_source_select.h index 74da2863..98b6ab13 100644 --- a/modules/saneui/dialog_twain_source_select.h +++ b/modules/twainui/dialog_twain_source_select.h @@ -1,7 +1,9 @@ #ifndef DIALOG_TWAIN_SOURCE_SELECT_H #define DIALOG_TWAIN_SOURCE_SELECT_H -#include "HGSaneUI.h" +#include "base/HGDef.h" +#include "base/HGInc.h" +#include "twain/twain.h" #include namespace Ui { diff --git a/modules/saneui/dialog_twain_source_select.ui b/modules/twainui/dialog_twain_source_select.ui similarity index 100% rename from modules/saneui/dialog_twain_source_select.ui rename to modules/twainui/dialog_twain_source_select.ui diff --git a/modules/twainui/twainui.cpp b/modules/twainui/twainui.cpp index 105f1217..2cd047b7 100644 --- a/modules/twainui/twainui.cpp +++ b/modules/twainui/twainui.cpp @@ -3,6 +3,7 @@ #include "dialog_device_select.h" #include "dialog_progress_ui.h" #include "hg_settingdialog.h" +#include "dialog_twain_source_select.h" #include "device_menu.h" #include "base/HGBase.h" #include "Manager.h" @@ -143,3 +144,20 @@ int show_messagebox_ui(HWND parent, int event, void *msg, int flag) return g_manager->showMessageBoxUi(parent, event, msg, flag); } + +int show_twain_srclist_ui(DSMENTRYPROC dsmProc, const TW_IDENTITY *appId, HGWindow parent, TW_IDENTITY *ds) +{ + if (!qApp) + { + HGBase_CreateEvent(HGTRUE, HGFALSE, &g_event); + HGBase_OpenThread(ThreadFunc, NULL, &g_hThread); + HGBase_WaitEvent(g_event); + } + + if (NULL == g_manager) + { + g_manager = new Manager; + } + + return g_manager->showTwainSrcUi(dsmProc, appId, parent, ds); +}