调整窗口显示逻辑

This commit is contained in:
yangjiaxuan 2023-05-19 18:41:49 +08:00
parent f9a72dee1d
commit 04673e47f2
8 changed files with 101 additions and 61 deletions

View File

@ -57,7 +57,7 @@ HGResult DeviceUser::ShowSettingDlg()
HGResult DeviceUser::StartScan()
{
return HGTwain_EnableDS(m_twainDS, HGFALSE, nullptr, DSCloseReqFunc, this, DSImageFunc, this);
return HGTwain_EnableDS(m_twainDS, HGFALSE, (HWND)m_wnd->winId(), DSCloseReqFunc, this, DSImageFunc, this);
}
HGResult DeviceUser::StartSingleScan()

View File

@ -9,11 +9,11 @@ Manager::Manager()
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()));
connect(this, SIGNAL(createTwainSrcUi()), this, SLOT(on_createTwainSrcUi()));
connect(this, SIGNAL(createDeviceSelect(bool)), this, SLOT(on_createDeviceSelect(bool)));
connect(this, SIGNAL(createSettingUi(bool)), this, SLOT(on_createSettingUi(bool)));
connect(this, SIGNAL(createProgressUi(bool)), this, SLOT(on_createProgressUi(bool)));
connect(this, SIGNAL(createMessageBoxUi(bool)), this, SLOT(on_createMessageBoxUi(bool)));
connect(this, SIGNAL(createTwainSrcUi(bool)), this, SLOT(on_createTwainSrcUi(bool)));
emit init();
}
@ -27,23 +27,26 @@ Manager::~Manager()
HGBase_DestroyEvent(m_event);
}
int Manager::showDeviceSelect(const std::vector<DEVQUEUI>& devs)
int Manager::showDeviceSelect(bool qt, const std::vector<DEVQUEUI>& devs)
{
m_DeviceSelectDevs = devs;
m_DeviceSelectThreadId = GetCurrentThreadId();
emit createDeviceSelect();
emit createDeviceSelect(qt);
if (!qt)
{
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<void (ui_result)> callback)
int Manager::showSettingUi(bool qt, SANE_Handle device, HWND parent, LPSANEAPI api, const char *devName, bool with_scan, std::function<void (ui_result)> callback)
{
m_device = device;
m_settingUiParent = parent;
@ -54,19 +57,24 @@ int Manager::showSettingUi(SANE_Handle device, HWND parent, LPSANEAPI api, const
m_SettingUiThreadId = GetCurrentThreadId();
emit createSettingUi();
emit createSettingUi(qt);
return 0;
}
int Manager::showProgressUi(HWND parent, std::function<void (ui_result)> callback, std::function<void (int, void *, int)> *notify)
int Manager::showProgressUi(bool qt, HWND parent, std::function<void (ui_result)> callback, std::function<void (int, void *, int)> *notify)
{
m_progressUiparent = parent;
hg_settingdialog *settingDlg = hg_settingdialog::GetSettingDialog();
if (nullptr != settingDlg)
m_progressUiparent = (HWND)settingDlg->winId();
m_progressUiCallback = callback;
m_notify = notify;
if (!qt)
{
m_ProgressUiThreadId = GetCurrentThreadId();
emit createProgressUi();
emit createProgressUi(qt);
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
@ -74,25 +82,30 @@ int Manager::showProgressUi(HWND parent, std::function<void (ui_result)> callbac
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
else
{
on_createProgressUi(qt);
}
return 0;
}
int Manager::showMessageBoxUi(HWND parent, int event, void *msg, int flag)
int Manager::showMessageBoxUi(bool qt, HWND parent, int event, void *msg, int flag)
{
m_messageBoxUiParent = parent;
m_messageBoxUiParent = nullptr;
m_notifyEvent = event;
m_message = (char*)msg;
m_flag = flag;
m_MessageBoxUiThreadId = GetCurrentThreadId();
emit createMessageBoxUi();
emit createMessageBoxUi(qt);
return 0;
}
int Manager::showTwainSrcUi(DSMENTRYPROC dsmProc, const TW_IDENTITY *appId, HGWindow parent, TW_IDENTITY *ds)
int Manager::showTwainSrcUi(bool qt, DSMENTRYPROC dsmProc, const TW_IDENTITY *appId, HGWindow parent, TW_IDENTITY *ds)
{
m_twainSrcUiThreadId = GetCurrentThreadId();
@ -102,14 +115,17 @@ int Manager::showTwainSrcUi(DSMENTRYPROC dsmProc, const TW_IDENTITY *appId, HGWi
memset(ds, 0, sizeof(TW_IDENTITY));
memset(&m_ds, 0, sizeof(TW_IDENTITY));
emit createTwainSrcUi();
emit createTwainSrcUi(qt);
if (!qt)
{
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
memcpy(ds, &m_ds, sizeof(TW_IDENTITY));
return 0;
@ -133,15 +149,19 @@ void Manager::on_init()
QCoreApplication::installTranslator(&m_translator_qt);
}
void Manager::on_createDeviceSelect()
void Manager::on_createDeviceSelect(bool qt)
{
Dialog_device_select dlg(m_DeviceSelectDevs);
dlg.exec();
m_DeviceSelectResult = dlg.getDevId();
if (!qt)
{
::PostThreadMessage(m_DeviceSelectThreadId, WM_QUIT, 0, 0);
}
}
void Manager::on_createSettingUi()
void Manager::on_createSettingUi(bool qt)
{
QWidget *qParent = nullptr;
#ifdef HG_CMP_MSC
@ -160,7 +180,7 @@ void Manager::on_createSettingUi()
dlg->show();
}
void Manager::on_createProgressUi()
void Manager::on_createProgressUi(bool qt)
{
QWidget *qParent = nullptr;
#ifdef HG_CMP_MSC
@ -170,6 +190,7 @@ void Manager::on_createProgressUi()
win->showCentered();
qParent = win;
}
#else
qParent = m_progressUiparent;
#endif
@ -177,10 +198,14 @@ void Manager::on_createProgressUi()
Dialog_progress_ui *dlg = new Dialog_progress_ui(m_progressUiCallback, m_notify, qParent);
dlg->setModal(true);
dlg->show();
if (!qt)
{
::PostThreadMessage(m_ProgressUiThreadId, WM_QUIT, 0, 0);
}
}
void Manager::on_createMessageBoxUi()
void Manager::on_createMessageBoxUi(bool qt)
{
QWidget *qParent = nullptr;
#ifdef HG_CMP_MSC
@ -195,11 +220,12 @@ void Manager::on_createMessageBoxUi()
#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();
}
void Manager::on_createTwainSrcUi()
void Manager::on_createTwainSrcUi(bool qt)
{
QWidget *qParent = nullptr;
#ifdef HG_CMP_MSC
@ -218,5 +244,9 @@ void Manager::on_createTwainSrcUi()
{
dlg.GetIdentify(&m_ds);
}
if (!qt)
{
::PostThreadMessage(m_twainSrcUiThreadId, WM_QUIT, 0, 0);
}
}

View File

@ -15,27 +15,27 @@ public:
Manager();
~Manager();
int showDeviceSelect(const std::vector<DEVQUEUI>& devs);
int showSettingUi(SANE_Handle device, HWND settingUiParent, LPSANEAPI api, const char *devName, bool with_scan, std::function<void(ui_result)> callback);
int showProgressUi(HWND parent, std::function<void (ui_result)> callback, std::function<void (int, void *, int)> *notify);
int showMessageBoxUi(HWND parent, int event, void *msg, int flag);
int showTwainSrcUi(DSMENTRYPROC dsmProc, const TW_IDENTITY *appId, HGWindow parent, TW_IDENTITY *ds);
int showDeviceSelect(bool qt, const std::vector<DEVQUEUI>& devs);
int showSettingUi(bool qt, SANE_Handle device, HWND settingUiParent, LPSANEAPI api, const char *devName, bool with_scan, std::function<void(ui_result)> callback);
int showProgressUi(bool qt, HWND parent, std::function<void (ui_result)> callback, std::function<void (int, void *, int)> *notify);
int showMessageBoxUi(bool qt, HWND parent, int event, void *msg, int flag);
int showTwainSrcUi(bool qt, DSMENTRYPROC dsmProc, const TW_IDENTITY *appId, HGWindow parent, TW_IDENTITY *ds);
signals:
void init();
void createDeviceSelect();
void createSettingUi();
void createProgressUi();
void createMessageBoxUi();
void createTwainSrcUi();
void createDeviceSelect(bool qt);
void createSettingUi(bool qt);
void createProgressUi(bool qt);
void createMessageBoxUi(bool qt);
void createTwainSrcUi(bool qt);
private slots:
void on_init();
void on_createDeviceSelect();
void on_createSettingUi();
void on_createProgressUi();
void on_createMessageBoxUi();
void on_createTwainSrcUi();
void on_createDeviceSelect(bool qt);
void on_createSettingUi(bool qt);
void on_createProgressUi(bool qt);
void on_createMessageBoxUi(bool qt);
void on_createTwainSrcUi(bool qt);
private:
QTranslator m_translator;

View File

@ -8,6 +8,7 @@ Dialog_device_select::Dialog_device_select(const std::vector<DEVQUEUI>& devs, QW
, m_devs(devs)
{
ui->setupUi(this);
setWindowFlags(Qt::SubWindow | Qt::Popup | Qt::WindowStaysOnTopHint);
for (int i = 0; i < m_devs.size(); ++i)
{

View File

@ -16,7 +16,8 @@ Dialog_progress_ui::Dialog_progress_ui(std::function<void (ui_result)> callback,
setAttribute(Qt::WA_DeleteOnClose, true);
ui->setupUi(this);
setWindowFlags(Qt::Dialog | Qt::WindowCloseButtonHint);
setWindowFlags(Qt::SubWindow | Qt::Popup);
ui->pbtn_cancelScan->setVisible(false);
ui->pbtn_close->setVisible(false);

View File

@ -12,7 +12,7 @@
#include <typeinfo>
#include "device_menu.h"
#include "dialog_device_scan.h"
hg_settingdialog * hg_setting_ui_ =NULL;
hg_settingdialog * hg_settingdialog::hg_setting_ui_ =NULL;
std::string hg_settingdialog::property_combox_data_type_ = "combox_value_type";
hg_settingdialog::hg_settingdialog(SANE_Handle handle, const SANEAPI* saneApi, bool showScan, const char* devName,
@ -26,6 +26,7 @@ hg_settingdialog::hg_settingdialog(SANE_Handle handle, const SANEAPI* saneApi, b
, m_devName(devName)
, m_callback(callback)
{
hg_setting_ui_ = this;
m_langCode = lang_get_cur_code_page();
if (20127 == m_langCode)
{
@ -116,6 +117,11 @@ hg_settingdialog::~hg_settingdialog()
m_callback(UI_RESULT_CLOSE_SETTING);
}
hg_settingdialog *hg_settingdialog::GetSettingDialog()
{
return hg_setting_ui_;
}
void hg_settingdialog::initUi()
{
updateOpt();

View File

@ -51,6 +51,7 @@ public:
~hg_settingdialog();
public:
static hg_settingdialog *GetSettingDialog();
void initUi();
void updateOpt();
void createUI();
@ -73,6 +74,7 @@ public:
int m_closeButton;
private:
static hg_settingdialog *hg_setting_ui_;
SANEAPI m_saneAPI;
SANE_Handle m_devHandle;
bool m_showScan;

View File

@ -46,7 +46,7 @@ int choose_scanner(const std::vector<DEVQUEUI> &devs)
g_manager = new Manager;
}
return g_manager->showDeviceSelect(devs);
return g_manager->showDeviceSelect(nullptr == g_hThread, devs);
}
char *apply_current_config(const char *dev_name, SANE_Handle device, LPSANEAPI api)
@ -114,7 +114,7 @@ int show_setting_ui(SANE_Handle device, HWND parent, LPSANEAPI api, const char *
g_manager = new Manager;
}
return g_manager->showSettingUi(device, parent, api, devName, with_scan, callback);
return g_manager->showSettingUi(nullptr == g_hThread, device, parent, api, devName, with_scan, callback);
}
int show_progress_ui(HWND parent, std::function<void (ui_result)> callback, std::function<void (int, void *, int)> *notify)
@ -131,7 +131,7 @@ int show_progress_ui(HWND parent, std::function<void (ui_result)> callback, std:
g_manager = new Manager;
}
return g_manager->showProgressUi(parent, callback, notify);
return g_manager->showProgressUi(nullptr == g_hThread, parent, callback, notify);
}
int show_messagebox_ui(HWND parent, int event, void *msg, int flag)
@ -148,7 +148,7 @@ int show_messagebox_ui(HWND parent, int event, void *msg, int flag)
g_manager = new Manager;
}
return g_manager->showMessageBoxUi(parent, event, msg, flag);
return g_manager->showMessageBoxUi(nullptr == g_hThread, parent, event, msg, flag);
}
int show_twain_srclist_ui(DSMENTRYPROC dsmProc, const TW_IDENTITY *appId, HGWindow parent, TW_IDENTITY *ds)
@ -165,5 +165,5 @@ int show_twain_srclist_ui(DSMENTRYPROC dsmProc, const TW_IDENTITY *appId, HGWind
g_manager = new Manager;
}
return g_manager->showTwainSrcUi(dsmProc, appId, parent, ds);
return g_manager->showTwainSrcUi(nullptr == g_hThread, dsmProc, appId, parent, ds);
}