#include "twainui.h" #include #include "dialog_device_select.h" #include "dialog_progress_ui.h" #include "hg_settingdialog.h" #include "device_menu.h" #include "base/HGBase.h" #ifdef HG_CMP_MSC #include "qwinwidget.hpp" extern HINSTANCE g_hInst; extern bool g_ownApplication; #endif int choose_scanner(const std::vector &devs) { QWidget* qParent = nullptr; #ifdef HG_CMP_MSC if (!g_ownApplication) g_ownApplication = QMfcApp::pluginInstance(g_hInst); QWinWidget win(nullptr); #else qParent = parent; #endif QTranslator translator; int cp = lang_get_cur_code_page(); if (20127 == cp) translator.load(":translation/TwainUI_zh_EN.qm"); else translator.load(":translation/TwainUI_zh_CN.qm"); QCoreApplication::installTranslator(&translator); Dialog_device_select dlg(devs); dlg.exec(); QCoreApplication::removeTranslator(&translator); return dlg.getDevId(); } char *apply_current_config(const char *dev_name, SANE_Handle device, LPSANEAPI api) { dev_que devQue; gb::scanner_cfg *cur_cfg_ = nullptr; gb::sane_config_schm *curScheme = nullptr; HGChar cfgpath[512] = {0}; HGBase_GetConfigPath(cfgpath, _countof(cfgpath) - 1); HGBase_CreateDir(cfgpath); devQue.set_root_dir(cfgpath); QString old = QString::fromStdString(cfgpath) + PATH_SYMBOL + "scanner.schm"; if(QFile::exists(old)) dev_que::update_old_cfg(old.toStdString().c_str()); devQue.add_scanner(dev_name); devQue.open_scanner(api, device, dev_name); std::string n(devQue.opened_scanner_name()); for(int i = 0; i < devQue.scanners(); ++i) { SCANNER s = devQue.get_at(i); if(s.name == n) { cur_cfg_ = s.cfg; break; } } curScheme = cur_cfg_->get_scheme(); if(!curScheme) curScheme = new gb::sane_config_schm(); curScheme->begin_setting(); std::string name = curScheme->get_scheme_name(); char *str = const_cast(name.c_str()); return str; } void twain_ui_free(void *buf) { if (buf != nullptr) { delete buf; buf = nullptr; } } int show_setting_ui(SANE_Handle device, HWND parent, LPSANEAPI api, const char *devName, bool with_scan) { if (nullptr == api || nullptr == device) 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/TwainUI_zh_EN.qm"); else translator.load(":translation/TwainUI_zh_CN.qm"); QCoreApplication::installTranslator(&translator); hg_settingdialog dlg(device, api, with_scan, devName, qParent); dlg.exec(); QCoreApplication::removeTranslator(&translator); int ret = dlg.getCloseButtonCliked(); if (ret == dlg.closeButtonScan) return UI_RESULT_START_SCAN; else if (ret == dlg.closeButtonCancel) return UI_RESULT_CLOSE_CANCEL; else return UI_RESULT_CLOSE_NORMAL; } int show_progress_ui(HWND parent, std::function callback, std::function *notify) { QWidget *qParent = nullptr; #ifdef HG_CMP_MSC if (!g_ownApplication) g_ownApplication = QMfcApp::pluginInstance(g_hInst); QWinWidget *win = new QWinWidget(parent); if (nullptr != parent) { win->showCentered(); qParent = win; } #else qParent = parent; #endif Dialog_progress_ui *dlg = new Dialog_progress_ui(callback, notify, qParent); dlg->show(); return 0; } int show_messagebox_ui(HWND parent, int event, void *msg, int flag) { QWidget *qParent = nullptr; #ifdef HG_CMP_MSC if (!g_ownApplication) g_ownApplication = QMfcApp::pluginInstance(g_hInst); QWinWidget *win = new QWinWidget(parent); if (nullptr != parent) { win->showCentered(); qParent = win; } #else qParent = parent; #endif char *str = (char*)msg; QMessageBox::critical(qParent, QObject::tr("Prompt"), QString::fromStdString(str)); return UI_RESULT_OK; }