diff --git a/modules/twainui/Manager.cpp b/modules/twainui/Manager.cpp index fa107c40..46d0fd46 100644 --- a/modules/twainui/Manager.cpp +++ b/modules/twainui/Manager.cpp @@ -5,6 +5,14 @@ Manager::Manager() : QObject(nullptr) + , m_progressUiCallback(std::function()) + , m_notify(nullptr) + , m_settingUiCallback(std::function()) + , m_deviceSelectUi(nullptr) + , m_settingUi(nullptr) + , m_progressUi(nullptr) + , m_msgBoxUi(nullptr) + , m_twainSrcUi(nullptr) { HGBase_CreateEvent(HGFALSE, HGFALSE, &m_event); @@ -27,6 +35,51 @@ Manager::~Manager() HGBase_DestroyEvent(m_event); } +void Manager::closeDeviceSelectUi() +{ + if (m_deviceSelectUi != nullptr) + { + delete m_deviceSelectUi; + m_deviceSelectUi = nullptr; + } +} + +void Manager::closeSettingUi() +{ + if (m_settingUi != nullptr) + { + delete m_settingUi; + m_settingUi = nullptr; + } +} + +void Manager::closeProgressUi() +{ + if (m_progressUi != nullptr) + { + delete m_progressUi; + m_progressUi = nullptr; + } +} + +void Manager::closeMessageBoxUi() +{ + if (m_msgBoxUi != nullptr) + { + delete m_msgBoxUi; + m_msgBoxUi = nullptr; + } +} + +void Manager::closeTwainSrcUi() +{ + if (m_twainSrcUi != nullptr) + { + delete m_twainSrcUi; + m_twainSrcUi = nullptr; + } +} + int Manager::showDeviceSelect(bool qt, const std::vector& devs) { m_DeviceSelectDevs = devs; @@ -151,9 +204,10 @@ void Manager::on_init() void Manager::on_createDeviceSelect(bool qt) { - Dialog_device_select dlg(m_DeviceSelectDevs); - dlg.exec(); - m_DeviceSelectResult = dlg.getDevId(); + if (m_deviceSelectUi != nullptr) + m_deviceSelectUi = new Dialog_device_select(m_DeviceSelectDevs); + m_deviceSelectUi->exec(); + m_DeviceSelectResult = m_deviceSelectUi->getDevId(); if (!qt) { @@ -175,9 +229,10 @@ void Manager::on_createSettingUi(bool qt) qParent = m_settingUiParent; #endif - hg_settingdialog *dlg = new hg_settingdialog(m_device, &m_api, m_with_scan, m_devName.c_str(), m_settingUiCallback, qParent); - dlg->setModal(true); - dlg->show(); + if (m_settingUi != nullptr) + m_settingUi = new hg_settingdialog(m_device, &m_api, m_with_scan, m_devName.c_str(), m_settingUiCallback, qParent); + m_settingUi->setModal(true); + m_settingUi->show(); } void Manager::on_createProgressUi(bool qt) @@ -195,9 +250,10 @@ void Manager::on_createProgressUi(bool qt) qParent = m_progressUiparent; #endif - Dialog_progress_ui *dlg = new Dialog_progress_ui(m_progressUiCallback, m_notify, qParent); - dlg->setModal(true); - dlg->show(); + if (m_progressUi != nullptr) + m_progressUi = new Dialog_progress_ui(m_progressUiCallback, m_notify, qParent); + m_progressUi->setModal(true); + m_progressUi->show(); if (!qt) { @@ -219,10 +275,11 @@ void Manager::on_createMessageBoxUi(bool qt) qParent = m_messageBoxUiParent; #endif - QMessageBox *msg = new QMessageBox(QMessageBox::Critical, tr("Prompt"), QString::fromStdString(m_message), QMessageBox::Ok, qParent); - msg->setWindowFlags(Qt::SubWindow | Qt::Popup | Qt::WindowStaysOnTopHint); - msg->setModal(true); - msg->show(); + if (m_msgBoxUi != nullptr) + m_msgBoxUi = new QMessageBox(QMessageBox::Critical, tr("Prompt"), QString::fromStdString(m_message), QMessageBox::Ok, qParent); + m_msgBoxUi->setWindowFlags(Qt::SubWindow | Qt::Popup | Qt::WindowStaysOnTopHint); + m_msgBoxUi->setModal(true); + m_msgBoxUi->show(); } void Manager::on_createTwainSrcUi(bool qt) @@ -239,10 +296,11 @@ void Manager::on_createTwainSrcUi(bool qt) qParent = m_TwainSrcUiparent; #endif - Dialog_Twain_Source_Select dlg(m_dsmProc, &m_appId, qParent); - if (dlg.exec()) + if (m_twainSrcUi != nullptr) + m_twainSrcUi = new Dialog_Twain_Source_Select (m_dsmProc, &m_appId, qParent); + if (m_twainSrcUi->exec()) { - dlg.GetIdentify(&m_ds); + m_twainSrcUi->GetIdentify(&m_ds); } if (!qt) diff --git a/modules/twainui/Manager.h b/modules/twainui/Manager.h index ca0cc781..ecc1880f 100644 --- a/modules/twainui/Manager.h +++ b/modules/twainui/Manager.h @@ -15,6 +15,12 @@ public: Manager(); ~Manager(); + void closeDeviceSelectUi(); + void closeSettingUi(); + void closeProgressUi(); + void closeMessageBoxUi(); + void closeTwainSrcUi(); + int showDeviceSelect(bool qt, const std::vector& devs); int showSettingUi(bool qt, SANE_Handle device, HWND settingUiParent, LPSANEAPI api, const char *devName, bool with_scan, std::function callback); int showProgressUi(bool qt, HWND parent, std::function callback, std::function *notify); @@ -44,10 +50,12 @@ private: HGEvent m_event; + Dialog_device_select *m_deviceSelectUi; std::vector m_DeviceSelectDevs; unsigned long m_DeviceSelectThreadId; int m_DeviceSelectResult; + hg_settingdialog *m_settingUi; unsigned long m_SettingUiThreadId; SANE_Handle m_device; HWND m_settingUiParent; @@ -56,17 +64,20 @@ private: bool m_with_scan; std::function m_settingUiCallback; + Dialog_progress_ui *m_progressUi; HWND m_progressUiparent; unsigned long m_ProgressUiThreadId; std::function m_progressUiCallback; std::function *m_notify; + QMessageBox *m_msgBoxUi; unsigned long m_MessageBoxUiThreadId; HWND m_messageBoxUiParent; int m_notifyEvent; std::string m_message; int m_flag; + Dialog_Twain_Source_Select *m_twainSrcUi; unsigned long m_twainSrcUiThreadId; DSMENTRYPROC m_dsmProc; TW_IDENTITY m_appId; diff --git a/modules/twainui/twainui.cpp b/modules/twainui/twainui.cpp index 1129f9cb..e7788b04 100644 --- a/modules/twainui/twainui.cpp +++ b/modules/twainui/twainui.cpp @@ -173,3 +173,26 @@ int show_twain_srclist_ui(DSMENTRYPROC dsmProc, const TW_IDENTITY *appId, HGWind return g_manager->showTwainSrcUi(nullptr == g_hThread, dsmProc, appId, parent, ds); } + +int close_ui(int which) +{ + if (NULL == g_manager) + { + return 0; + } + + if (UI_INDICATOR == which) + { + g_manager->closeProgressUi(); + } + else if (UI_SETTING == which) + { + g_manager->closeSettingUi(); + } + else if (UI_MSG_BOX == which) + { + g_manager->closeMessageBoxUi(); + } + + return 0; +}