From: Jean-Baptiste Mardelle Date: Tue, 10 May 2011 20:51:55 +0000 (+0000) Subject: Better feedback when opening archived project X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=6dba0a505572faa186f55d406e93bf88302f409b;p=kdenlive Better feedback when opening archived project svn path=/trunk/kdenlive/; revision=5585 --- diff --git a/src/archivewidget.cpp b/src/archivewidget.cpp index 1641e6d3..4d9477f1 100644 --- a/src/archivewidget.cpp +++ b/src/archivewidget.cpp @@ -183,30 +183,10 @@ ArchiveWidget::ArchiveWidget(const KUrl &url, QWidget * parent): m_extractUrl(url) { //setAttribute(Qt::WA_DeleteOnClose); - m_extractArchive = new KTar(url.path()); - m_extractArchive->open( QIODevice::ReadOnly ); - // Check that it is a kdenlive project archive - bool isProjectArchive = false; - QStringList files = m_extractArchive->directory()->entries(); - for (int i = 0; i < files.count(); i++) { - if (files.at(i).endsWith(".kdenlive")) { - m_projectName = files.at(i); - isProjectArchive = true; - break; - } - } - - if (!isProjectArchive) { - KMessageBox::sorry(kapp->activeWindow(), i18n("%1 is not an archived Kdenlive project", url.path(), i18n("Cannot open file"))); - m_extractArchive->close(); - hide(); - //HACK: find a better way to terminate the dialog - QTimer::singleShot(50, this, SLOT(reject())); - return; - } setupUi(this); connect(this, SIGNAL(extractingFinished()), this, SLOT(slotExtractingFinished())); + connect(this, SIGNAL(showMessage(const QString &, const QString &)), this, SLOT(slotDisplayMessage(const QString &, const QString &))); compressed_archive->setHidden(true); project_files->setHidden(true); @@ -216,6 +196,9 @@ ArchiveWidget::ArchiveWidget(const KUrl &url, QWidget * parent): archive_url->setUrl(KUrl(QDir::homePath())); buttonBox->button(QDialogButtonBox::Apply)->setText(i18n("Extract")); connect(buttonBox->button(QDialogButtonBox::Apply), SIGNAL(clicked()), this, SLOT(slotStartExtracting())); + buttonBox->button(QDialogButtonBox::Apply)->setEnabled(false); + adjustSize(); + m_archiveThread = QtConcurrent::run(this, &ArchiveWidget::openArchiveForExtraction); } @@ -224,6 +207,42 @@ ArchiveWidget::~ArchiveWidget() if (m_extractArchive) delete m_extractArchive; } +void ArchiveWidget::slotDisplayMessage(const QString &icon, const QString &text) +{ + icon_info->setPixmap(KIcon(icon).pixmap(16, 16)); + text_info->setText(text); +} + +void ArchiveWidget::openArchiveForExtraction() +{ + emit showMessage("system-run", i18n("Opening archive...")); + m_extractArchive = new KTar(m_extractUrl.path()); + if (!m_extractArchive->isOpen() && !m_extractArchive->open( QIODevice::ReadOnly )) { + emit showMessage("dialog-close", i18n("Cannot open archive file:\n %1", m_extractUrl.path())); + groupBox->setEnabled(false); + return; + } + + // Check that it is a kdenlive project archive + bool isProjectArchive = false; + QStringList files = m_extractArchive->directory()->entries(); + for (int i = 0; i < files.count(); i++) { + if (files.at(i).endsWith(".kdenlive")) { + m_projectName = files.at(i); + isProjectArchive = true; + break; + } + } + + if (!isProjectArchive) { + emit showMessage("dialog-close", i18n("File %1\n is not an archived Kdenlive project", m_extractUrl.path())); + groupBox->setEnabled(false); + return; + } + buttonBox->button(QDialogButtonBox::Apply)->setEnabled(true); + emit showMessage("dialog-ok", i18n("Ready")); +} + void ArchiveWidget::done ( int r ) { if (closeAccepted()) QDialog::done(r); @@ -325,13 +344,11 @@ void ArchiveWidget::slotCheckSpace() if (freeSize > m_requestedSize) { // everything is ok buttonBox->button(QDialogButtonBox::Apply)->setEnabled(true); - icon_info->setPixmap(KIcon("dialog-ok").pixmap(16, 16)); - text_info->setText(i18n("Available space on drive: %1", KIO::convertSize(freeSize))); + slotDisplayMessage("dialog-ok", i18n("Available space on drive: %1", KIO::convertSize(freeSize))); } else { buttonBox->button(QDialogButtonBox::Apply)->setEnabled(false); - icon_info->setPixmap(KIcon("dialog-close").pixmap(16, 16)); - text_info->setText(i18n("Not enough space on drive, free space: %1", KIO::convertSize(freeSize))); + slotDisplayMessage("dialog-close", i18n("Not enough space on drive, free space: %1", KIO::convertSize(freeSize))); } } @@ -352,8 +369,7 @@ bool ArchiveWidget::slotStartArchiving(bool firstPass) m_replacementList.clear(); m_foldersList.clear(); m_filesList.clear(); - icon_info->setPixmap(KIcon("system-run").pixmap(16, 16)); - text_info->setText(i18n("Archiving...")); + slotDisplayMessage("system-run", i18n("Archiving...")); repaint(); archive_url->setEnabled(false); compressed_archive->setEnabled(false); @@ -462,19 +478,16 @@ void ArchiveWidget::slotArchivingFinished(KJob *job) // Archiving finished progressBar->setValue(100); if (processProjectFile()) { - icon_info->setPixmap(KIcon("dialog-ok").pixmap(16, 16)); - text_info->setText(i18n("Project was successfully archived.")); + slotDisplayMessage("dialog-ok", i18n("Project was successfully archived.")); } else { - icon_info->setPixmap(KIcon("dialog-close").pixmap(16, 16)); - text_info->setText(i18n("There was an error processing project file")); + slotDisplayMessage("dialog-close", i18n("There was an error processing project file")); } } else processProjectFile(); } else { m_copyJob = NULL; - icon_info->setPixmap(KIcon("dialog-close").pixmap(16, 16)); - text_info->setText(i18n("There was an error while copying the files: %1", job->errorString())); + slotDisplayMessage("dialog-close", i18n("There was an error while copying the files: %1", job->errorString())); } if (!compressed_archive->isChecked()) { buttonBox->button(QDialogButtonBox::Apply)->setText(i18n("Archive")); @@ -655,12 +668,10 @@ void ArchiveWidget::createArchive() void ArchiveWidget::slotArchivingFinished(bool result) { if (result) { - icon_info->setPixmap(KIcon("dialog-ok").pixmap(16, 16)); - text_info->setText(i18n("Project was successfully archived.")); + slotDisplayMessage("dialog-ok", i18n("Project was successfully archived.")); } else { - icon_info->setPixmap(KIcon("dialog-close").pixmap(16, 16)); - text_info->setText(i18n("There was an error processing project file")); + slotDisplayMessage("dialog-close", i18n("There was an error processing project file")); } progressBar->setValue(100); buttonBox->button(QDialogButtonBox::Apply)->setText(i18n("Archive")); @@ -687,8 +698,7 @@ void ArchiveWidget::slotStartExtracting() QFileInfo f(m_extractUrl.path()); m_requestedSize = f.size(); KIO::NetAccess::mkdir(archive_url->url().path(KUrl::RemoveTrailingSlash), this); - icon_info->setPixmap(KIcon("system-run").pixmap(16, 16)); - text_info->setText(i18n("Extracting...")); + slotDisplayMessage("system-run", i18n("Extracting...")); buttonBox->button(QDialogButtonBox::Apply)->setText(i18n("Abort")); m_progressTimer = new QTimer; m_progressTimer->setInterval(800); diff --git a/src/archivewidget.h b/src/archivewidget.h index 5903937e..e76aa669 100644 --- a/src/archivewidget.h +++ b/src/archivewidget.h @@ -33,7 +33,7 @@ #include class KJob; -class KTar; +class KArchive; /** * @class ArchiveWidget @@ -68,6 +68,8 @@ private slots: void slotExtractingFinished(); void slotExtractProgress(); void slotGotProgress(KJob*); + void openArchiveForExtraction(); + void slotDisplayMessage(const QString &icon, const QString &text); protected: virtual void closeEvent ( QCloseEvent * e ); @@ -88,7 +90,7 @@ private: KUrl m_extractUrl; QString m_projectName; QTimer *m_progressTimer; - KTar *m_extractArchive; + KArchive *m_extractArchive; /** @brief Generate tree widget subitems from a string list of urls. */ void generateItems(QTreeWidgetItem *parentItem, QStringList items); @@ -99,6 +101,7 @@ signals: void archivingFinished(bool); void archiveProgress(int); void extractingFinished(); + void showMessage(const QString &, const QString &); }; diff --git a/src/widgets/archivewidget_ui.ui b/src/widgets/archivewidget_ui.ui index 46a48a0e..24966d7e 100644 --- a/src/widgets/archivewidget_ui.ui +++ b/src/widgets/archivewidget_ui.ui @@ -7,7 +7,7 @@ 0 0 263 - 210 + 197 @@ -15,22 +15,40 @@ - - - - - Archive folder - - - - - - - KFile::Directory - - - - + + + + + + true + + + + 0 + + + + + Archive folder + + + + + + + KFile::Directory + + + + + + + + + + Compressed archive + + @@ -63,23 +81,6 @@ - - - - 0 - - - - - - - Qt::Horizontal - - - QDialogButtonBox::Apply|QDialogButtonBox::Close - - - @@ -98,10 +99,20 @@ - - - - Compressed archive + + + + 0 + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Apply|QDialogButtonBox::Close