code_app/modules/saneui/HGSaneUI.cpp

279 lines
7.2 KiB
C++

#include "HGSaneUI.h"
#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 <QMessageBox>
#include <QTranslator>
#include <QCoreApplication>
#ifdef HG_CMP_MSC
#include "qwinwidget.hpp"
extern HINSTANCE g_hInst;
extern bool g_ownApplication;
#endif
int show_srclist_ui(const char **manuNames, const char **sanePaths, HGWindow parent, HGDll *dll,
SANEAPI* saneApi, char *manuName, unsigned int maxLen)
{
if (nullptr == manuNames || nullptr == sanePaths || nullptr == dll || nullptr == saneApi)
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);
*dll = nullptr;
memset(saneApi, 0, sizeof(SANEAPI));
Dialog_Source_Select dlg(manuNames, sanePaths, qParent);
if (dlg.exec())
{
if (nullptr != manuName)
{
std::string strManuName = dlg.GetManuName();
if (maxLen >= strManuName.size() + 1)
strcpy(manuName, strManuName.c_str());
}
*dll = dlg.GetDll();
dlg.GetSaneAPI(saneApi);
}
QCoreApplication::removeTranslator(&translator);
return 0;
}
int show_devlist_ui(const SANEAPI* saneApi, const char **devNames, HGWindow parent,
SANE_Handle *handle, char *devName, unsigned int maxLen)
{
if (nullptr == saneApi || nullptr == handle)
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);
*handle = nullptr;
Dialog_Device_Select dlg(saneApi, devNames, qParent);
if (dlg.exec())
{
if (nullptr != devName)
{
std::string strDevName = dlg.GetDevName();
if (maxLen >= strDevName.size() + 1)
strcpy(devName, strDevName.c_str());
}
*handle = dlg.GetDevHandle();
}
QCoreApplication::removeTranslator(&translator);
return 0;
}
int show_setting_ui(const SANEAPI* saneApi, SANE_Handle handle, const char *devName, HGWindow parent,
show_scan_ui_image_callback callback, void *callbackParam)
{
if (nullptr == saneApi || nullptr == handle)
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;
QTranslator translator2;
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");
translator2.load(":translation/qt_zh_CN.qm");
}
QCoreApplication::installTranslator(&translator);
if (20127 != cp)
QCoreApplication::installTranslator(&translator2);
hg_settingdialog dlg(saneApi, handle, devName, callback, callbackParam, qParent);
dlg.exec();
QCoreApplication::removeTranslator(&translator);
if (20127 != cp)
QCoreApplication::removeTranslator(&translator2);
return 0;
}
int show_scan_ui(const SANEAPI* saneApi, SANE_Handle handle, const char *devName, HGWindow parent,
show_scan_ui_image_callback callback, void *callbackParam)
{
if (nullptr == saneApi || nullptr == handle)
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);
Dialog_Device_Scan dlg(saneApi, handle, devName, callback, callbackParam, qParent);
dlg.exec();
QCoreApplication::removeTranslator(&translator);
return 0;
}
int show_msgbox_info(const char *title, const char *text, HGWindow parent)
{
if (nullptr == title || nullptr == text)
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
QMessageBox::information(qParent, QString::fromUtf8(title), QString::fromUtf8(text));
return 0;
}
int show_msgbox_warning(const char *title, const char *text, HGWindow parent)
{
if (nullptr == title || nullptr == text)
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
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