#include "dialog_progress_ui.h" #include "ui_dialog_progress_ui.h" #include "lang/app_language.h" #include "huagao/hgscanner_error.h" #include #include Dialog_progress_ui *Dialog_progress_ui::m_param = nullptr; Dialog_progress_ui::Dialog_progress_ui(std::function callback, std::function *notify, QWidget *parent) : QDialog(parent), ui(new Ui::Dialog_progress_ui) { int cp = lang_get_cur_code_page(); if (20127 == cp) m_translator.load(":translation/TwainUI_zh_EN.qm"); else m_translator.load(":translation/TwainUI_zh_CN.qm"); QCoreApplication::installTranslator(&m_translator); setAttribute(Qt::WA_DeleteOnClose, true); ui->setupUi(this); setWindowFlags(Qt::Dialog | Qt::WindowCloseButtonHint); ui->pbtn_cancelScan->setVisible(false); ui->pbtn_close->setVisible(false); m_callback = callback; *notify = FuncNotify; m_param = this; m_timer = new QTimer(this); connect(this, SIGNAL(scan_status(QString,bool)), this, SLOT(on_scan_status(QString,bool)), Qt::QueuedConnection); connect(this, SIGNAL(scan_finish()), this, SLOT(on_scan_finish()), Qt::QueuedConnection); } Dialog_progress_ui::~Dialog_progress_ui() { delete ui; QCoreApplication::removeTranslator(&m_translator); } void Dialog_progress_ui::on_pbtn_cancelScan_clicked() { m_callback(UI_RESULT_CLOSE_CANCEL); } void Dialog_progress_ui::on_pbtn_close_clicked() { disconnect(m_timer, SIGNAL(timeout()), this, SLOT(on_pbtn_close_clicked())); m_callback(UI_RESULT_CLOSE_NORMAL); close(); } void Dialog_progress_ui::on_scan_status(QString finishInfo, bool isScanning) { ui->label->setText(finishInfo); ui->pbtn_cancelScan->setVisible(isScanning); ui->pbtn_close->setVisible(!isScanning); } void Dialog_progress_ui::on_scan_finish(int flag) { if (SCANNER_ERR_OK == flag) { m_timer->start(2000); connect(m_timer, SIGNAL(timeout()), this, SLOT(on_pbtn_close_clicked()), Qt::QueuedConnection); } else if (SCANNER_ERR_USER_CANCELED == flag) { close(); } } void Dialog_progress_ui::FuncNotify(int event, void *msg, int flag) { Dialog_progress_ui *p = (Dialog_progress_ui *)m_param; switch (event) { case SANE_EVENT_WORKING: { QString finishInfo((char*)msg); emit p->scan_status(finishInfo, true); } break; case SANE_EVENT_SCAN_FINISHED: { emit p->scan_finish(flag); QString finishInfo((char*)msg); emit p->scan_status(finishInfo, false); } break; } }