diff options
Diffstat (limited to 'src/b2qt-flashing-wizard/progress_page.cpp')
-rw-r--r-- | src/b2qt-flashing-wizard/progress_page.cpp | 66 |
1 files changed, 52 insertions, 14 deletions
diff --git a/src/b2qt-flashing-wizard/progress_page.cpp b/src/b2qt-flashing-wizard/progress_page.cpp index 567d986..e9203b3 100644 --- a/src/b2qt-flashing-wizard/progress_page.cpp +++ b/src/b2qt-flashing-wizard/progress_page.cpp @@ -26,6 +26,7 @@ #include <QLayout> #include <QProgressBar> #include <QPushButton> +#include <QScrollBar> #include <QTextEdit> #include <QTimer> @@ -37,13 +38,14 @@ ProgressPage::ProgressPage(QWidget *parent) , mTextEdit(new QTextEdit(this)) , mToggleDetailsButton(new QPushButton(this)) , mCopyToClipboardButton(new QPushButton(this)) + , mProgressBar(0) { setTitle(tr("Disk Creation")); setSubTitle(tr("Writing the hardware platform image to the disk")); setLayout(new QVBoxLayout(this)); - QProgressBar *progressBar = new QProgressBar(this); - progressBar->setRange(0, 0); - layout()->addWidget(progressBar); + mProgressBar = new QProgressBar(this); + mProgressBar->setRange(0, 0); + layout()->addWidget(mProgressBar); mProgress->setWordWrap(true); mProgress->setText(tr("Preparing the disk device...")); layout()->addWidget(mProgress); @@ -91,6 +93,14 @@ void ProgressPage::failed(const QString &message) { mFinished = false; emit completeChanged(); + showDetails(); + mProgressBar->setEnabled(false); + mProgressBar->setRange(0, 100); + mProgressBar->setValue(100); + mProgressBar->setFormat(""); + + // Scroll to bottom + mTextEdit->verticalScrollBar()->setValue(mTextEdit->verticalScrollBar()->maximum()); mProgress->setText(message); } @@ -101,26 +111,54 @@ void ProgressPage::setActor(Actor *actor) connect(actor, &Actor::finished, this, &ProgressPage::finished); connect(actor, &Actor::failed, this, &ProgressPage::failed); connect(actor, &Actor::details, this, &ProgressPage::addDetails); + connect(actor, &Actor::errorDetails, this, &ProgressPage::addErrorDetails); connect(actor, &Actor::progress, this, &ProgressPage::progress); } +static void commonDetailReplacements(QByteArray &data) +{ + data.replace(0x08 /* backspace */, ' '); +} + void ProgressPage::addDetails(QByteArray newData) { - newData.replace(0x08 /* backspace */, ' '); - mTextEdit->append(QString::fromLocal8Bit(newData)); + commonDetailReplacements(newData); + mTextEdit->insertPlainText(QString::fromLocal8Bit(newData)); } -void ProgressPage::toggleDetails() +void ProgressPage::addErrorDetails(QByteArray newData) { - if (mTextEdit->isHidden()) { - mTextEdit->show(); - mCopyToClipboardButton->show(); - mToggleDetailsButton->setText(tr("Hide details")); - } else { - mTextEdit->hide(); - mCopyToClipboardButton->hide(); - mToggleDetailsButton->setText(tr("Show details")); + if (newData.startsWith('+')) { + addDetails(newData); + return; } + commonDetailReplacements(newData); + QColor c = mTextEdit->textColor(); + mTextEdit->setTextColor(Qt::red); + mTextEdit->insertPlainText(QString::fromLocal8Bit(newData)); + mTextEdit->setTextColor(c); +} + +void ProgressPage::showDetails() +{ + mTextEdit->show(); + mCopyToClipboardButton->show(); + mToggleDetailsButton->setText(tr("Hide details")); +} + +void ProgressPage::hideDetails() +{ + mTextEdit->hide(); + mCopyToClipboardButton->hide(); + mToggleDetailsButton->setText(tr("Show details")); +} + +void ProgressPage::toggleDetails() +{ + if (mTextEdit->isHidden()) + showDetails(); + else + hideDetails(); } void ProgressPage::copyDetailsToClipboard() |