]> git.sesse.net Git - kdenlive/blobdiff - src/projectsettings.cpp
automatically select if we should export audio or not:
[kdenlive] / src / projectsettings.cpp
index 4218a00a419b6a4b9ddcb140cb1999d6dd058a0c..9891810fe948e7f1dc56d7a2b289ec488e3d4f3a 100644 (file)
@@ -33,8 +33,8 @@
 #include <QDir>
 #include <kmessagebox.h>
 
-ProjectSettings::ProjectSettings(ProjectList *projectlist, int videotracks, int audiotracks, const QString projectPath, bool readOnlyTracks, bool savedProject, QWidget * parent) :
-        QDialog(parent), m_savedProject(savedProject), m_projectList(projectlist)
+ProjectSettings::ProjectSettings(ProjectList *projectlist, QStringList lumas, int videotracks, int audiotracks, const QString projectPath, bool readOnlyTracks, bool savedProject, QWidget * parent) :
+        QDialog(parent), m_savedProject(savedProject), m_projectList(projectlist), m_lumas(lumas)
 {
     setupUi(this);
 
@@ -63,6 +63,7 @@ ProjectSettings::ProjectSettings(ProjectList *projectlist, int videotracks, int
     video_thumbs->setChecked(KdenliveSettings::videothumbnails());
     audio_tracks->setValue(audiotracks);
     video_tracks->setValue(videotracks);
+
     if (readOnlyTracks) {
         video_tracks->setEnabled(false);
         audio_tracks->setEnabled(false);
@@ -85,10 +86,9 @@ void ProjectSettings::slotDeleteUnused()
         DocClipBase *clip = list.at(i);
         if (clip->numReferences() == 0 && clip->clipType() != SLIDESHOW) {
             KUrl url = clip->fileURL();
-            if (!url.isEmpty()) toDelete << url.path();
+            if (!url.isEmpty() && !toDelete.contains(url.path())) toDelete << url.path();
         }
     }
-    toDelete.removeDuplicates();
 
     // make sure our urls are not used in another clip
     for (int i = 0; i < list.count(); i++) {
@@ -140,24 +140,20 @@ void ProjectSettings::slotUpdateFiles(bool cacheOnly)
     // TODO: images used in luma transitions, files used for LADSPA effects?
 
     QStringList allFiles;
+    QStringList allFonts;
+    allFiles << m_lumas;
     for (int i = 0; i < list.count(); i++) {
         DocClipBase *clip = list.at(i);
         if (clip->clipType() == SLIDESHOW) {
             // special case, list all images
-            QString path = clip->fileURL().directory();
-            QString ext = clip->fileURL().path().section('.', -1);
-            QDir dir(path);
-            QStringList filters;
-            filters << "*." + ext;
-            dir.setNameFilters(filters);
-            QStringList result = dir.entryList(QDir::Files);
-            for (int j = 0; j < result.count(); j++) {
-                allFiles.append(path + result.at(j));
-            }
+            QStringList files = extractSlideshowUrls(clip->fileURL());
+            allFiles << files;
         } else if (!clip->fileURL().isEmpty()) allFiles.append(clip->fileURL().path());
         if (clip->clipType() == TEXT) {
             QStringList images = TitleWidget::extractImageList(clip->getProperty("xmldata"));
+            QStringList fonts = TitleWidget::extractFontList(clip->getProperty("xmldata"));
             allFiles << images;
+            allFonts << fonts;
         } else if (clip->clipType() == PLAYLIST) {
             QStringList files = extractPlaylistUrls(clip->fileURL().path());
             allFiles << files;
@@ -171,9 +167,13 @@ void ProjectSettings::slotUpdateFiles(bool cacheOnly)
             usedSize += clip->fileSize();
         }
     }
+#if QT_VERSION >= 0x040500
     allFiles.removeDuplicates();
+    allFonts.removeDuplicates();
+#endif
     files_count->setText(QString::number(allFiles.count()));
     files_list->addItems(allFiles);
+    fonts_list->addItems(allFonts);
     used_count->setText(QString::number(used));
     used_size->setText(KIO::convertSize(usedSize));
     unused_count->setText(QString::number(unused));
@@ -237,6 +237,7 @@ bool ProjectSettings::enableAudioThumbs() const
     return audio_thumbs->isChecked();
 }
 
+
 //static
 QStringList ProjectSettings::extractPlaylistUrls(QString path)
 {
@@ -251,16 +252,19 @@ QStringList ProjectSettings::extractPlaylistUrls(QString path)
     }
     file.close();
     QString root = doc.documentElement().attribute("root");
+    if (!root.isEmpty() && !root.endsWith('/')) root.append('/');
     QDomNodeList files = doc.elementsByTagName("producer");
     for (int i = 0; i < files.count(); i++) {
         QDomElement e = files.at(i).toElement();
         QString type = EffectsList::property(e, "mlt_service");
         if (type != "colour") {
-            //TODO: slideshows (.all.*)
             QString url = EffectsList::property(e, "resource");
             if (!url.isEmpty()) {
                 if (!url.startsWith('/')) url.prepend(root);
-                urls << url;
+                if (url.section('.', 0, -2).endsWith("/.all")) {
+                    // slideshow clip, extract image urls
+                    urls << extractSlideshowUrls(KUrl(url));
+                } else urls << url;
                 if (url.endsWith(".mlt") || url.endsWith(".kdenlive")) {
                     //TODO: Do something to avoid infinite loops if 2 files reference themselves...
                     urls << extractPlaylistUrls(url);
@@ -268,6 +272,36 @@ QStringList ProjectSettings::extractPlaylistUrls(QString path)
             }
         }
     }
+
+    // luma files for transitions
+    files = doc.elementsByTagName("transition");
+    for (int i = 0; i < files.count(); i++) {
+        QDomElement e = files.at(i).toElement();
+        QString url = EffectsList::property(e, "luma");
+        if (!url.isEmpty()) {
+            if (!url.startsWith('/')) url.prepend(root);
+            urls << url;
+        }
+    }
+
+    return urls;
+}
+
+
+//static
+QStringList ProjectSettings::extractSlideshowUrls(KUrl url)
+{
+    QStringList urls;
+    QString path = url.directory(KUrl::AppendTrailingSlash);
+    QString ext = url.path().section('.', -1);
+    QDir dir(path);
+    QStringList filters;
+    filters << "*." + ext;
+    dir.setNameFilters(filters);
+    QStringList result = dir.entryList(QDir::Files);
+    for (int j = 0; j < result.count(); j++) {
+        urls.append(path + result.at(j));
+    }
     return urls;
 }