code_app/app/scanner/dialog_log.cpp

165 lines
4.5 KiB
C++

#include "dialog_log.h"
#include "ui_dialog_log.h"
#include <QDateTime>
#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_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_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_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_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, "\357\274\210\346\234\254\350\275\256\345\205\261\346\211\253\346\217\217\345\233\276\347\211\207 %u \345\271\205\357\274\211", 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_continueScan->hide();
pbtn_finishScan->hide();
}
else
{
if (isScanning)
{
pbtn_stop->show();
pbtn_continueScan->hide();
pbtn_finishScan->hide();
}
else
{
pbtn_stop->hide();
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_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;
}