]> git.sesse.net Git - kdenlive/blobdiff - src/mainwindow.cpp
Introducing template based title clips
[kdenlive] / src / mainwindow.cpp
index bec755b3cb9237dfd610f03b9b18063035aa8ff1..fe9f0a89d44c0f73b4175ee2b36ee2ccdd5fda4a 100644 (file)
@@ -380,7 +380,10 @@ MainWindow::MainWindow(const QString &MltPath, const KUrl & Url, QWidget *parent
 void MainWindow::queryQuit()
 {
     kDebug() << "----- SAVING CONFUIG";
-    if (queryClose()) kapp->quit();
+    if (queryClose()) {
+        Mlt::Factory::close();
+        kapp->quit();
+    }
 }
 
 //virtual
@@ -1098,6 +1101,10 @@ void MainWindow::setupActions()
     collection->addAction("add_text_clip", addTitleClip);
     connect(addTitleClip , SIGNAL(triggered()), m_projectList, SLOT(slotAddTitleClip()));
 
+    QAction *addTitleTemplateClip = new KAction(KIcon("kdenlive-add-text-clip"), i18n("Add Template Title"), this);
+    collection->addAction("add_text_template_clip", addTitleTemplateClip);
+    connect(addTitleTemplateClip , SIGNAL(triggered()), m_projectList, SLOT(slotAddTitleTemplateClip()));
+
     QAction *addFolderButton = new KAction(KIcon("folder-new"), i18n("Create Folder"), this);
     collection->addAction("add_folder", addFolderButton);
     connect(addFolderButton , SIGNAL(triggered()), m_projectList, SLOT(slotAddFolder()));
@@ -1131,6 +1138,7 @@ void MainWindow::setupActions()
     addClips->addAction(addColorClip);
     addClips->addAction(addSlideClip);
     addClips->addAction(addTitleClip);
+    addClips->addAction(addTitleTemplateClip);
     addClips->addAction(addFolderButton);
 
     addClips->addAction(reloadClip);
@@ -1279,7 +1287,7 @@ void MainWindow::closeCurrentDocument()
         delete m_activeDocument;
         m_activeDocument = NULL;
         m_effectStack->clear();
-        m_transitionConfig->slotTransitionItemSelected(NULL, QPoint(), false);
+        m_transitionConfig->slotTransitionItemSelected(NULL, 0, QPoint(), false);
     } else delete docToClose;
     if (w == m_activeTimeline) {
         delete m_activeTimeline;
@@ -1527,7 +1535,7 @@ void MainWindow::slotEditProfiles()
 void MainWindow::slotDetectAudioDriver()
 {
     //decide which audio driver is really best, in some cases SDL is wrong
-    if(KdenliveSettings::audiodrivername().isEmpty()) {
+    if (KdenliveSettings::audiodrivername().isEmpty()) {
         QString driver;
         KProcess readProcess;
         //PulseAudio needs to be selected if it exists, the ALSA pulse pcm device is not fast enough.
@@ -1539,7 +1547,7 @@ void MainWindow::slotDetectAudioDriver()
             QString result = QString(readProcess.readAllStandardOutput());
             kDebug() << "// / / / / / READING PACTL: ";
             kDebug() << result;
-            if(!result.isEmpty()) {
+            if (!result.isEmpty()) {
                 driver = "pulse";
                 kDebug() << "// / / / / PULSEAUDIO DETECTED";
             }
@@ -1815,8 +1823,8 @@ void MainWindow::connectDocument(TrackView *trackView, KdenliveDoc *doc)   //cha
             disconnect(m_activeDocument, SIGNAL(deleteTimelineClip(const QString &)), m_activeTimeline, SLOT(slotDeleteClip(const QString &)));
             disconnect(m_activeTimeline->projectView(), SIGNAL(clipItemSelected(ClipItem*, int)), m_effectStack, SLOT(slotClipItemSelected(ClipItem*, int)));
             disconnect(m_activeTimeline->projectView(), SIGNAL(clipItemSelected(ClipItem*, int)), this, SLOT(slotActivateEffectStackView()));
-            disconnect(m_activeTimeline, SIGNAL(transitionItemSelected(Transition*, QPoint, bool)), m_transitionConfig, SLOT(slotTransitionItemSelected(Transition*, QPoint, bool)));
-            disconnect(m_activeTimeline, SIGNAL(transitionItemSelected(Transition*, QPoint, bool)), this, SLOT(slotActivateTransitionView(Transition *)));
+            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_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 *, const int)), m_clipMonitor, SLOT(slotSetXml(DocClipBase *, const int)));
@@ -1875,8 +1883,8 @@ void MainWindow::connectDocument(TrackView *trackView, KdenliveDoc *doc)   //cha
 
     connect(trackView->projectView(), SIGNAL(clipItemSelected(ClipItem*, int)), m_effectStack, SLOT(slotClipItemSelected(ClipItem*, int)));
     connect(trackView->projectView(), SIGNAL(clipItemSelected(ClipItem*, int)), this, SLOT(slotActivateEffectStackView()));
-    connect(trackView, SIGNAL(transitionItemSelected(Transition*, QPoint, bool)), m_transitionConfig, SLOT(slotTransitionItemSelected(Transition*, QPoint, bool)));
-    connect(trackView, SIGNAL(transitionItemSelected(Transition*, QPoint, bool)), this, SLOT(slotActivateTransitionView(Transition *)));
+    connect(trackView->projectView(), SIGNAL(transitionItemSelected(Transition*, int, QPoint, bool)), m_transitionConfig, SLOT(slotTransitionItemSelected(Transition*, int, QPoint, bool)));
+    connect(trackView->projectView(), SIGNAL(transitionItemSelected(Transition*, int, QPoint, bool)), this, SLOT(slotActivateTransitionView(Transition *)));
     m_zoomSlider->setValue(doc->zoom());
     connect(m_zoomSlider, SIGNAL(valueChanged(int)), trackView, SLOT(slotChangeZoom(int)));
     connect(trackView->projectView(), SIGNAL(zoomIn()), this, SLOT(slotZoomIn()));
@@ -2316,6 +2324,15 @@ void MainWindow::slotShowClipProperties(DocClipBase *clip)
 {
     if (clip->clipType() == TEXT) {
         QString titlepath = m_activeDocument->projectFolder().path() + "/titles/";
+        if (!clip->getProperty("xmltemplate").isEmpty()) {
+            // template text clip
+            KUrl path = KUrlRequesterDialog::getUrl(clip->getProperty("xmltemplate"), this, i18n("Change template path"));
+            if (!path.isEmpty() && (path.path() != clip->getProperty("xmltemplate"))) {
+                // Clip template modified, update
+                m_projectList->regenerateTemplate(clip->getId());
+            }
+            return;
+        }
         QString path = clip->getProperty("resource");
         TitleWidget *dia_ui = new TitleWidget(KUrl(), titlepath, m_projectMonitor->render, this);
         QDomDocument doc;