]> git.sesse.net Git - kdenlive/blobdiff - src/mainwindow.cpp
reindent + nice (working) progress bar for document loading
[kdenlive] / src / mainwindow.cpp
index e4cc0fbb6c9c8dc1753c4fc60976062197dd74df..1d9267991dd3c0ddeb698fa36757e7a46ab86e2c 100644 (file)
@@ -176,9 +176,10 @@ MainWindow::MainWindow(const QString &MltPath, const KUrl & Url, QWidget *parent
     addDockWidget(Qt::TopDockWidgetArea, m_transitionConfigDock);
 
     KdenliveSettings::setCurrent_profile(KdenliveSettings::default_profile());
-    m_fileOpenRecent = KStandardAction::openRecent(this, SLOT(openFile(const KUrl &)),
-                       actionCollection());
+    m_fileOpenRecent = KStandardAction::openRecent(this, SLOT(openFile(const KUrl &)), actionCollection());
     readOptions();
+    m_fileRevert = KStandardAction::revert(this, SLOT(slotRevert()), actionCollection());
+    m_fileRevert->setEnabled(false);
 
     //slotDetectAudioDriver();
 
@@ -371,13 +372,12 @@ MainWindow::MainWindow(const QString &MltPath, const KUrl & Url, QWidget *parent
     // precedence, then "openlastproject", then just a plain empty file.
     // If opening Url fails, openlastproject will _not_ be used.
     if (!Url.isEmpty()) {
-        openFile(Url);
-    } else {
-        if (KdenliveSettings::openlastproject()) {
-            openLastFile();
-        }
-    }
-    if (m_timelineArea->count() == 0) {
+        // delay loading so that the window shows up
+        m_startUrl = Url;
+        QTimer::singleShot(500, this, SLOT(openFile()));
+    } else if (KdenliveSettings::openlastproject()) {
+        QTimer::singleShot(500, this, SLOT(openLastFile()));
+    } else { //if (m_timelineArea->count() == 0) {
         newFile(false);
     }
 
@@ -879,7 +879,7 @@ void MainWindow::setupActions()
     collection->addAction("dvd_wizard", dvdWizard);
     connect(dvdWizard, SIGNAL(triggered(bool)), this, SLOT(slotDvdWizard()));
 
-    KAction *transcodeClip =  new KAction(KIcon("edit-copy"), i18n("Transcode Clip"), this);
+    KAction *transcodeClip =  new KAction(KIcon("edit-copy"), i18n("Transcode Clips"), this);
     collection->addAction("transcode_clip", transcodeClip);
     connect(transcodeClip, SIGNAL(triggered(bool)), this, SLOT(slotTranscodeClip()));
 
@@ -1251,6 +1251,7 @@ void MainWindow::slotRunWizard()
 void MainWindow::newFile(bool showProjectSettings)
 {
     if (!m_timelineArea->isEnabled()) return;
+    m_fileRevert->setEnabled(false);
     QString profileName;
     KUrl projectFolder;
     QPoint projectTracks(KdenliveSettings::videotracks(), KdenliveSettings::audiotracks());
@@ -1300,7 +1301,7 @@ void MainWindow::activateDocument()
     connectDocument(currentTab, currentDoc);
 }
 
-void MainWindow::closeCurrentDocument()
+void MainWindow::closeCurrentDocument(bool saveChanges)
 {
     QWidget *w = m_timelineArea->currentWidget();
     if (!w) return;
@@ -1310,7 +1311,7 @@ void MainWindow::closeCurrentDocument()
     m_timelineArea->setCurrentIndex(ix);
     TrackView *tabToClose = (TrackView *) w;
     KdenliveDoc *docToClose = tabToClose->document();
-    if (docToClose && docToClose->isModified()) {
+    if (docToClose && docToClose->isModified() && saveChanges) {
         switch (KMessageBox::warningYesNoCancel(this, i18n("Save changes to document?"))) {
         case KMessageBox::Yes :
             // save document here. If saving fails, return false;
@@ -1365,6 +1366,7 @@ bool MainWindow::saveFileAs(const QString &outputFileName)
     m_timelineArea->setTabToolTip(m_timelineArea->currentIndex(), m_activeDocument->url().path());
     m_activeDocument->setModified(false);
     m_fileOpenRecent->addUrl(KUrl(outputFileName));
+    m_fileRevert->setEnabled(true);
     return true;
 }
 
@@ -1397,6 +1399,11 @@ bool MainWindow::saveFile()
 
 void MainWindow::openFile()
 {
+    if (!m_startUrl.isEmpty()) {
+        openFile(m_startUrl);
+        m_startUrl = KUrl();
+        return;
+    }
     // Check that the Kdenlive mime type is correctly installed
     QString mimetype = "application/x-kdenlive";
     KMimeType::Ptr mime = KMimeType::mimeType(mimetype);
@@ -1454,12 +1461,15 @@ void MainWindow::openFile(const KUrl &url)
         }
     }
     if (!KdenliveSettings::activatetabs()) closeCurrentDocument();
+    m_messageLabel->setMessage(i18n("Opening file %1", url.path()), InformationMessage);
+    qApp->processEvents();
     doOpenFile(url, NULL);
 }
 
 void MainWindow::doOpenFile(const KUrl &url, KAutoSaveFile *stale)
 {
     if (!m_timelineArea->isEnabled()) return;
+    m_fileRevert->setEnabled(true);
     KdenliveDoc *doc = new KdenliveDoc(url, KdenliveSettings::defaultprojectfolder(), m_commandStack, KdenliveSettings::default_profile(), QPoint(KdenliveSettings::videotracks(), KdenliveSettings::audiotracks()), m_projectMonitor->render, this);
     if (stale == NULL) {
         stale = new KAutoSaveFile(url, doc);
@@ -1665,6 +1675,7 @@ void MainWindow::slotRenderProject()
     if (!m_renderWidget) {
         QString projectfolder = m_activeDocument ? m_activeDocument->projectFolder().path(KUrl::AddTrailingSlash) : KdenliveSettings::defaultprojectfolder();
         m_renderWidget = new RenderWidget(projectfolder, this);
+        connect(m_renderWidget, SIGNAL(shutdown()), this, SLOT(slotShutdown()));
         connect(m_renderWidget, SIGNAL(selectedRenderProfile(const QString &, const QString &, const QString&)), this, SLOT(slotSetDocumentRenderProfile(const QString &, const QString &, const QString&)));
         connect(m_renderWidget, SIGNAL(prepareRenderingData(bool, bool, const QString&)), this, SLOT(slotPrepareRendering(bool, bool, const QString&)));
         connect(m_renderWidget, SIGNAL(abortProcess(const QString &)), this, SIGNAL(abortRenderJob(const QString &)));
@@ -1778,7 +1789,7 @@ void MainWindow::connectDocument(TrackView *trackView, KdenliveDoc *doc)   //cha
             disconnect(m_activeTimeline->projectView(), SIGNAL(activateDocumentMonitor()), m_projectMonitor, SLOT(activateMonitor()));
             disconnect(m_activeTimeline, SIGNAL(zoneMoved(int, int)), this, SLOT(slotZoneMoved(int, int)));
             disconnect(m_projectList, SIGNAL(loadingIsOver()), m_activeTimeline->projectView(), SLOT(slotUpdateAllThumbs()));
-            disconnect(m_projectList, SIGNAL(displayMessage(const QString&, MessageType)), m_messageLabel, SLOT(setMessage(const QString&, MessageType)));
+            disconnect(m_projectList, SIGNAL(displayMessage(const QString&, int)), this, SLOT(slotGotProgressInfo(const QString&, int)));
             m_effectStack->clear();
         }
         //m_activeDocument->setRenderer(NULL);
@@ -1847,7 +1858,7 @@ void MainWindow::connectDocument(TrackView *trackView, KdenliveDoc *doc)   //cha
     connect(trackView->projectView(), SIGNAL(activateDocumentMonitor()), m_projectMonitor, SLOT(activateMonitor()));
     connect(trackView, SIGNAL(zoneMoved(int, int)), this, SLOT(slotZoneMoved(int, int)));
     connect(m_projectList, SIGNAL(loadingIsOver()), trackView->projectView(), SLOT(slotUpdateAllThumbs()));
-    connect(m_projectList, SIGNAL(displayMessage(const QString&, MessageType)), m_messageLabel, SLOT(setMessage(const QString&, MessageType)));
+    connect(m_projectList, SIGNAL(displayMessage(const QString&, int)), this, SLOT(slotGotProgressInfo(const QString&, int)));
 
 
     trackView->projectView()->setContextMenu(m_timelineContextMenu, m_timelineContextClipMenu, m_timelineContextTransitionMenu, m_clipTypeGroup);
@@ -2667,8 +2678,12 @@ void MainWindow::slotUpdateClipType(QAction *action)
 
 void MainWindow::slotDvdWizard(const QString &url, const QString &profile)
 {
+    // We must stop the monitors since we create a new on in the dvd wizard
+    m_clipMonitor->stop();
+    m_projectMonitor->stop();
     DvdWizard w(url, profile, this);
     w.exec();
+    m_projectMonitor->start();
 }
 
 void MainWindow::slotShowTimeline(bool show)
@@ -2845,7 +2860,24 @@ void MainWindow::slotRemoveFocus()
     statusBar()->clearFocus();
 }
 
+void MainWindow::slotRevert()
+{
+    if (KMessageBox::warningContinueCancel(this, i18n("This will delete all changes made since you last saved your project. Are you sure you want to continue?"), i18n("Revert to last saved version")) == KMessageBox::Cancel) return;
+    KUrl url = m_activeDocument->url();
+    closeCurrentDocument(false);
+    doOpenFile(url, NULL);
+}
 
 
+void MainWindow::slotShutdown()
+{
+    if (m_activeDocument) m_activeDocument->setModified(false);
+    // Call shutdown
+    QDBusConnectionInterface* interface = QDBusConnection::sessionBus().interface();
+    if (interface && interface->isServiceRegistered("org.kde.ksmserver")) {
+        QDBusInterface smserver("org.kde.ksmserver", "/KSMServer", "org.kde.KSMServerInterface");
+        smserver.call("logout", 1, 2, 2);
+    }
+}
 
 #include "mainwindow.moc"