1 #include <QApplication>
2 #include <QScrollBar>
3 #include <QString>
4 #include <QFont>
5
6 #include "checksumscannerlog.h"
7 #include "settings.h"
8 #include "macros.h"
9
10 extern Settings *qmc2Config;
11
CheckSumScannerLog(QString settingsKey,QWidget * parent)12 CheckSumScannerLog::CheckSumScannerLog(QString settingsKey, QWidget *parent)
13 #if defined(QMC2_OS_WIN)
14 : QDialog(parent, Qt::Dialog)
15 #else
16 : QDialog(parent, Qt::Dialog | Qt::SubWindow)
17 #endif
18 {
19 hide();
20 m_progress = -1;
21 m_settingsKey = settingsKey;
22 setupUi(this);
23 QFont logFont;
24 logFont.fromString(qmc2Config->value(QMC2_FRONTEND_PREFIX + "GUI/LogFont").toString());
25 plainTextEditLog->setFont(logFont);
26 spinBoxMaxLogSize->setValue(qmc2Config->value(QMC2_FRONTEND_PREFIX + m_settingsKey + "/MaxLogSize", 10000).toInt());
27 checkBoxEnableLog->setChecked(qmc2Config->value(QMC2_FRONTEND_PREFIX + m_settingsKey + "/EnableLog", true).toBool());
28 }
29
on_spinBoxMaxLogSize_valueChanged(int value)30 void CheckSumScannerLog::on_spinBoxMaxLogSize_valueChanged(int value)
31 {
32 qmc2Config->setValue(QMC2_FRONTEND_PREFIX + m_settingsKey + "/MaxLogSize", value);
33 plainTextEditLog->setMaximumBlockCount(value);
34 }
35
log(const QString & message)36 void CheckSumScannerLog::log(const QString &message)
37 {
38 if ( checkBoxEnableLog->isChecked() ) {
39 m_messageQueue << message;
40 if ( m_logSyncMutex->tryLock(10) ) {
41 plainTextEditLog->setUpdatesEnabled(false);
42 for (int i = 0; i < m_messageQueue.count(); i++)
43 plainTextEditLog->appendPlainText(m_messageQueue[i]);
44 m_messageQueue.clear();
45 plainTextEditLog->setUpdatesEnabled(true);
46 plainTextEditLog->update();
47 m_logSyncMutex->unlock();
48 }
49 }
50 }
51
flushMessageQueue()52 void CheckSumScannerLog::flushMessageQueue()
53 {
54 if ( checkBoxEnableLog->isChecked() ) {
55 m_logSyncMutex->lock();
56 plainTextEditLog->setUpdatesEnabled(false);
57 for (int i = 0; i < m_messageQueue.count(); i++)
58 plainTextEditLog->appendPlainText(m_messageQueue[i]);
59 m_messageQueue.clear();
60 plainTextEditLog->setUpdatesEnabled(true);
61 plainTextEditLog->update();
62 m_logSyncMutex->unlock();
63 }
64 }
65
scrollToEnd()66 void CheckSumScannerLog::scrollToEnd()
67 {
68 plainTextEditLog->horizontalScrollBar()->setValue(plainTextEditLog->horizontalScrollBar()->minimum());
69 plainTextEditLog->verticalScrollBar()->setValue(plainTextEditLog->verticalScrollBar()->maximum());
70 }
71
progressTextChanged(const QString & text)72 void CheckSumScannerLog::progressTextChanged(const QString &text)
73 {
74 progressBar->setFormat(text);
75 }
76
progressRangeChanged(int min,int max)77 void CheckSumScannerLog::progressRangeChanged(int min, int max)
78 {
79 progressBar->setRange(min, max);
80 m_progress = -1;
81 }
82
progressChanged(int progress)83 void CheckSumScannerLog::progressChanged(int progress)
84 {
85 progressBar->setValue(progress);
86 if ( progressBar->maximum() > progressBar->minimum() )
87 m_progress = 100.0 * (qreal)progress / (qreal)(progressBar->maximum() - progressBar->minimum());
88 else
89 m_progress = -1;
90 }
91
showEvent(QShowEvent * e)92 void CheckSumScannerLog::showEvent(QShowEvent *e)
93 {
94 restoreGeometry(qmc2Config->value(QMC2_FRONTEND_PREFIX + "Layout/" + m_settingsKey + "/Geometry", QByteArray()).toByteArray());
95 emit windowOpened();
96 if ( e )
97 QWidget::showEvent(e);
98 }
99
hideEvent(QHideEvent * e)100 void CheckSumScannerLog::hideEvent(QHideEvent *e)
101 {
102 if ( isVisible() )
103 qmc2Config->setValue(QMC2_FRONTEND_PREFIX + "Layout/" + m_settingsKey + "/Geometry", saveGeometry());
104 qmc2Config->setValue(QMC2_FRONTEND_PREFIX + m_settingsKey + "/EnableLog", checkBoxEnableLog->isChecked());
105 emit windowClosed();
106 if ( e )
107 QWidget::hideEvent(e);
108 }
109
closeEvent(QCloseEvent * e)110 void CheckSumScannerLog::closeEvent(QCloseEvent *e)
111 {
112 hideEvent(0);
113 QWidget::closeEvent(e);
114 }
115
keyPressEvent(QKeyEvent * e)116 void CheckSumScannerLog::keyPressEvent(QKeyEvent *e)
117 {
118 if ( e->key() == Qt::Key_Escape )
119 close();
120 else
121 QWidget::keyPressEvent(e);
122 }
123