]> git.sesse.net Git - kdenlive/blobdiff - src/mainwindow.cpp
* Cleanup monitor / MLT communication
[kdenlive] / src / mainwindow.cpp
index 192b417e9da665de41d623d4667947abfca452da..4a6375497733639b43960629e1961ece2ef34b85 100644 (file)
@@ -1450,9 +1450,8 @@ void MainWindow::newFile(bool showProjectSettings, bool force)
     m_timelineArea->addTab(trackView, KIcon("kdenlive"), doc->description());
     if (!ok) {
         // MLT is broken
-        m_timelineArea->setEnabled(false);
-        m_projectList->setEnabled(false);
-        m_monitorManager->slotBlockMonitors();
+        //m_timelineArea->setEnabled(false);
+        //m_projectList->setEnabled(false);
         slotPreferences(6);
         return;
     }
@@ -1940,6 +1939,7 @@ void MainWindow::connectDocument(TrackView *trackView, KdenliveDoc *doc)   //cha
             disconnect(m_activeTimeline->projectView(), SIGNAL(clipItemSelected(ClipItem*, int)), this, SLOT(slotActivateEffectStackView()));
             disconnect(m_activeTimeline->projectView(), SIGNAL(transitionItemSelected(Transition*, int, QPoint, bool)), m_transitionConfig, SLOT(slotTransitionItemSelected(Transition*, int, QPoint, bool)));
             disconnect(m_activeTimeline->projectView(), SIGNAL(transitionItemSelected(Transition*, int, QPoint, bool)), this, SLOT(slotActivateTransitionView(Transition *)));
+            disconnect(m_activeTimeline->projectView(), SIGNAL(playMonitor()), m_projectMonitor, SLOT(slotPlay()));
             disconnect(m_zoomSlider, SIGNAL(valueChanged(int)), m_activeTimeline, SLOT(slotChangeZoom(int)));
             disconnect(m_activeTimeline->projectView(), SIGNAL(displayMessage(const QString&, MessageType)), m_messageLabel, SLOT(setMessage(const QString&, MessageType)));
             disconnect(m_activeTimeline->projectView(), SIGNAL(showClipFrame(DocClipBase *, QPoint, const int)), m_clipMonitor, SLOT(slotSetXml(DocClipBase *, QPoint, const int)));
@@ -2016,6 +2016,7 @@ void MainWindow::connectDocument(TrackView *trackView, KdenliveDoc *doc)   //cha
     connect(trackView->projectView(), SIGNAL(displayMessage(const QString&, MessageType)), m_messageLabel, SLOT(setMessage(const QString&, MessageType)));
 
     connect(trackView->projectView(), SIGNAL(showClipFrame(DocClipBase *, QPoint, const int)), m_clipMonitor, SLOT(slotSetXml(DocClipBase *, QPoint, const int)));
+    connect(trackView->projectView(), SIGNAL(playMonitor()), m_projectMonitor, SLOT(slotPlay()));
 
 
     connect(m_effectStack, SIGNAL(updateClipEffect(ClipItem*, QDomElement, QDomElement, int)), trackView->projectView(), SLOT(slotUpdateClipEffect(ClipItem*, QDomElement, QDomElement, int)));
@@ -2552,10 +2553,12 @@ void MainWindow::slotShowClipProperties(DocClipBase *clip)
                 if (description.isEmpty()) description = clip->getProperty("description");
                 else newprops.insert("templatetext", description);
                 //newprops.insert("xmldata", m_projectList->generateTemplateXml(newtemplate, description).toString());
-
-                EditClipCommand *command = new EditClipCommand(m_projectList, clip->getId(), clip->properties(), newprops, true);
-                m_activeDocument->commandStack()->push(command);
+                if (!newprops.isEmpty()) {
+                    EditClipCommand *command = new EditClipCommand(m_projectList, clip->getId(), clip->properties(), newprops, true);
+                    m_activeDocument->commandStack()->push(command);
+                }
             }
+            delete dia;
             return;
         }
         QString path = clip->getProperty("resource");
@@ -2583,7 +2586,9 @@ void MainWindow::slotShowClipProperties(DocClipBase *clip)
     ClipProperties dia(clip, m_activeDocument->timecode(), m_activeDocument->fps(), this);
     connect(&dia, SIGNAL(addMarker(const QString &, GenTime, QString)), m_activeTimeline->projectView(), SLOT(slotAddClipMarker(const QString &, GenTime, QString)));
     if (dia.exec() == QDialog::Accepted) {
-        EditClipCommand *command = new EditClipCommand(m_projectList, clip->getId(), clip->properties(), dia.properties(), true);
+        QMap <QString, QString> newprops = dia.properties();
+        if (newprops.isEmpty()) return;
+        EditClipCommand *command = new EditClipCommand(m_projectList, clip->getId(), clip->properties(), newprops, true);
         m_activeDocument->commandStack()->push(command);
 
         if (dia.needsTimelineRefresh()) {
@@ -3016,8 +3021,12 @@ void MainWindow::loadTranscoders()
     QMapIterator<QString, QString> i(profiles);
     while (i.hasNext()) {
         i.next();
+        QStringList data = i.value().split(";", QString::SkipEmptyParts);
         QAction *a = transMenu->addAction(i.key());
-        a->setData(i.value());
+        a->setData(data);
+        if (data.count() > 1) {
+            a->setToolTip(data.at(1));
+        }
         connect(a, SIGNAL(triggered()), this, SLOT(slotTranscode()));
     }
 }
@@ -3025,13 +3034,22 @@ void MainWindow::loadTranscoders()
 void MainWindow::slotTranscode(KUrl::List urls)
 {
     QString params;
+    QString desc;
+    QString condition;
     if (urls.isEmpty()) {
-        urls.append(m_projectList->currentClipUrl());
         QAction *action = qobject_cast<QAction *>(sender());
-        params = action->data().toString();
+        QStringList data = action->data().toStringList();
+        params = data.at(0);
+        if (data.count() > 1) desc = data.at(1);
+        if (data.count() > 2) condition = data.at(2);
+        urls << m_projectList->getConditionalUrls(condition);
+        urls.removeAll(KUrl());
     }
-    if (urls.isEmpty()) return;
-    ClipTranscode *d = new ClipTranscode(urls, params);
+    if (urls.isEmpty()) {
+        m_messageLabel->setMessage(i18n("No clip to transcode"), ErrorMessage);
+        return;
+    }
+    ClipTranscode *d = new ClipTranscode(urls, params, desc);
     connect(d, SIGNAL(addClip(KUrl)), this, SLOT(slotAddProjectClip(KUrl)));
     d->show();
     //QProcess::startDetached("ffmpeg", parameters);