diff options
author | Arno <am@disconnect.de> | 2014-07-08 08:13:30 +0200 |
---|---|---|
committer | Arno <am@disconnect.de> | 2014-07-08 08:13:30 +0200 |
commit | f76b42f192a82f777cf77f3eecfab9ca7e31e396 (patch) | |
tree | 40b15701fc3a5356e044de3ad6ca8274b0d592de /smdialog.cpp | |
parent | ca9cdb39a8b3eafa8106fed84cce013f18b0a114 (diff) | |
download | SheMov-f76b42f192a82f777cf77f3eecfab9ca7e31e396.tar.gz SheMov-f76b42f192a82f777cf77f3eecfab9ca7e31e396.tar.bz2 SheMov-f76b42f192a82f777cf77f3eecfab9ca7e31e396.zip |
Display unpack output in Dialog
This was a difficult one. Got lost in the Semantics of QThread once
again, but just 2 days later it works :)
Diffstat (limited to 'smdialog.cpp')
-rw-r--r-- | smdialog.cpp | 89 |
1 files changed, 88 insertions, 1 deletions
diff --git a/smdialog.cpp b/smdialog.cpp index 645d6d6..a15c22e 100644 --- a/smdialog.cpp +++ b/smdialog.cpp @@ -10,10 +10,12 @@ #include <QLabel> #include <QPushButton> #include <QFormLayout> -#include <QHBoxLayout> +#include <QTextEdit> +#include <QTextBlock> #include "smdialog.h" #include "helper.h" +#include "unpacker.h" SmDialog::SmDialog(QWidget *parent, Qt::WindowFlags f) : QDialog(parent, f) {} @@ -58,3 +60,88 @@ int SeriesPartsDialog::partNo() const { void SeriesPartsDialog::setPartno(int partNo){ mPartno->setValue(partNo); } + +UnpackDialog::UnpackDialog(QWidget *parent, Qt::WindowFlags f) : SmDialog(parent, f){ + QVBoxLayout *mainLayout = new QVBoxLayout; + mCurrentL = new QLabel(tr("Unpacking:")); + mCurrentL->setMinimumWidth(400); + mainLayout->addWidget(mCurrentL); + mOutput = new QTextEdit; + mOutput->setMinimumHeight(400); + mainLayout->addWidget(mOutput); + QHBoxLayout *buttonLayout = new QHBoxLayout; + mClose = new QPushButton(tr("Close")); + connect(mClose, SIGNAL(clicked()), this, SLOT(hide())); + buttonLayout->addStretch(); + buttonLayout->addWidget(mClose); + buttonLayout->addStretch(); + mainLayout->addLayout(buttonLayout); + setLayout(mainLayout); + + mUnpacker = new Unpacker(this); + connect(mUnpacker, SIGNAL(outputRead(QByteArray)), this, SLOT(addProcOutput(QByteArray))); + connect(mUnpacker, SIGNAL(unpackStarted(QString)), this, SLOT(newPackage(QString))); + //connect(mUnpacker, SIGNAL(unpackStarted(QStringList)), this, SLOT(newPackage(QStringList))); + connect(mUnpacker, SIGNAL(unpackDone()), this, SLOT(unpackDone())); +} + +void UnpackDialog::setCurrentLabel(const QString &cur){ + mCurrentL->setText(cur); +} + +void UnpackDialog::clearOutput(){ + mOutput->clear(); +} + +void UnpackDialog::setCloseEnabled(bool enabled){ + mClose->setEnabled(enabled); +} + +void UnpackDialog::addOutput(const QString &msg, const QString &prepend){ + QTextCursor cur = mOutput->textCursor(); + QTextBlock block = cur.block(); + if(!block.text().isEmpty()){ + cur.insertBlock(); + } + if(!prepend.isEmpty()){ + QTextCharFormat fmtRed; + fmtRed.setForeground(QBrush(Qt::red)); + cur.setCharFormat(fmtRed); + cur.insertText(prepend); + } + QTextCharFormat fmtBlack; + fmtBlack.setForeground(QBrush(Qt::black)); + cur.setCharFormat(fmtBlack); + cur.insertText(msg); + mOutput->ensureCursorVisible(); +} + +void UnpackDialog::addProcOutput(const QByteArray &data){ + QTextCursor cur = mOutput->textCursor(); + QTextBlock block = cur.block(); + if(!block.text().isEmpty()){ + cur.insertBlock(); + } + QString dataStr = QString(data); + cur.insertText(dataStr); + mOutput->ensureCursorVisible(); +} + +void UnpackDialog::appendCommand(const QStringList &cmd){ + mCommandQueue.append(cmd); +} + +void UnpackDialog::doIt(){ + mUnpacker->setCommands(mCommandQueue); + mUnpacker->start(); +} + +void UnpackDialog::newPackage(const QString &package){ + setCurrentLabel(package); + addOutput(" ", tr("\n[NEW ARCHIVE]")); +} + +void UnpackDialog::unpackDone(){ + setCloseEnabled(true); + emit workFinished(); +} |