summaryrefslogtreecommitdiffstats
path: root/smdialog.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'smdialog.cpp')
-rw-r--r--smdialog.cpp89
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();
+}