]> git.sesse.net Git - kdenlive/blobdiff - src/dvdwizard.cpp
Fix several DVD wizard monitor issue, might solve:
[kdenlive] / src / dvdwizard.cpp
index a22e0d2a860e6c2eeb35aab1b648c32eef36eeef..c0e273ea19fa94445d64e8850d1fb8c53d0ec0f3 100644 (file)
@@ -44,8 +44,8 @@ DvdWizard::DvdWizard(const QString &url, const QString &profile, QWidget *parent
         m_mkiso(NULL),
         m_burnMenu(new QMenu(this))
 {
+    setWindowTitle(i18n("DVD Wizard"));
     //setPixmap(QWizard::WatermarkPixmap, QPixmap(KStandardDirs::locate("appdata", "banner.png")));
-    setAttribute(Qt::WA_DeleteOnClose);
     m_pageVob = new DvdWizardVob(profile, this);
     m_pageVob->setTitle(i18n("Select Files For Your DVD"));
     addPage(m_pageVob);
@@ -66,15 +66,15 @@ DvdWizard::DvdWizard(const QString &url, const QString &profile, QWidget *parent
     page4->setTitle(i18n("Creating DVD Image"));
     m_status.setupUi(page4);
     m_status.error_box->setHidden(true);
-    m_status.tmp_folder->setPath(KdenliveSettings::currenttmpfolder());
-    m_status.iso_image->setPath(QDir::homePath() + "/untitled.iso");
+    m_status.tmp_folder->setUrl(KUrl(KdenliveSettings::currenttmpfolder()));
+    m_status.tmp_folder->setMode(KFile::Directory | KFile::ExistingOnly);
+    m_status.iso_image->setUrl(KUrl(QDir::homePath() + "/untitled.iso"));
     m_status.iso_image->setFilter("*.iso");
+    m_status.iso_image->setMode(KFile::File);
     m_status.iso_image->fileDialog()->setOperationMode(KFileDialog::Saving);
 
     addPage(page4);
 
-
-
     connect(this, SIGNAL(currentIdChanged(int)), this, SLOT(slotPageChanged(int)));
     connect(m_status.button_start, SIGNAL(clicked()), this, SLOT(slotGenerate()));
     connect(m_status.button_abort, SIGNAL(clicked()), this, SLOT(slotAbort()));
@@ -100,9 +100,8 @@ DvdWizard::DvdWizard(const QString &url, const QString &profile, QWidget *parent
     m_status.button_burn->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
     m_status.button_preview->setIcon(KIcon("media-playback-start"));
 
-    // TODO: uncomment after 0.7.4 release (i18n change)
-    /*setButtonText(QWizard::CustomButton1, i19n("Load"));
-    setButtonText(QWizard::CustomButton2, i19n("Save"));*/
+    setButtonText(QWizard::CustomButton1, i18n("Load"));
+    setButtonText(QWizard::CustomButton2, i18n("Save"));
     button(QWizard::CustomButton1)->setIcon(KIcon("document-open"));
     button(QWizard::CustomButton2)->setIcon(KIcon("document-save"));
     connect(button(QWizard::CustomButton1), SIGNAL(clicked()), this, SLOT(slotLoad()));
@@ -117,6 +116,7 @@ DvdWizard::DvdWizard(const QString &url, const QString &profile, QWidget *parent
 DvdWizard::~DvdWizard()
 {
     // m_menuFile.remove();
+    blockSignals(true);
     delete m_burnMenu;
     if (m_dvdauthor) {
         m_dvdauthor->blockSignals(true);
@@ -136,10 +136,12 @@ void DvdWizard::slotPageChanged(int page)
     //kDebug() << "// PAGE CHGD: " << page << ", ID: " << visitedPages();
     if (page == 0) {
         // Update chapters that were modified in page 1
+        m_pageChapters->stopMonitor();
         m_pageVob->updateChapters(m_pageChapters->chaptersData());
     } else if (page == 1) {
-        m_pageChapters->setVobFiles(m_pageVob->isPal(), m_pageVob->selectedUrls(), m_pageVob->durations(), m_pageVob->chapters());
+        m_pageChapters->setVobFiles(m_pageVob->isPal(), m_pageVob->isWide(), m_pageVob->selectedUrls(), m_pageVob->durations(), m_pageVob->chapters());
     } else if (page == 2) {
+        m_pageChapters->stopMonitor();
         m_pageMenu->setTargets(m_pageChapters->selectedTitles(), m_pageChapters->selectedTargets());
         m_pageMenu->changeProfile(m_pageVob->isPal());
     }
@@ -193,6 +195,9 @@ void DvdWizard::generateDvd()
     qApp->processEvents();
     QMap <QString, QRect> buttons = m_pageMenu->buttonsInfo();
     QStringList buttonsTarget;
+    m_status.error_log->clear();
+    // initialize html content
+    m_status.error_log->setText("<html></html>");
 
     if (m_pageMenu->createMenu()) {
         m_pageMenu->createButtonImages(temp1.fileName(), temp2.fileName(), temp3.fileName());
@@ -230,14 +235,15 @@ void DvdWizard::generateDvd()
                     kDebug() << "/// RENDERING MENU vob crashed";
                     QByteArray result = renderbg.readAllStandardError();
                     vobitem->setIcon(KIcon("dialog-close"));
-                    m_status.error_log->setText(result);
+                    m_status.error_log->append(result);
                     m_status.error_box->setHidden(false);
                     return;
                 }
             } else {
                 kDebug() << "/// RENDERING MENU vob timed out";
                 vobitem->setIcon(KIcon("dialog-close"));
-                m_status.error_log->setText(i18n("Rendering job timed out"));
+                m_status.error_log->append("<a name=\"result\" /><br><strong>" + i18n("Rendering job timed out"));
+                m_status.error_log->scrollToAnchor("result");
                 m_status.error_box->setHidden(false);
                 return;
             }
@@ -307,13 +313,12 @@ void DvdWizard::generateDvd()
         else spumux.setStandardInputFile(temp5.fileName());
         spumux.setStandardOutputFile(m_menuFile.fileName());
         spumux.start("spumux", args);
-        spumux.setProcessChannelMode(QProcess::MergedChannels);
         if (spumux.waitForFinished()) {
-            kDebug() << QString(spumux.readAll()).simplified();
+            m_status.error_log->append(spumux.readAllStandardError());
             if (spumux.exitStatus() == QProcess::CrashExit) {
                 QByteArray result = spumux.readAllStandardError();
                 spuitem->setIcon(KIcon("dialog-close"));
-                m_status.error_log->setText(result);
+                m_status.error_log->append(result);
                 m_status.error_box->setHidden(false);
                 kDebug() << "/// RENDERING SPUMUX MENU crashed";
                 return;
@@ -321,7 +326,8 @@ void DvdWizard::generateDvd()
         } else {
             kDebug() << "/// RENDERING SPUMUX MENU timed out";
             spuitem->setIcon(KIcon("dialog-close"));
-            m_status.error_log->setText(i18n("Menu job timed out"));
+            m_status.error_log->append("<a name=\"result\" /><br><strong>" + i18n("Menu job timed out"));
+            m_status.error_log->scrollToAnchor("result");
             m_status.error_box->setHidden(false);
             return;
         }
@@ -453,12 +459,13 @@ void DvdWizard::generateDvd()
     m_dvdauthor->setProcessChannelMode(QProcess::MergedChannels);
     m_dvdauthor->start("dvdauthor", args);
     m_status.button_abort->setEnabled(true);
+    button(QWizard::FinishButton)->setEnabled(false);
 }
 
 void DvdWizard::slotShowRenderInfo()
 {
     QString log = QString(m_dvdauthor->readAll());
-    m_status.error_log->setText(log);
+    m_status.error_log->append(log);
     m_status.error_box->setHidden(false);
 }
 
@@ -467,11 +474,10 @@ void DvdWizard::slotRenderFinished(int exitCode, QProcess::ExitStatus status)
     QListWidgetItem *authitem =  m_status.job_progress->item(3);
     if (status == QProcess::CrashExit || exitCode != 0) {
         QString result(m_dvdauthor->readAllStandardError());
-        result.append("<br><b>");
-
-        //TODO: uncomment after 0.7.4 release (i18n change)
-        //result.append(i19n("DVDAuthor process crashed."));
-        m_status.error_log->setText(result);
+        result.append("<a name=\"result\" /><br><strong>");
+        result.append(i18n("DVDAuthor process crashed."));
+        m_status.error_log->append(result);
+        m_status.error_log->scrollToAnchor("result");
         m_status.error_box->setHidden(false);
         kDebug() << "DVDAuthor process crashed";
         authitem->setIcon(KIcon("dialog-close"));
@@ -481,6 +487,7 @@ void DvdWizard::slotRenderFinished(int exitCode, QProcess::ExitStatus status)
         m_status.button_start->setEnabled(true);
         m_status.button_abort->setEnabled(false);
         cleanup();
+        button(QWizard::FinishButton)->setEnabled(true);
         return;
     }
     m_creationLog.append(m_dvdauthor->readAllStandardError());
@@ -490,13 +497,15 @@ void DvdWizard::slotRenderFinished(int exitCode, QProcess::ExitStatus status)
 
     // Check if DVD structure has the necessary infos
     if (!QFile::exists(m_status.tmp_folder->url().path() + "/DVD/VIDEO_TS/VIDEO_TS.IFO")) {
-        m_status.error_log->setText(m_creationLog + '\n' + i18n("DVD structure broken"));
+        m_status.error_log->append(m_creationLog + "<a name=\"result\" /><br /><strong>" + i18n("DVD structure broken"));
+        m_status.error_log->scrollToAnchor("result");
         m_status.error_box->setHidden(false);
         kDebug() << "DVDAuthor process crashed";
         authitem->setIcon(KIcon("dialog-close"));
         m_status.button_start->setEnabled(true);
         m_status.button_abort->setEnabled(false);
         cleanup();
+        button(QWizard::FinishButton)->setEnabled(true);
         return;
     }
     authitem->setIcon(KIcon("dialog-ok"));
@@ -523,19 +532,20 @@ void DvdWizard::slotRenderFinished(int exitCode, QProcess::ExitStatus status)
 void DvdWizard::slotShowIsoInfo()
 {
     QString log = QString(m_mkiso->readAll());
-    m_status.error_log->setText(log);
+    m_status.error_log->append(log);
     m_status.error_box->setHidden(false);
 }
 
 void DvdWizard::slotIsoFinished(int exitCode, QProcess::ExitStatus status)
 {
+    button(QWizard::FinishButton)->setEnabled(true);
     QListWidgetItem *isoitem =  m_status.job_progress->item(4);
     if (status == QProcess::CrashExit || exitCode != 0) {
         QString result(m_mkiso->readAllStandardError());
-        result.append("<br><b>");
-        //TODO: uncomment after 0.7.4 release (i18n change)
-        // result.append(i19n("ISO creation process crashed."));
-        m_status.error_log->setText(result);
+        result.append("<a name=\"result\" /><br /><strong>");
+        result.append(i18n("ISO creation process crashed."));
+        m_status.error_log->append(result);
+        m_status.error_log->scrollToAnchor("result");
         m_status.error_box->setHidden(false);
         m_mkiso->close();
         delete m_mkiso;
@@ -560,7 +570,8 @@ void DvdWizard::slotIsoFinished(int exitCode, QProcess::ExitStatus status)
         if (iso.exists()) {
             KIO::NetAccess::del(m_status.iso_image->url(), this);
         }
-        m_status.error_log->setText(m_creationLog + '\n' + i18n("DVD ISO is broken"));
+        m_status.error_log->append(m_creationLog + "<br /><a name=\"result\" /><strong>" + i18n("DVD ISO is broken") + "</strong>");
+        m_status.error_log->scrollToAnchor("result");
         m_status.error_box->setHidden(false);
         isoitem->setIcon(KIcon("dialog-close"));
         cleanup();
@@ -572,7 +583,8 @@ void DvdWizard::slotIsoFinished(int exitCode, QProcess::ExitStatus status)
     cleanup();
     kDebug() << m_creationLog;
 
-    m_status.error_log->setText(i18n("DVD ISO image %1 successfully created.", m_status.iso_image->url().path()));
+    m_status.error_log->append("<a name=\"result\" /><strong>" + i18n("DVD ISO image %1 successfully created.", m_status.iso_image->url().path()) + "</strong>");
+    m_status.error_log->scrollToAnchor("result");
     m_status.button_preview->setEnabled(true);
     m_status.button_burn->setEnabled(true);
     m_status.error_box->setHidden(false);
@@ -642,7 +654,7 @@ void DvdWizard::slotSave()
     KUrl url = KFileDialog::getSaveUrl(KUrl("kfiledialog:///projectfolder"), "*.kdvd", this, i18n("Save DVD Project"));
     if (url.isEmpty()) return;
 
-    if (currentId() == 0) m_pageChapters->setVobFiles(m_pageVob->isPal(), m_pageVob->selectedUrls(), m_pageVob->durations(), m_pageVob->chapters());
+    if (currentId() == 0) m_pageChapters->setVobFiles(m_pageVob->isPal(), m_pageVob->isWide(), m_pageVob->selectedUrls(), m_pageVob->durations(), m_pageVob->chapters());
 
     QDomDocument doc;
     QDomElement dvdproject = doc.createElement("dvdproject");
@@ -652,8 +664,8 @@ void DvdWizard::slotSave()
     if (m_pageVob->isWide()) profile.append("_wide");
     dvdproject.setAttribute("profile", profile);
 
-    dvdproject.setAttribute("tmp_folder", m_status.tmp_folder->text());
-    dvdproject.setAttribute("iso_image", m_status.iso_image->text());
+    dvdproject.setAttribute("tmp_folder", m_status.tmp_folder->url().path());
+    dvdproject.setAttribute("iso_image", m_status.iso_image->url().path());
 
     dvdproject.setAttribute("intro_movie", m_pageVob->introMovie());
 
@@ -695,8 +707,8 @@ void DvdWizard::slotLoad()
     QString profile = dvdproject.attribute("profile");
     m_pageVob->setProfile(profile);
 
-    m_status.tmp_folder->setPath(dvdproject.attribute("tmp_folder"));
-    m_status.iso_image->setPath(dvdproject.attribute("iso_image"));
+    m_status.tmp_folder->setUrl(KUrl(dvdproject.attribute("tmp_folder")));
+    m_status.iso_image->setUrl(KUrl(dvdproject.attribute("iso_image")));
     m_pageVob->setIntroMovie(dvdproject.attribute("intro_movie"));
 
     QDomNodeList vobs = doc.elementsByTagName("vob");