From c876d3bbefe0dc00c27ca0c12d29da5874946962 Mon Sep 17 00:00:00 2001 From: Dominik Riebeling Date: Wed, 15 Dec 2021 21:04:28 +0100 Subject: rbutil: Merge rbutil with utils folder. rbutil uses several components from the utils folder, and can be considered part of utils too. Having it in a separate folder is an arbitrary split that doesn't help anymore these days, so merge them. This also allows other utils to easily use libtools.make without the need to navigate to a different folder. Change-Id: I3fc2f4de19e3e776553efb5dea5f779dfec0dc21 --- utils/rbutilqt/progressloggergui.cpp | 186 +++++++++++++++++++++++++++++++++++ 1 file changed, 186 insertions(+) create mode 100644 utils/rbutilqt/progressloggergui.cpp (limited to 'utils/rbutilqt/progressloggergui.cpp') diff --git a/utils/rbutilqt/progressloggergui.cpp b/utils/rbutilqt/progressloggergui.cpp new file mode 100644 index 0000000000..37e0908ae0 --- /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 +#include "progressloggergui.h" + +#include "sysinfo.h" +#include "systrace.h" + +ProgressLoggerGui::ProgressLoggerGui(QWidget* parent): ProgressloggerInterface(parent) +{ + downloadProgress = new QDialog(parent); + downloadProgress->setModal(true); + dp.setupUi(downloadProgress); + dp.listProgress->setAlternatingRowColors(true); + dp.saveLog->hide(); + connect(dp.saveLog,SIGNAL(clicked()),this,SLOT(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, SIGNAL(clicked()), downloadProgress, SLOT(close())); + // emit aborted() once button is pressed but not closed(). + disconnect(dp.buttonAbort, SIGNAL(clicked()), this, SIGNAL(closed())); + connect(dp.buttonAbort, SIGNAL(clicked()), this, SIGNAL(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, SIGNAL(clicked()), downloadProgress, SLOT(close())); + // emit closed() once button is pressed but not aborted(). + disconnect(dp.buttonAbort, SIGNAL(clicked()), this, SIGNAL(aborted())); + connect(dp.buttonAbort, SIGNAL(clicked()), this, SIGNAL(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(); +} + -- cgit v1.2.3