#include "Manager.h" #include #include #include "lang/app_language.h" Manager::Manager() : QObject(nullptr) { HGBase_CreateEvent(HGFALSE, HGFALSE, &m_event); connect(this, SIGNAL(init()), this, SLOT(on_init())); connect(this, SIGNAL(createDeviceSelect()), this, SLOT(on_createDeviceSelect())); connect(this, SIGNAL(createSettingUi()), this, SLOT(on_createSettingUi())); connect(this, SIGNAL(createProgressUi()), this, SLOT(on_createProgressUi())); connect(this, SIGNAL(createMessageBoxUi()), this, SLOT(on_createMessageBoxUi())); emit init(); } Manager::~Manager() { QCoreApplication::removeTranslator(&m_translator); if (20127 != m_langCode) QCoreApplication::removeTranslator(&m_translator_qt); HGBase_DestroyEvent(m_event); } int Manager::showDeviceSelect(const std::vector& devs) { m_DeviceSelectDevs = devs; m_DeviceSelectThreadId = GetCurrentThreadId(); emit createDeviceSelect(); MSG msg; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return m_DeviceSelectResult; } int Manager::showSettingUi(SANE_Handle device, HWND parent, LPSANEAPI api, const char *devName, bool with_scan, std::function callback) { m_device = device; m_settingUiParent = parent; memcpy(&m_api, api, sizeof(m_api)); m_devName = devName; m_with_scan = with_scan; m_settingUiCallback = callback; m_SettingUiThreadId = GetCurrentThreadId(); emit createSettingUi(); MSG msg; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return 0; } int Manager::showProgressUi(HWND parent, std::function callback, std::function *notify) { m_progressUiparent = parent; m_progressUiCallback = callback; m_notify = notify; m_ProgressUiThreadId = GetCurrentThreadId(); emit createProgressUi(); MSG msg; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return 0; } int Manager::showMessageBoxUi(HWND parent, int event, void *msg, int flag) { m_messageBoxUiParent = parent; m_notifyEvent = event; m_message = (char*)msg; m_flag = flag; m_MessageBoxUiThreadId = GetCurrentThreadId(); emit createMessageBoxUi(); MSG msg2; while (GetMessage(&msg2, NULL, 0, 0)) { TranslateMessage(&msg2); DispatchMessage(&msg2); } return 0; } void Manager::on_init() { m_langCode = lang_get_cur_code_page(); if (20127 == m_langCode) { m_translator.load(":translation/TwainUI_zh_EN.qm"); } else { m_translator.load(":translation/TwainUI_zh_CN.qm"); m_translator_qt.load(":translation/qt_zh_CN.qm"); } QCoreApplication::installTranslator(&m_translator); if (20127 != m_langCode) QCoreApplication::installTranslator(&m_translator_qt); } void Manager::on_createDeviceSelect() { Dialog_device_select dlg(m_DeviceSelectDevs); dlg.exec(); m_DeviceSelectResult = dlg.getDevId(); ::PostThreadMessage(m_DeviceSelectThreadId, WM_QUIT, 0, 0); } void Manager::on_createSettingUi() { QWidget *qParent = nullptr; #ifdef HG_CMP_MSC if (nullptr != m_settingUiParent) { QWinWidget *win = new QWinWidget(m_settingUiParent); win->showCentered(); qParent = win; } #else 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(); ::PostThreadMessage(m_SettingUiThreadId, WM_QUIT, 0, 0); } void Manager::on_createProgressUi() { QWidget *qParent = nullptr; #ifdef HG_CMP_MSC if (nullptr != m_progressUiparent) { QWinWidget *win = new QWinWidget(m_progressUiparent); win->showCentered(); qParent = win; } #else qParent = m_progressUiparent; #endif Dialog_progress_ui *dlg = new Dialog_progress_ui(m_progressUiCallback, m_notify, qParent); dlg->setModal(true); dlg->show(); ::PostThreadMessage(m_ProgressUiThreadId, WM_QUIT, 0, 0); } void Manager::on_createMessageBoxUi() { QWidget *qParent = nullptr; #ifdef HG_CMP_MSC if (nullptr != m_messageBoxUiParent) { QWinWidget *win = new QWinWidget(m_messageBoxUiParent); win->showCentered(); qParent = win; } #else qParent = m_messageBoxUiParent; #endif QMessageBox *msg = new QMessageBox(QMessageBox::Critical, tr("Prompt"), QString::fromStdString(m_message), QMessageBox::Ok, qParent); msg->setModal(true); msg->show(); ::PostThreadMessage(m_MessageBoxUiThreadId, WM_QUIT, 0, 0); }