/* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. */ #include #include #include #include #include #include #include #include "smdialog.h" #include "helper.h" #include "unpacker.h" SeriesPartsDialog::SeriesPartsDialog(QWidget *parent, Qt::WindowFlags f) : SmDialog(parent, f){ QFormLayout *mainLayout = new QFormLayout; mSubtitle = new QLineEdit; mSubtitle->setMinimumWidth(300); mainLayout->addRow(tr("&Subtitle:"), mSubtitle); mPartno = new QSpinBox; mPartno->setValue(0); mPartno->setMinimum(0); mainLayout->addRow(tr("&Part no."), mPartno); mOk = new QPushButton(tr("Ok")); connect(mOk, SIGNAL(clicked()), this, SLOT(accept())); mCancel = new QPushButton(tr("Cancel")); connect(mCancel, SIGNAL(clicked()), this, SLOT(reject())); mCancel->setDefault(true); QHBoxLayout *buttonLayout = new QHBoxLayout; buttonLayout->addStretch(); buttonLayout->addWidget(mOk); buttonLayout->addWidget(mCancel); mainLayout->addRow(buttonLayout); setLayout(mainLayout); } QString SeriesPartsDialog::subtitle() const { return mSubtitle->text(); } void SeriesPartsDialog::setSubtitle(const QString &subtitle){ mSubtitle->setText(subtitle); } int SeriesPartsDialog::partNo() const { return mPartno->value(); } 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(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::clearCommandQueue(){ mCommandQueue.clear(); } 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(); close(); }