解决三方扫描时不关闭设置界面,禁用界面的使用
This commit is contained in:
parent
f4d01ab5a8
commit
bc80b1ea74
|
@ -15,7 +15,8 @@ extern Manager* g_manager;
|
|||
Manager::Manager()
|
||||
: QObject(nullptr)
|
||||
, m_progressUiCallback(std::function<void(ui_result)>())
|
||||
, m_notify(nullptr)
|
||||
, m_progNotify(nullptr)
|
||||
, m_settingNotify(nullptr)
|
||||
, m_settingUiCallback(std::function<void(ui_result)>())
|
||||
, m_settingUi(nullptr)
|
||||
, m_progressUi(nullptr)
|
||||
|
@ -72,7 +73,7 @@ int Manager::showDeviceSelect(const std::vector<DEVQUEUI>& devs)
|
|||
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
|
||||
m_device = device;
|
||||
|
@ -82,6 +83,7 @@ int Manager::showSettingUi(SANE_Handle device, HWND parent, LPSANEAPI api, const
|
|||
m_devName = devName;
|
||||
m_with_scan = with_scan;
|
||||
m_settingUiCallback = callback;
|
||||
m_settingNotify = notify;
|
||||
|
||||
void *hStopEvent = nullptr;
|
||||
#ifdef HG_CMP_MSC
|
||||
|
@ -93,6 +95,15 @@ int Manager::showSettingUi(SANE_Handle device, HWND parent, LPSANEAPI api, const
|
|||
|
||||
emit createSettingUi(hStopEvent);
|
||||
HGBase_WriteInfo(HGBASE_INFOTYPE_DESC, "[Manager::showSettingUi] emit createSettingUi(ThreadId)");
|
||||
|
||||
#ifdef HG_CMP_MSC
|
||||
if (nullptr != hStopEvent)
|
||||
{
|
||||
msgLoop(hStopEvent);
|
||||
CloseHandle(hStopEvent);
|
||||
}
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -101,7 +112,7 @@ int Manager::showProgressUi(HWND parent, std::function<void (ui_result)> callbac
|
|||
// param
|
||||
m_progressUiparent = (HGWindow)parent;
|
||||
m_progressUiCallback = callback;
|
||||
m_notify = notify;
|
||||
m_progNotify = notify;
|
||||
|
||||
void *hStopEvent = nullptr;
|
||||
#ifdef HG_CMP_MSC
|
||||
|
@ -324,7 +335,8 @@ void Manager::clear_functions(void)
|
|||
{
|
||||
m_settingUiCallback = std::function<void(ui_result)>();
|
||||
m_progressUiCallback = std::function<void(ui_result)>();
|
||||
m_notify = nullptr;
|
||||
m_progNotify = nullptr;
|
||||
m_settingNotify = nullptr;
|
||||
if (m_progressUi)
|
||||
m_progressUi->clear_callback();
|
||||
if (m_settingUi)
|
||||
|
@ -418,11 +430,17 @@ void Manager::on_createSettingUi(void *hEvent)
|
|||
|
||||
if (m_settingUi != nullptr)
|
||||
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->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)
|
||||
|
@ -453,7 +471,7 @@ void Manager::on_createProgressUi(void *hEvent)
|
|||
};
|
||||
if (m_progressUi != nullptr)
|
||||
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->show();
|
||||
HGBase_WriteInfo(HGBASE_INFOTYPE_DESC, "[Manager::on_createProgressUi] m_progressUi->show()");
|
||||
|
|
|
@ -18,7 +18,7 @@ public:
|
|||
~Manager();
|
||||
|
||||
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 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);
|
||||
|
@ -79,11 +79,12 @@ public:
|
|||
bool m_with_scan;
|
||||
gb::scanner_cfg* scanner_cfg_;
|
||||
std::function<void(ui_result)> m_settingUiCallback;
|
||||
std::function<void(int, void*, int)>* m_settingNotify;
|
||||
|
||||
Dialog_progress_ui *m_progressUi;
|
||||
HGWindow m_progressUiparent;
|
||||
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;
|
||||
int m_notifyEvent;
|
||||
|
|
|
@ -21,8 +21,10 @@
|
|||
std::string hg_settingdialog::property_combox_data_type_ = "combox_value_type";
|
||||
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,
|
||||
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)
|
||||
, save_(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)
|
||||
, cur_cfg_(cfg)
|
||||
, m_isMultiOutMode(false)
|
||||
, m_isScanning(false)
|
||||
{
|
||||
m_mgr = mgr;
|
||||
|
||||
|
@ -80,6 +83,10 @@ hg_settingdialog::hg_settingdialog(class Manager *mgr, SANE_Handle handle, const
|
|||
m_originGammaData = m_gammaData;
|
||||
|
||||
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()
|
||||
|
@ -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()
|
||||
{
|
||||
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()
|
||||
{
|
||||
QCheckBox *checkBox = qobject_cast<QCheckBox*>(sender());
|
||||
|
@ -2053,6 +2098,13 @@ void hg_settingdialog::closeEvent(QCloseEvent* e)
|
|||
// 3、点击确定按钮后,如果当前方案非用户模板,则保存进默认配置;如果为用户模板,则更新当前方案索引
|
||||
// 4、点出取消按钮,恢复驱动值至该对话框初始化状态,不对配置作变更
|
||||
//
|
||||
|
||||
if (m_isScanning)
|
||||
{
|
||||
e->ignore();
|
||||
return;
|
||||
}
|
||||
|
||||
int index = comb_->currentIndex();
|
||||
if (m_closeButton == closeButtonOk)
|
||||
{
|
||||
|
|
|
@ -51,10 +51,11 @@ class hg_settingdialog : public QDialog
|
|||
|
||||
public:
|
||||
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();
|
||||
|
||||
static void apply_scheme(SANE_Handle dev, LPSANEAPI api, gb::sane_config_schm* schm);
|
||||
static void FuncNotify(int event, void* msg, int flag);
|
||||
|
||||
public:
|
||||
void initUi();
|
||||
|
@ -135,6 +136,14 @@ private:
|
|||
QVector<std::string> m_list_deviceNames;
|
||||
QVector<QWidget*> m_list_widgets;
|
||||
|
||||
signals:
|
||||
void scan_start();
|
||||
void scan_finish();
|
||||
|
||||
private slots:
|
||||
void on_scan_start();
|
||||
void on_scan_finish();
|
||||
|
||||
private slots:
|
||||
void slot_checkedClicked();
|
||||
void slot_sliderClicked(int value);
|
||||
|
@ -179,6 +188,7 @@ private:
|
|||
|
||||
bool m_isRefreshUi;
|
||||
bool m_isMultiOutMode;
|
||||
bool m_isScanning;
|
||||
};
|
||||
|
||||
#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();
|
||||
|
||||
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)
|
||||
|
|
|
@ -77,7 +77,7 @@ enum ui_result
|
|||
//
|
||||
// 返回: 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/*是否显示“扫描”按钮*/);
|
||||
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