实现twainui的closeui接口

This commit is contained in:
yangjiaxuan 2023-05-23 17:40:43 +08:00
parent e93c519014
commit 2be1799d03
3 changed files with 108 additions and 16 deletions

View File

@ -5,6 +5,14 @@
Manager::Manager()
: QObject(nullptr)
, m_progressUiCallback(std::function<void(ui_result)>())
, m_notify(nullptr)
, m_settingUiCallback(std::function<void(ui_result)>())
, m_deviceSelectUi(nullptr)
, m_settingUi(nullptr)
, m_progressUi(nullptr)
, m_msgBoxUi(nullptr)
, m_twainSrcUi(nullptr)
{
HGBase_CreateEvent(HGFALSE, HGFALSE, &m_event);
@ -27,6 +35,51 @@ Manager::~Manager()
HGBase_DestroyEvent(m_event);
}
void Manager::closeDeviceSelectUi()
{
if (m_deviceSelectUi != nullptr)
{
delete m_deviceSelectUi;
m_deviceSelectUi = nullptr;
}
}
void Manager::closeSettingUi()
{
if (m_settingUi != nullptr)
{
delete m_settingUi;
m_settingUi = nullptr;
}
}
void Manager::closeProgressUi()
{
if (m_progressUi != nullptr)
{
delete m_progressUi;
m_progressUi = nullptr;
}
}
void Manager::closeMessageBoxUi()
{
if (m_msgBoxUi != nullptr)
{
delete m_msgBoxUi;
m_msgBoxUi = nullptr;
}
}
void Manager::closeTwainSrcUi()
{
if (m_twainSrcUi != nullptr)
{
delete m_twainSrcUi;
m_twainSrcUi = nullptr;
}
}
int Manager::showDeviceSelect(bool qt, const std::vector<DEVQUEUI>& devs)
{
m_DeviceSelectDevs = devs;
@ -151,9 +204,10 @@ void Manager::on_init()
void Manager::on_createDeviceSelect(bool qt)
{
Dialog_device_select dlg(m_DeviceSelectDevs);
dlg.exec();
m_DeviceSelectResult = dlg.getDevId();
if (m_deviceSelectUi != nullptr)
m_deviceSelectUi = new Dialog_device_select(m_DeviceSelectDevs);
m_deviceSelectUi->exec();
m_DeviceSelectResult = m_deviceSelectUi->getDevId();
if (!qt)
{
@ -175,9 +229,10 @@ void Manager::on_createSettingUi(bool qt)
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();
if (m_settingUi != nullptr)
m_settingUi = new hg_settingdialog(m_device, &m_api, m_with_scan, m_devName.c_str(), m_settingUiCallback, qParent);
m_settingUi->setModal(true);
m_settingUi->show();
}
void Manager::on_createProgressUi(bool qt)
@ -195,9 +250,10 @@ void Manager::on_createProgressUi(bool qt)
qParent = m_progressUiparent;
#endif
Dialog_progress_ui *dlg = new Dialog_progress_ui(m_progressUiCallback, m_notify, qParent);
dlg->setModal(true);
dlg->show();
if (m_progressUi != nullptr)
m_progressUi = new Dialog_progress_ui(m_progressUiCallback, m_notify, qParent);
m_progressUi->setModal(true);
m_progressUi->show();
if (!qt)
{
@ -219,10 +275,11 @@ void Manager::on_createMessageBoxUi(bool qt)
qParent = m_messageBoxUiParent;
#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();
if (m_msgBoxUi != nullptr)
m_msgBoxUi = new QMessageBox(QMessageBox::Critical, tr("Prompt"), QString::fromStdString(m_message), QMessageBox::Ok, qParent);
m_msgBoxUi->setWindowFlags(Qt::SubWindow | Qt::Popup | Qt::WindowStaysOnTopHint);
m_msgBoxUi->setModal(true);
m_msgBoxUi->show();
}
void Manager::on_createTwainSrcUi(bool qt)
@ -239,10 +296,11 @@ void Manager::on_createTwainSrcUi(bool qt)
qParent = m_TwainSrcUiparent;
#endif
Dialog_Twain_Source_Select dlg(m_dsmProc, &m_appId, qParent);
if (dlg.exec())
if (m_twainSrcUi != nullptr)
m_twainSrcUi = new Dialog_Twain_Source_Select (m_dsmProc, &m_appId, qParent);
if (m_twainSrcUi->exec())
{
dlg.GetIdentify(&m_ds);
m_twainSrcUi->GetIdentify(&m_ds);
}
if (!qt)

View File

@ -15,6 +15,12 @@ public:
Manager();
~Manager();
void closeDeviceSelectUi();
void closeSettingUi();
void closeProgressUi();
void closeMessageBoxUi();
void closeTwainSrcUi();
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);
@ -44,10 +50,12 @@ private:
HGEvent m_event;
Dialog_device_select *m_deviceSelectUi;
std::vector<DEVQUEUI> m_DeviceSelectDevs;
unsigned long m_DeviceSelectThreadId;
int m_DeviceSelectResult;
hg_settingdialog *m_settingUi;
unsigned long m_SettingUiThreadId;
SANE_Handle m_device;
HWND m_settingUiParent;
@ -56,17 +64,20 @@ private:
bool m_with_scan;
std::function<void(ui_result)> m_settingUiCallback;
Dialog_progress_ui *m_progressUi;
HWND m_progressUiparent;
unsigned long m_ProgressUiThreadId;
std::function<void (ui_result)> m_progressUiCallback;
std::function<void (int, void *, int)> *m_notify;
QMessageBox *m_msgBoxUi;
unsigned long m_MessageBoxUiThreadId;
HWND m_messageBoxUiParent;
int m_notifyEvent;
std::string m_message;
int m_flag;
Dialog_Twain_Source_Select *m_twainSrcUi;
unsigned long m_twainSrcUiThreadId;
DSMENTRYPROC m_dsmProc;
TW_IDENTITY m_appId;

View File

@ -173,3 +173,26 @@ int show_twain_srclist_ui(DSMENTRYPROC dsmProc, const TW_IDENTITY *appId, HGWind
return g_manager->showTwainSrcUi(nullptr == g_hThread, dsmProc, appId, parent, ds);
}
int close_ui(int which)
{
if (NULL == g_manager)
{
return 0;
}
if (UI_INDICATOR == which)
{
g_manager->closeProgressUi();
}
else if (UI_SETTING == which)
{
g_manager->closeSettingUi();
}
else if (UI_MSG_BOX == which)
{
g_manager->closeMessageBoxUi();
}
return 0;
}