解决三方扫描时不关闭设置界面,禁用界面的使用
This commit is contained in:
parent
f4d01ab5a8
commit
bc80b1ea74
|
@ -15,7 +15,8 @@ extern Manager* g_manager;
|
||||||
Manager::Manager()
|
Manager::Manager()
|
||||||
: QObject(nullptr)
|
: QObject(nullptr)
|
||||||
, m_progressUiCallback(std::function<void(ui_result)>())
|
, m_progressUiCallback(std::function<void(ui_result)>())
|
||||||
, m_notify(nullptr)
|
, m_progNotify(nullptr)
|
||||||
|
, m_settingNotify(nullptr)
|
||||||
, m_settingUiCallback(std::function<void(ui_result)>())
|
, m_settingUiCallback(std::function<void(ui_result)>())
|
||||||
, m_settingUi(nullptr)
|
, m_settingUi(nullptr)
|
||||||
, m_progressUi(nullptr)
|
, m_progressUi(nullptr)
|
||||||
|
@ -72,7 +73,7 @@ int Manager::showDeviceSelect(const std::vector<DEVQUEUI>& devs)
|
||||||
return m_DeviceSelectResult;
|
return m_DeviceSelectResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
int Manager::showSettingUi(SANE_Handle device, HWND parent, LPSANEAPI api, const char * devName, gb::scanner_cfg* cfg, bool with_scan, std::function<void (ui_result)> callback)
|
int Manager::showSettingUi(SANE_Handle device, HWND parent, LPSANEAPI api, const char * devName, gb::scanner_cfg* cfg, bool with_scan, std::function<void (ui_result)> callback, std::function<void(int, void*, int)>* notify)
|
||||||
{
|
{
|
||||||
// param
|
// param
|
||||||
m_device = device;
|
m_device = device;
|
||||||
|
@ -82,6 +83,7 @@ int Manager::showSettingUi(SANE_Handle device, HWND parent, LPSANEAPI api, const
|
||||||
m_devName = devName;
|
m_devName = devName;
|
||||||
m_with_scan = with_scan;
|
m_with_scan = with_scan;
|
||||||
m_settingUiCallback = callback;
|
m_settingUiCallback = callback;
|
||||||
|
m_settingNotify = notify;
|
||||||
|
|
||||||
void *hStopEvent = nullptr;
|
void *hStopEvent = nullptr;
|
||||||
#ifdef HG_CMP_MSC
|
#ifdef HG_CMP_MSC
|
||||||
|
@ -93,6 +95,15 @@ int Manager::showSettingUi(SANE_Handle device, HWND parent, LPSANEAPI api, const
|
||||||
|
|
||||||
emit createSettingUi(hStopEvent);
|
emit createSettingUi(hStopEvent);
|
||||||
HGBase_WriteInfo(HGBASE_INFOTYPE_DESC, "[Manager::showSettingUi] emit createSettingUi(ThreadId)");
|
HGBase_WriteInfo(HGBASE_INFOTYPE_DESC, "[Manager::showSettingUi] emit createSettingUi(ThreadId)");
|
||||||
|
|
||||||
|
#ifdef HG_CMP_MSC
|
||||||
|
if (nullptr != hStopEvent)
|
||||||
|
{
|
||||||
|
msgLoop(hStopEvent);
|
||||||
|
CloseHandle(hStopEvent);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -101,7 +112,7 @@ int Manager::showProgressUi(HWND parent, std::function<void (ui_result)> callbac
|
||||||
// param
|
// param
|
||||||
m_progressUiparent = (HGWindow)parent;
|
m_progressUiparent = (HGWindow)parent;
|
||||||
m_progressUiCallback = callback;
|
m_progressUiCallback = callback;
|
||||||
m_notify = notify;
|
m_progNotify = notify;
|
||||||
|
|
||||||
void *hStopEvent = nullptr;
|
void *hStopEvent = nullptr;
|
||||||
#ifdef HG_CMP_MSC
|
#ifdef HG_CMP_MSC
|
||||||
|
@ -324,7 +335,8 @@ void Manager::clear_functions(void)
|
||||||
{
|
{
|
||||||
m_settingUiCallback = std::function<void(ui_result)>();
|
m_settingUiCallback = std::function<void(ui_result)>();
|
||||||
m_progressUiCallback = std::function<void(ui_result)>();
|
m_progressUiCallback = std::function<void(ui_result)>();
|
||||||
m_notify = nullptr;
|
m_progNotify = nullptr;
|
||||||
|
m_settingNotify = nullptr;
|
||||||
if (m_progressUi)
|
if (m_progressUi)
|
||||||
m_progressUi->clear_callback();
|
m_progressUi->clear_callback();
|
||||||
if (m_settingUi)
|
if (m_settingUi)
|
||||||
|
@ -418,11 +430,17 @@ void Manager::on_createSettingUi(void *hEvent)
|
||||||
|
|
||||||
if (m_settingUi != nullptr)
|
if (m_settingUi != nullptr)
|
||||||
delete m_settingUi;
|
delete m_settingUi;
|
||||||
m_settingUi = new hg_settingdialog(this, m_device, &m_api, m_with_scan, m_devName.c_str(), scanner_cfg_, close_prog, qParent);
|
m_settingUi = new hg_settingdialog(this, m_device, &m_api, m_with_scan, m_devName.c_str(), scanner_cfg_, close_prog, m_settingNotify, qParent);
|
||||||
m_settingUi->setModal(true);
|
m_settingUi->setModal(true);
|
||||||
m_settingUi->show();
|
m_settingUi->show();
|
||||||
|
|
||||||
HGBase_WriteInfo(HGBASE_INFOTYPE_DESC, "[Manager::on_createSettingUi] m_settingUi->show()");
|
HGBase_WriteInfo(HGBASE_INFOTYPE_DESC, "[Manager::on_createSettingUi] m_settingUi->show()");
|
||||||
|
|
||||||
|
#ifdef HG_CMP_MSC
|
||||||
|
if (nullptr != hEvent)
|
||||||
|
{
|
||||||
|
SetEvent((HANDLE)hEvent);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void Manager::on_createProgressUi(void *hEvent)
|
void Manager::on_createProgressUi(void *hEvent)
|
||||||
|
@ -453,7 +471,7 @@ void Manager::on_createProgressUi(void *hEvent)
|
||||||
};
|
};
|
||||||
if (m_progressUi != nullptr)
|
if (m_progressUi != nullptr)
|
||||||
delete m_progressUi;
|
delete m_progressUi;
|
||||||
m_progressUi = new Dialog_progress_ui(this, close_prog, m_notify, qParent);
|
m_progressUi = new Dialog_progress_ui(this, close_prog, m_progNotify, qParent);
|
||||||
m_progressUi->setModal(true);
|
m_progressUi->setModal(true);
|
||||||
m_progressUi->show();
|
m_progressUi->show();
|
||||||
HGBase_WriteInfo(HGBASE_INFOTYPE_DESC, "[Manager::on_createProgressUi] m_progressUi->show()");
|
HGBase_WriteInfo(HGBASE_INFOTYPE_DESC, "[Manager::on_createProgressUi] m_progressUi->show()");
|
||||||
|
|
|
@ -18,7 +18,7 @@ public:
|
||||||
~Manager();
|
~Manager();
|
||||||
|
|
||||||
int showDeviceSelect(const std::vector<DEVQUEUI>& devs);
|
int showDeviceSelect(const std::vector<DEVQUEUI>& devs);
|
||||||
int showSettingUi(SANE_Handle device, HWND settingUiParent, LPSANEAPI api, const char * devName, gb::scanner_cfg* cfg, bool with_scan, std::function<void(ui_result)> callback);
|
int showSettingUi(SANE_Handle device, HWND settingUiParent, LPSANEAPI api, const char * devName, gb::scanner_cfg* cfg, bool with_scan, std::function<void(ui_result)> callback, std::function<void(int, void*, int)>* notify);
|
||||||
int showProgressUi(HWND parent, std::function<void (ui_result)> callback, std::function<void (int, void *, int)> *notify);
|
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 showMessageBoxUi(HWND parent, int event, void *msg, int flag);
|
||||||
int showTwainSrcUi(const TW_IDENTITY *vds, HGUInt count, const char* defDevName, HGWindow parent, TW_IDENTITY *ds);
|
int showTwainSrcUi(const TW_IDENTITY *vds, HGUInt count, const char* defDevName, HGWindow parent, TW_IDENTITY *ds);
|
||||||
|
@ -79,11 +79,12 @@ public:
|
||||||
bool m_with_scan;
|
bool m_with_scan;
|
||||||
gb::scanner_cfg* scanner_cfg_;
|
gb::scanner_cfg* scanner_cfg_;
|
||||||
std::function<void(ui_result)> m_settingUiCallback;
|
std::function<void(ui_result)> m_settingUiCallback;
|
||||||
|
std::function<void(int, void*, int)>* m_settingNotify;
|
||||||
|
|
||||||
Dialog_progress_ui *m_progressUi;
|
Dialog_progress_ui *m_progressUi;
|
||||||
HGWindow m_progressUiparent;
|
HGWindow m_progressUiparent;
|
||||||
std::function<void (ui_result)> m_progressUiCallback;
|
std::function<void (ui_result)> m_progressUiCallback;
|
||||||
std::function<void (int, void *, int)> *m_notify;
|
std::function<void (int, void *, int)> * m_progNotify;
|
||||||
|
|
||||||
HGWindow m_messageBoxUiParent;
|
HGWindow m_messageBoxUiParent;
|
||||||
int m_notifyEvent;
|
int m_notifyEvent;
|
||||||
|
|
|
@ -21,8 +21,10 @@
|
||||||
std::string hg_settingdialog::property_combox_data_type_ = "combox_value_type";
|
std::string hg_settingdialog::property_combox_data_type_ = "combox_value_type";
|
||||||
static int m_customCutAreaUnit = 0;
|
static int m_customCutAreaUnit = 0;
|
||||||
|
|
||||||
|
extern Manager* g_manager;
|
||||||
|
|
||||||
hg_settingdialog::hg_settingdialog(class Manager *mgr, SANE_Handle handle, const SANEAPI* saneApi, bool showScan, const char* devName, gb::scanner_cfg* cfg,
|
hg_settingdialog::hg_settingdialog(class Manager *mgr, SANE_Handle handle, const SANEAPI* saneApi, bool showScan, const char* devName, gb::scanner_cfg* cfg,
|
||||||
std::function<void(ui_result)> callback, QWidget *parent)
|
std::function<void(ui_result)> callback, std::function<void(int, void*, int)>* notify, QWidget *parent)
|
||||||
: QDialog(parent)
|
: QDialog(parent)
|
||||||
, save_(false)
|
, save_(false)
|
||||||
, btn_cut_area_(nullptr), btn_gamma_(nullptr), clicked_gamma_(false)
|
, btn_cut_area_(nullptr), btn_gamma_(nullptr), clicked_gamma_(false)
|
||||||
|
@ -35,6 +37,7 @@ hg_settingdialog::hg_settingdialog(class Manager *mgr, SANE_Handle handle, const
|
||||||
, changed_count_(0)
|
, changed_count_(0)
|
||||||
, cur_cfg_(cfg)
|
, cur_cfg_(cfg)
|
||||||
, m_isMultiOutMode(false)
|
, m_isMultiOutMode(false)
|
||||||
|
, m_isScanning(false)
|
||||||
{
|
{
|
||||||
m_mgr = mgr;
|
m_mgr = mgr;
|
||||||
|
|
||||||
|
@ -80,6 +83,10 @@ hg_settingdialog::hg_settingdialog(class Manager *mgr, SANE_Handle handle, const
|
||||||
m_originGammaData = m_gammaData;
|
m_originGammaData = m_gammaData;
|
||||||
|
|
||||||
connect(comb_, SIGNAL(currentTextChanged(const QString)), this, SLOT(on_current_scheme_changed()));
|
connect(comb_, SIGNAL(currentTextChanged(const QString)), this, SLOT(on_current_scheme_changed()));
|
||||||
|
connect(this, SIGNAL(scan_start()),this, SLOT(on_scan_start()), Qt::QueuedConnection);
|
||||||
|
connect(this, SIGNAL(scan_finish()), this, SLOT(on_scan_finish()), Qt::QueuedConnection);
|
||||||
|
|
||||||
|
*notify = FuncNotify;
|
||||||
}
|
}
|
||||||
|
|
||||||
hg_settingdialog::~hg_settingdialog()
|
hg_settingdialog::~hg_settingdialog()
|
||||||
|
@ -172,6 +179,30 @@ void hg_settingdialog::apply_scheme(SANE_Handle dev, LPSANEAPI api, gb::sane_con
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void hg_settingdialog::FuncNotify(int event, void* msg, int flag)
|
||||||
|
{
|
||||||
|
hg_settingdialog* p = (hg_settingdialog*)g_manager->m_settingUi;
|
||||||
|
if (nullptr == p)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (event)
|
||||||
|
{
|
||||||
|
case SANE_EVENT_WORKING:
|
||||||
|
{
|
||||||
|
emit p->scan_start();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SANE_EVENT_SCAN_FINISHED:
|
||||||
|
{
|
||||||
|
emit p->scan_finish();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void hg_settingdialog::initUi()
|
void hg_settingdialog::initUi()
|
||||||
{
|
{
|
||||||
update_opt_value_from_driver();
|
update_opt_value_from_driver();
|
||||||
|
@ -1169,6 +1200,20 @@ void hg_settingdialog::updateUIStatus()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void hg_settingdialog::on_scan_start()
|
||||||
|
{
|
||||||
|
m_isScanning = true;
|
||||||
|
this->setEnabled(false);
|
||||||
|
setAttribute(Qt::WA_DeleteOnClose, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
void hg_settingdialog::on_scan_finish()
|
||||||
|
{
|
||||||
|
m_isScanning = false;
|
||||||
|
this->setEnabled(true);
|
||||||
|
setAttribute(Qt::WA_DeleteOnClose, true);
|
||||||
|
}
|
||||||
|
|
||||||
void hg_settingdialog::slot_checkedClicked()
|
void hg_settingdialog::slot_checkedClicked()
|
||||||
{
|
{
|
||||||
QCheckBox *checkBox = qobject_cast<QCheckBox*>(sender());
|
QCheckBox *checkBox = qobject_cast<QCheckBox*>(sender());
|
||||||
|
@ -2053,6 +2098,13 @@ void hg_settingdialog::closeEvent(QCloseEvent* e)
|
||||||
// 3、点击确定按钮后,如果当前方案非用户模板,则保存进默认配置;如果为用户模板,则更新当前方案索引
|
// 3、点击确定按钮后,如果当前方案非用户模板,则保存进默认配置;如果为用户模板,则更新当前方案索引
|
||||||
// 4、点出取消按钮,恢复驱动值至该对话框初始化状态,不对配置作变更
|
// 4、点出取消按钮,恢复驱动值至该对话框初始化状态,不对配置作变更
|
||||||
//
|
//
|
||||||
|
|
||||||
|
if (m_isScanning)
|
||||||
|
{
|
||||||
|
e->ignore();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
int index = comb_->currentIndex();
|
int index = comb_->currentIndex();
|
||||||
if (m_closeButton == closeButtonOk)
|
if (m_closeButton == closeButtonOk)
|
||||||
{
|
{
|
||||||
|
|
|
@ -51,10 +51,11 @@ class hg_settingdialog : public QDialog
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit hg_settingdialog(class Manager *mgr, SANE_Handle handle, const SANEAPI* saneApi, bool showScan, const char* devName, gb::scanner_cfg* cfg,
|
explicit hg_settingdialog(class Manager *mgr, SANE_Handle handle, const SANEAPI* saneApi, bool showScan, const char* devName, gb::scanner_cfg* cfg,
|
||||||
std::function<void(ui_result)> callback, QWidget *parent = nullptr);
|
std::function<void(ui_result)> callback, std::function<void(int, void*, int)>* notify, QWidget *parent = nullptr);
|
||||||
~hg_settingdialog();
|
~hg_settingdialog();
|
||||||
|
|
||||||
static void apply_scheme(SANE_Handle dev, LPSANEAPI api, gb::sane_config_schm* schm);
|
static void apply_scheme(SANE_Handle dev, LPSANEAPI api, gb::sane_config_schm* schm);
|
||||||
|
static void FuncNotify(int event, void* msg, int flag);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void initUi();
|
void initUi();
|
||||||
|
@ -135,6 +136,14 @@ private:
|
||||||
QVector<std::string> m_list_deviceNames;
|
QVector<std::string> m_list_deviceNames;
|
||||||
QVector<QWidget*> m_list_widgets;
|
QVector<QWidget*> m_list_widgets;
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void scan_start();
|
||||||
|
void scan_finish();
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void on_scan_start();
|
||||||
|
void on_scan_finish();
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void slot_checkedClicked();
|
void slot_checkedClicked();
|
||||||
void slot_sliderClicked(int value);
|
void slot_sliderClicked(int value);
|
||||||
|
@ -179,6 +188,7 @@ private:
|
||||||
|
|
||||||
bool m_isRefreshUi;
|
bool m_isRefreshUi;
|
||||||
bool m_isMultiOutMode;
|
bool m_isMultiOutMode;
|
||||||
|
bool m_isScanning;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // HG_SETTING_DIALOG_H
|
#endif // HG_SETTING_DIALOG_H
|
||||||
|
|
|
@ -193,11 +193,11 @@ void twain_ui_free(void *buf)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int show_setting_ui(SANE_Handle device, HWND parent, LPSANEAPI api, const char *devName, bool with_scan, std::function<void(ui_result)> callback)
|
int show_setting_ui(SANE_Handle device, HWND parent, LPSANEAPI api, const char *devName, bool with_scan, std::function<void(ui_result)> callback, std::function<void(int, void*, int)> *notify)
|
||||||
{
|
{
|
||||||
Init();
|
Init();
|
||||||
|
|
||||||
return g_manager->showSettingUi(device, parent, api, devName, scanner_cfg_, with_scan, callback);
|
return g_manager->showSettingUi(device, parent, api, devName, scanner_cfg_, with_scan, callback, notify);
|
||||||
}
|
}
|
||||||
|
|
||||||
int show_progress_ui(HWND parent, std::function<void (ui_result)> callback, std::function<void (int, void *, int)> *notify)
|
int show_progress_ui(HWND parent, std::function<void (ui_result)> callback, std::function<void (int, void *, int)> *notify)
|
||||||
|
|
|
@ -77,7 +77,7 @@ enum ui_result
|
||||||
//
|
//
|
||||||
// 返回: ui_result 类型, UI_RESULT_FAILED or UI_RESULT_OK
|
// 返回: ui_result 类型, UI_RESULT_FAILED or UI_RESULT_OK
|
||||||
//int show_setting_ui(SANE_Handle device, HWND parent, LPSANEAPI api, const char *devName, bool with_scan/*是否显示“扫描”按钮*/);
|
//int show_setting_ui(SANE_Handle device, HWND parent, LPSANEAPI api, const char *devName, bool with_scan/*是否显示“扫描”按钮*/);
|
||||||
HGEXPORT int show_setting_ui(SANE_Handle device,HWND parent, LPSANEAPI api, const char *devName, bool with_scan/*是否显示“扫描”按钮*/,std::function<void(ui_result)> callback);
|
HGEXPORT int show_setting_ui(SANE_Handle device, HWND parent, LPSANEAPI api, const char* devName, bool with_scan, std::function<void(ui_result)> callback, std::function<void(int, void*, int)>* notify);
|
||||||
|
|
||||||
// 功能: 显示扫描进度界面,非模态
|
// 功能: 显示扫描进度界面,非模态
|
||||||
//
|
//
|
||||||
|
|
Loading…
Reference in New Issue