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