code_app/modules/twainui/twainui.cpp

161 lines
4.0 KiB
C++

#include "twain_user/twainui.h"
#include <QMessageBox>
#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
extern hg_settingdialog * hg_setting_ui_;
int choose_scanner(const std::vector<DEVQUEUI> &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, true);
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<char*>(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, std::function<void(ui_result)> callback)
{
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 = new QWinWidget(parent);
if (nullptr != parent)
{
win->showCentered();
qParent = win;
}
#else
qParent = parent;
#endif
hg_setting_ui_ = new hg_settingdialog(device, api, with_scan, devName, callback, qParent);
hg_setting_ui_->setModal(true);
hg_setting_ui_->show();
return 0;
}
int show_progress_ui(HWND parent, std::function<void (ui_result)> callback, std::function<void (int, void *, int)> *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
if(nullptr != hg_setting_ui_)
{
qParent = hg_setting_ui_;
}
Dialog_progress_ui *dlg = new Dialog_progress_ui(callback, notify, qParent);
dlg->setModal(true);
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;
}