]> git.sesse.net Git - kdenlive/blobdiff - src/kdenlivedoc.cpp
Add new dialog for template clips, fix thumbs & monitors not updating when clip is...
[kdenlive] / src / kdenlivedoc.cpp
index fd4a789b4dd41b60d0f3ce47a8b7d3c297026178..ef3d2369a49b41c71327dc61bf94cb4c5053d1fa 100644 (file)
@@ -41,6 +41,7 @@
 
 #include <QCryptographicHash>
 #include <QFile>
+#include <QInputDialog>
 
 #include <mlt++/Mlt.h>
 
@@ -190,7 +191,6 @@ KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, QUndoGroup
                                 infoXml.removeChild(markers);
                             }
                             setProfilePath(profileName);
-                            mlt.removeChild(infoXml);
                             kDebug() << "Reading file: " << url.path() << ", found clips: " << producers.count();
                         }
                     }
@@ -578,7 +578,6 @@ void KdenliveDoc::setProfilePath(QString path)
             KMessageBox::information(kapp->activeWindow(), i18n("Project profile was not found, using default profile."), i18n("Missing Profile"));
             m_profile = ProfilesDialog::getVideoProfile(KdenliveSettings::default_profile());
         } else {
-            KMessageBox::information(kapp->activeWindow(), i18n("Project profile was not found, it will be added to your system now."), i18n("Missing Profile"));
             m_profile.description = profileInfo.attribute("description");
             m_profile.frame_rate_num = profileInfo.attribute("frame_rate_num").toInt();
             m_profile.frame_rate_den = profileInfo.attribute("frame_rate_den").toInt();
@@ -589,7 +588,29 @@ void KdenliveDoc::setProfilePath(QString path)
             m_profile.sample_aspect_den = profileInfo.attribute("sample_aspect_den").toInt();
             m_profile.display_aspect_num = profileInfo.attribute("display_aspect_num").toInt();
             m_profile.display_aspect_den = profileInfo.attribute("display_aspect_den").toInt();
-            ProfilesDialog::saveProfile(m_profile);
+            QString existing = ProfilesDialog::existingProfile(m_profile);
+            if (!existing.isEmpty()) {
+                m_profile = ProfilesDialog::getVideoProfile(existing);
+                KMessageBox::information(kapp->activeWindow(), i18n("Project profile not found, replacing with existing one: %1", m_profile.description), i18n("Missing Profile"));
+            } else {
+                QString newDesc = m_profile.description;
+                bool ok = true;
+                while (ok && (newDesc.isEmpty() || ProfilesDialog::existingProfileDescription(newDesc))) {
+                    newDesc = QInputDialog::getText(kapp->activeWindow(), i18n("Existing Profile"), i18n("Your project uses an unknown profile.\nIt uses an existing profile name: %1.\nPlease choose a new name to save it", newDesc), QLineEdit::Normal, newDesc, &ok);
+                }
+                if (ok == false) {
+                    // User canceled, use default profile
+                    m_profile = ProfilesDialog::getVideoProfile(KdenliveSettings::default_profile());
+                } else {
+                    if (newDesc != m_profile.description) {
+                        // Profile description existed, was replaced by new one
+                        m_profile.description = newDesc;
+                    } else {
+                        KMessageBox::information(kapp->activeWindow(), i18n("Project profile was not found, it will be added to your system now."), i18n("Missing Profile"));
+                    }
+                    ProfilesDialog::saveProfile(m_profile);
+                }
+            }
             setModified(true);
         }
     }
@@ -1025,22 +1046,41 @@ DocClipBase *KdenliveDoc::getBaseClip(const QString &clipId)
     return m_clipManager->getClipById(clipId);
 }
 
-void KdenliveDoc::slotCreateTextClip(QString /*group*/, const QString &/*groupId*/)
+void KdenliveDoc::slotCreateTextClip(QString group, const QString &groupId, const QString &templatePath)
 {
     QString titlesFolder = projectFolder().path() + "/titles/";
     KStandardDirs::makeDir(titlesFolder);
-    TitleWidget *dia_ui = new TitleWidget(KUrl(), titlesFolder, m_render, kapp->activeWindow());
+    TitleWidget *dia_ui = new TitleWidget(templatePath, titlesFolder, m_render, kapp->activeWindow());
     if (dia_ui->exec() == QDialog::Accepted) {
         QStringList titleInfo = TitleWidget::getFreeTitleInfo(projectFolder());
         QImage pix = dia_ui->renderedPixmap();
         pix.save(titleInfo.at(1));
         //dia_ui->saveTitle(path + ".kdenlivetitle");
-        m_clipManager->slotAddTextClipFile(titleInfo.at(0), titleInfo.at(1), dia_ui->xml().toString(), QString(), QString());
+        m_clipManager->slotAddTextClipFile(titleInfo.at(0), titleInfo.at(1), dia_ui->xml().toString(), group, groupId);
         setModified(true);
     }
     delete dia_ui;
 }
 
+void KdenliveDoc::slotCreateTextTemplateClip(QString group, const QString &groupId, KUrl path)
+{
+    QString titlesFolder = projectFolder().path() + "/titles/";
+    if (path.isEmpty()) {
+        path = KFileDialog::getOpenUrl(KUrl(titlesFolder), "*.kdenlivetitle", kapp->activeWindow(), i18n("Enter Template Path"));
+    }
+
+    if (path.isEmpty()) return;
+
+    QStringList titleInfo = TitleWidget::getFreeTitleInfo(projectFolder());
+
+    TitleWidget *dia_ui = new TitleWidget(path, titlesFolder, m_render, kapp->activeWindow());
+    QImage pix = dia_ui->renderedPixmap();
+    pix.save(titleInfo.at(1));
+    delete dia_ui;
+    m_clipManager->slotAddTextTemplateClip(titleInfo.at(0), titleInfo.at(1), path, group, groupId);
+    setModified(true);
+}
+
 int KdenliveDoc::tracksCount() const
 {
     return m_tracksList.count();