#include "dialog_log.h" #include "ui_dialog_log.h" #include #include "app_cfg.h" dialog_log::dialog_log(QWidget *parent) : QDialog(parent) , ui(new Ui::dialog_log), ind_scanning_(-1), img_received_(0), msg_fixed_scanning_("") { ui->setupUi(this); QHBoxLayout *bottom = new QHBoxLayout(); pbtn_clear = new QPushButton(this); cBox_autoScroll = new QCheckBox(this); pbtn_stop = new QPushButton(this); pbtn_export = new QPushButton(this); pbtn_continueScan = new QPushButton(this); pbtn_finishScan = new QPushButton(this); pbtn_stop->setVisible(false); pbtn_continueScan->setVisible(false); pbtn_finishScan->setVisible(false); pbtn_stop->setText(tr("cancel scan")); cBox_autoScroll->setText(tr("auto scroll")); pbtn_clear->setText(tr("clear")); pbtn_export->setText(tr("export images")); pbtn_continueScan->setText(tr("continue scan")); pbtn_finishScan->setText(tr("finish scan")); bottom->addWidget(pbtn_clear); bottom->addWidget(cBox_autoScroll); bottom->addStretch(); bottom->addWidget(pbtn_stop); bottom->addWidget(pbtn_export); bottom->addWidget(pbtn_continueScan); bottom->addWidget(pbtn_finishScan); ui->verticalLayout->addItem(bottom); cBox_autoScroll->setChecked(getCfgValue("log", "autoScroll", true)); connect(cBox_autoScroll, SIGNAL(stateChanged(int)), this, SLOT(on_cbox_autoScroll_stateChanged(int))); connect(pbtn_stop, SIGNAL(clicked(bool)), this, SLOT(on_pbtn_stop_clicked())); connect(pbtn_clear, SIGNAL(clicked(bool)), this, SLOT(on_pbtn_clear_clicked())); connect(pbtn_export, SIGNAL(clicked(bool)), this, SLOT(on_pbtn_export_clicked())); connect(pbtn_continueScan, SIGNAL(clicked(bool)), this, SLOT(on_pbtn_continuScan_cliked())); connect(pbtn_finishScan, SIGNAL(clicked(bool)), this, SLOT(on_pbtn_finishScan_cliked())); } dialog_log::~dialog_log() { delete ui; } void dialog_log::addLog(const QString &log, bool err, int log_event) { if (ui->listWidget->count() > 1000) { for(int i = 0; i < 100; ++i) { QListWidgetItem *item = ui->listWidget->takeItem(0); delete item; } } QDateTime timeCurrent = QDateTime::currentDateTime(); QString time = timeCurrent.toString("[yy-MM-dd hh:mm:ss]"); ui->listWidget->addItem(time + " " + log); int idx = ui->listWidget->count() - 1; if(log_event == LOG_EVENT_SCAN_BEGINNING) { msg_fixed_scanning_ = (time + " " + log).toStdString(); ind_scanning_ = idx; img_received_ = 0; } else if(log_event == LOG_EVENT_SCAN_STOPPED) { char utf8[128] = {0}; sprintf(utf8, tr("(epicycle scanning images %u picture)").toStdString().c_str(), img_received_); if(ind_scanning_ >= 0 && ind_scanning_ < idx) ui->listWidget->item(ind_scanning_)->setText(QString::fromStdString(msg_fixed_scanning_)); if (idx >= 0) ui->listWidget->item(idx)->setText(time + " " + log + QString::fromStdString(utf8)); ind_scanning_ = -1; msg_fixed_scanning_ = ""; } if (idx >= 0) ui->listWidget->item(idx)->setTextColor(err ? Qt::red : Qt::black); if (cBox_autoScroll->isChecked()) { ui->listWidget->scrollToItem(ui->listWidget->item(idx)); } } void dialog_log::updateStatus(bool online, bool isScanning) { if (!online) { pbtn_stop->hide(); pbtn_export->hide(); pbtn_continueScan->hide(); pbtn_finishScan->hide(); } else { if (isScanning) { pbtn_stop->show(); pbtn_export->hide(); pbtn_continueScan->hide(); pbtn_finishScan->hide(); } else { pbtn_stop->hide(); if(img_received_) pbtn_export->show(); pbtn_continueScan->show(); pbtn_finishScan->show(); } } } void dialog_log::image_received_from_scanner(void) { img_received_++; if(ind_scanning_ >= 0 && ind_scanning_ < ui->listWidget->count()) { char count[20]; sprintf(count, "(%d)", img_received_); ui->listWidget->item(ind_scanning_)->setText(QString::fromStdString(msg_fixed_scanning_ + count)); } } void dialog_log::closeEvent(QCloseEvent *event) { (void)event; on_pbtn_stop_clicked(); } void dialog_log::on_pbtn_export_clicked() { emit exportScanned(); } void dialog_log::on_pbtn_continuScan_cliked() { img_received_ = 0; emit continueScan(); } void dialog_log::on_pbtn_finishScan_cliked() { close(); } void dialog_log::on_cbox_autoScroll_stateChanged(int state) { (void)state; saveCfgValue("log", "autoScroll", cBox_autoScroll->isChecked()); } void dialog_log::on_pbtn_stop_clicked(void) { emit stopScan(); } void dialog_log::on_pbtn_clear_clicked() { ui->listWidget->clear(); ind_scanning_ = -1; }