summaryrefslogtreecommitdiffstats
path: root/utils/rbutilqt/progressloggergui.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'utils/rbutilqt/progressloggergui.cpp')
-rw-r--r--utils/rbutilqt/progressloggergui.cpp186
1 files changed, 186 insertions, 0 deletions
diff --git a/utils/rbutilqt/progressloggergui.cpp b/utils/rbutilqt/progressloggergui.cpp
new file mode 100644
index 0000000000..f04de395a3
--- /dev/null
+++ b/utils/rbutilqt/progressloggergui.cpp
@@ -0,0 +1,186 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ *
+ * Copyright (C) 2007 by Dominik Wenger
+ *
+ * All files in this archive are subject to the GNU General Public License.
+ * See the file COPYING in the source tree root for full license agreement.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ****************************************************************************/
+
+#include <QFileDialog>
+#include "progressloggergui.h"
+
+#include "sysinfo.h"
+#include "systrace.h"
+
+ProgressLoggerGui::ProgressLoggerGui(QWidget* parent): QObject(parent)
+{
+ downloadProgress = new QDialog(parent);
+ downloadProgress->setModal(true);
+ dp.setupUi(downloadProgress);
+ dp.listProgress->setAlternatingRowColors(true);
+ dp.saveLog->hide();
+ connect(dp.saveLog,&QAbstractButton::clicked,this,&ProgressLoggerGui::saveErrorLog);
+ setRunning();
+}
+
+void ProgressLoggerGui::addItem(const QString &text, int flag)
+{
+ QListWidgetItem* item = new QListWidgetItem(text);
+
+ switch(flag)
+ {
+ case LOGNOICON:
+ break;
+ case LOGOK:
+ item->setIcon(QIcon(":/icons/go-next.svg"));
+ break;
+ case LOGINFO:
+ item->setIcon(QIcon(":/icons/dialog-information.svg"));
+ break;
+ case LOGWARNING:
+ item->setIcon(QIcon(":/icons/dialog-warning.svg"));
+ break;
+ case LOGERROR:
+ item->setIcon(QIcon(":/icons/dialog-error.svg"));
+ dp.saveLog->show();
+ break;
+ }
+
+ dp.listProgress->addItem(item);
+ dp.listProgress->scrollToItem(item);
+}
+
+void ProgressLoggerGui::setProgress(int value, int max)
+{
+ // set maximum first to avoid setting a value outside of the max range.
+ // If the current value is outside of the valid range QProgressBar
+ // calls reset() internally.
+ setProgressMax(max);
+ setProgressValue(value);
+}
+
+
+void ProgressLoggerGui::setProgressValue(int value)
+{
+ dp.progressBar->setValue(value);
+}
+
+void ProgressLoggerGui::setProgressMax(int max)
+{
+ dp.progressBar->setMaximum(max);
+}
+
+int ProgressLoggerGui::getProgressMax()
+{
+ return dp.progressBar->maximum();
+}
+
+void ProgressLoggerGui::setProgressVisible(bool b)
+{
+ dp.progressBar->setVisible(b);
+}
+
+
+/** Set logger into "running" state -- the reporting process is still running.
+ * Display "Abort" and emit the aborted() signal on button press.
+ */
+void ProgressLoggerGui::setRunning()
+{
+ dp.buttonAbort->setText(tr("&Abort"));
+ dp.buttonAbort->setIcon(QIcon(QString::fromUtf8(":/icons/process-stop.svg")));
+
+ // make sure to not close the window on button press.
+ disconnect(dp.buttonAbort, &QAbstractButton::clicked, downloadProgress, &QWidget::close);
+ // emit aborted() once button is pressed but not closed().
+ disconnect(dp.buttonAbort, &QAbstractButton::clicked, this, &ProgressLoggerGui::closed);
+ connect(dp.buttonAbort, &QAbstractButton::clicked, this, &ProgressLoggerGui::aborted);
+
+}
+
+
+/** Set logger into "finished" state -- the reporting process is finished.
+ * Display "Ok". Don't emit aborted() as there is nothing running left.
+ * Close logger on button press and emit closed().
+ */
+void ProgressLoggerGui::setFinished()
+{
+ dp.buttonAbort->setText(tr("&Ok"));
+ dp.buttonAbort->setIcon(QIcon(QString::fromUtf8(":/icons/go-next.svg")));
+
+ // close the window on button press.
+ connect(dp.buttonAbort, &QAbstractButton::clicked, downloadProgress, &QWidget::close);
+ // emit closed() once button is pressed but not aborted().
+ disconnect(dp.buttonAbort, &QAbstractButton::clicked, this, &ProgressLoggerGui::aborted);
+ connect(dp.buttonAbort, &QAbstractButton::clicked, this, &ProgressLoggerGui::closed);
+}
+
+
+void ProgressLoggerGui::close()
+{
+ downloadProgress->close();
+}
+
+void ProgressLoggerGui::show()
+{
+ downloadProgress->show();
+}
+
+void ProgressLoggerGui::saveErrorLog()
+{
+ QString filename = QFileDialog::getSaveFileName(downloadProgress,
+ tr("Save system trace log"), QDir::homePath(), "*.log");
+ if(filename.isEmpty())
+ return;
+
+ QFile file(filename);
+ if(!file.open(QIODevice::WriteOnly))
+ return;
+
+ //Logger texts
+ QString loggerTexts = "\n*********************************************\n"
+ "*************** Logger *******************\n"
+ "*********************************************\n";
+
+ file.write(loggerTexts.toUtf8(), loggerTexts.size());
+
+
+ int i=0;
+ loggerTexts = "";
+ while(dp.listProgress->item(i) != nullptr)
+ {
+ loggerTexts.append(dp.listProgress->item(i)->text());
+ loggerTexts.append("\n");
+ i++;
+ }
+ file.write(loggerTexts.toUtf8(), loggerTexts.size());
+
+ //systeminfo
+ QString info = "\n*********************************************\n"
+ "************ SYSTEMINFO *******************\n"
+ "*********************************************\n";
+
+ file.write(info.toUtf8(), info.size());
+ info = Sysinfo::getInfo(Sysinfo::InfoText);
+ file.write(info.toUtf8(), info.size());
+
+ // trace
+ QString trace = "\n*********************************************\n"
+ "*********** TRACE **************************\n"
+ "*********************************************\n";
+ file.write(trace.toUtf8(), trace.size());
+ trace = SysTrace::getTrace();
+ file.write(trace.toUtf8(), trace.size());
+
+ file.close();
+}
+