code_app/modules/twainui/dialog_progress_ui.cpp

151 lines
4.0 KiB
C++
Raw Normal View History

#include "Manager.h"
2023-04-20 09:49:48 +00:00
#include "dialog_progress_ui.h"
#include "ui_dialog_progress_ui.h"
#include "lang/app_language.h"
2023-05-08 12:01:43 +00:00
#include "huagao/hgscanner_error.h"
#include <QKeyEvent>
2023-04-27 03:04:52 +00:00
#include <QTimer>
#include <thread>
2023-04-20 09:49:48 +00:00
extern Manager* g_manager;
static int imageRecivedCount = 0;
Dialog_progress_ui::Dialog_progress_ui(class Manager *mgr, std::function<void (ui_result)> callback, std::function<void (int, void *, int)> *notify, QWidget *parent) :
2023-04-20 09:49:48 +00:00
QDialog(parent),
ui(new Ui::Dialog_progress_ui)
2023-05-10 12:30:07 +00:00
, m_isScanning(false)
2023-04-20 09:49:48 +00:00
{
setAttribute(Qt::WA_DeleteOnClose, true);
2023-04-20 09:49:48 +00:00
ui->setupUi(this);
2023-05-19 10:41:49 +00:00
setWindowFlags(Qt::SubWindow | Qt::Popup | Qt::WindowStaysOnTopHint);
2023-04-20 09:49:48 +00:00
ui->pbtn_cancelScan->setVisible(false);
ui->pbtn_close->setVisible(false);
ui->label->setText(tr("start scanning"));
ui->label_imgRecived->setVisible(false);
ui->lineEdit_imgRecived->setVisible(false);
ui->label_totalImgRecived->setVisible(false);
ui->lineEdit_imgRecived->setText(QString::number(imageRecivedCount));
m_mgr = mgr;
2023-04-20 09:49:48 +00:00
m_callback = callback;
*notify = FuncNotify;
2023-05-10 12:30:07 +00:00
2023-04-27 03:04:52 +00:00
m_timer = new QTimer(this);
connect(this, SIGNAL(scan_status(QString,bool)), this, SLOT(on_scan_status(QString,bool)), Qt::QueuedConnection);
2023-05-24 06:40:06 +00:00
connect(this, SIGNAL(scan_finish(int, QString)), this, SLOT(on_scan_finish(int, QString)), Qt::QueuedConnection);
connect(this, SIGNAL(image_recived()), this, SLOT(on_image_recived()), Qt::QueuedConnection);
2023-04-20 09:49:48 +00:00
}
Dialog_progress_ui::~Dialog_progress_ui()
{
m_mgr->m_progressUi = nullptr;
2023-05-12 10:26:23 +00:00
imageRecivedCount = 0;
2023-04-20 09:49:48 +00:00
delete ui;
2023-05-10 12:30:07 +00:00
}
void Dialog_progress_ui::keyPressEvent(QKeyEvent *e)
{
if (e->key() == Qt::Key_Escape)
{
e->ignore();
}
}
2023-04-20 09:49:48 +00:00
void Dialog_progress_ui::on_pbtn_cancelScan_clicked()
{
2023-05-24 06:40:06 +00:00
if (!quit_)
m_callback(UI_RESULT_CLOSE_CANCEL);
ui->pbtn_cancelScan->setVisible(false);
ui->label->setText(tr("stop scanning"));
2023-04-20 09:49:48 +00:00
}
void notify_close(std::function<void (ui_result)> callback)
{
std::this_thread::sleep_for(std::chrono::milliseconds(500));
2023-05-24 06:40:06 +00:00
if (callback)
callback(UI_RESULT_CLOSE_NORMAL);
}
void Dialog_progress_ui::on_pbtn_close_clicked()
{
2023-04-27 03:04:52 +00:00
disconnect(m_timer, SIGNAL(timeout()), this, SLOT(on_pbtn_close_clicked()));
//CloseHandle(CreateThread(NULL, 0, notify_close, (void*)m_callback, 0, 0));
2023-05-24 06:40:06 +00:00
if (!quit_)
{
std::thread th_close(notify_close, m_callback);
th_close.detach();
}
// m_callback(UI_RESULT_CLOSE_NORMAL);
close();
}
2023-04-27 03:04:52 +00:00
void Dialog_progress_ui::on_scan_status(QString finishInfo, bool isScanning)
2023-04-20 09:49:48 +00:00
{
2023-05-10 12:30:07 +00:00
m_isScanning = isScanning;
ui->label_imgRecived->setVisible(isScanning);
ui->lineEdit_imgRecived->setVisible(isScanning);
2023-04-20 09:49:48 +00:00
ui->label->setText(finishInfo);
2023-04-27 03:04:52 +00:00
ui->pbtn_cancelScan->setVisible(isScanning);
ui->pbtn_close->setVisible(!isScanning);
2023-04-20 09:49:48 +00:00
}
2023-05-24 06:40:06 +00:00
void Dialog_progress_ui::on_scan_finish(int flag, QString finishInfo)
{
2023-05-24 06:40:06 +00:00
on_scan_status(finishInfo, false);
ui->label_totalImgRecived->setVisible(true);
ui->label_totalImgRecived->setText(tr("Total scanned images: %1").arg(QString::number(imageRecivedCount)));
2023-05-08 14:27:56 +00:00
if (SCANNER_ERR_OK == flag || SCANNER_ERR_USER_CANCELED == flag)
2023-05-08 12:01:43 +00:00
{
m_timer->start(1000);
2023-05-08 12:01:43 +00:00
connect(m_timer, SIGNAL(timeout()), this, SLOT(on_pbtn_close_clicked()), Qt::QueuedConnection);
}
}
void Dialog_progress_ui::on_image_recived()
{
2023-05-29 10:45:15 +00:00
ui->lineEdit_imgRecived->setText(QString::number(++imageRecivedCount));
}
2023-04-20 09:49:48 +00:00
void Dialog_progress_ui::FuncNotify(int event, void *msg, int flag)
{
Dialog_progress_ui *p = (Dialog_progress_ui *)g_manager->m_progressUi;
2023-05-10 12:30:07 +00:00
if (nullptr == p)
{
return;
}
2023-04-20 09:49:48 +00:00
switch (event)
{
case SANE_EVENT_WORKING:
{
QString finishInfo((char*)msg);
2023-04-27 03:04:52 +00:00
emit p->scan_status(finishInfo, true);
}
break;
2023-04-20 09:49:48 +00:00
case SANE_EVENT_SCAN_FINISHED:
{
QString finishInfo((char*)msg);
2023-05-24 06:40:06 +00:00
emit p->scan_finish(flag, finishInfo);
}
break;
case SANE_EVENT_IMAGE_OK:
{
emit p->image_recived();
}
break;
2023-04-20 09:49:48 +00:00
}
}