]> git.sesse.net Git - kdenlive/commitdiff
List images included in titles
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Tue, 20 Oct 2009 21:46:53 +0000 (21:46 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Tue, 20 Oct 2009 21:46:53 +0000 (21:46 +0000)
svn path=/trunk/kdenlive/; revision=4055

src/projectsettings.cpp
src/titlewidget.cpp
src/titlewidget.h

index 58c8dd78cb93d3026bd0ef35451326aa32dae9c9..f7a71abb694adb1d50e1908cf7306c1c893b0387 100644 (file)
@@ -21,6 +21,7 @@
 #include "kdenlivesettings.h"
 #include "profilesdialog.h"
 #include "docclipbase.h"
+#include "titlewidget.h"
 
 #include <KStandardDirs>
 #include <KMessageBox>
@@ -35,7 +36,7 @@ ProjectSettings::ProjectSettings(ProjectList *projectlist, int videotracks, int
         QDialog(parent), m_savedProject(savedProject), m_projectList(projectlist)
 {
     setupUi(this);
-
+    
     list_search->setListWidget(files_list);
 
     QMap <QString, QString> profilesInfo = ProfilesDialog::getProfilesInfo();
@@ -132,28 +133,33 @@ void ProjectSettings::slotUpdateFiles(bool cacheOnly)
     KIO::filesize_t unUsedSize = 0;
     QList <DocClipBase*> list = m_projectList->documentClipList();
     files_list->clear();
-
+    
     // List all files that are used in the project. That also means:
-    // images included in slideshow
-    // TODO: images included in titles, images used in luma transitions, files used in playlist clips, files used for LADSPA effects
-
+    // images included in slideshow, titles
+    // TODO: images used in luma transitions, files used in playlist clips, files used for LADSPA effects
+    
     QStringList allFiles;
     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));
-            }
-        } else if (!clip->fileURL().isEmpty()) allFiles.append(clip->fileURL().path());
-
+       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));
+           }
+       }
+       else if (!clip->fileURL().isEmpty()) allFiles.append(clip->fileURL().path());
+       if (clip->clipType() == TEXT) {
+           QStringList images = TitleWidget::extractImageList(clip->getProperty("xmldata"));
+           allFiles << images;
+       }
+       
         if (clip->numReferences() == 0) {
             unused++;
             unUsedSize += clip->fileSize();
index 5cb56afee7f60c104f76323738b1e28bc0ae0ba4..d3af1cf98c254fce3306486242c2d72316cbf735 100644 (file)
@@ -336,6 +336,7 @@ QStringList TitleWidget::getFreeTitleInfo(const KUrl &projectUrl, bool isClone)
     return result;
 }
 
+// static
 QString TitleWidget::getTitleResourceFromName(const KUrl &projectUrl, const QString &titleName)
 {
     QStringList result;
@@ -344,6 +345,22 @@ QString TitleWidget::getTitleResourceFromName(const KUrl &projectUrl, const QStr
     return titlePath + titleName + ".png";
 }
 
+// static 
+QStringList TitleWidget::extractImageList(QString xml)
+{
+    QStringList result;
+    if (xml.isEmpty()) return result;
+    QDomDocument doc;
+    doc.setContent(xml);
+    QDomNodeList images = doc.elementsByTagName("content");
+    for (int i = 0; i < images.count(); i++) {
+       if (images.at(i).toElement().hasAttribute("url"))
+           result.append(images.at(i).toElement().attribute("url"));
+    }
+    return result;
+}
+
+
 //virtual
 void TitleWidget::resizeEvent(QResizeEvent * /*event*/)
 {
@@ -403,7 +420,9 @@ void TitleWidget::slotSelectTool()
 
 void TitleWidget::slotImageTool()
 {
-    KUrl url = KFileDialog::getOpenUrl(KUrl(), "*.svg *.png *.jpg *.jpeg *.gif *.raw", this, i18n("Load Image"));
+    // TODO: find a way to get a list of all supported image types...
+    QString allExtensions = "image/gif image/jpeg image/png image/x-tga image/x-bmp image/svg+xml image/tiff image/x-xcf-gimp image/x-vnd.adobe.photoshop image/x-pcx image/x-exr";
+    KUrl url = KFileDialog::getOpenUrl(KUrl(), allExtensions, this, i18n("Load Image")); //"*.svg *.png *.jpg *.jpeg *.gif *.raw"
     if (!url.isEmpty()) {
         if (url.path().endsWith(".svg")) {
             QGraphicsSvgItem *svg = new QGraphicsSvgItem(url.toLocalFile());
index b6dec5ae257e29ce05568f6faed47f749f875361..63b68abd63bf2c1e46886d495b21321c07c3ec02 100644 (file)
@@ -61,6 +61,11 @@ public:
      *
      * The path "/titles/" is appended to projectUrl to locate the actual directory that contains the title pngs. */
     static QStringList getFreeTitleInfo(const KUrl &projectUrl, bool isClone = false);
+    
+    /** \brief Return a list af all images included in a title 
+     * \param xml The xml data for title
+    */
+    static QStringList extractImageList(QString xml);
 
     /** \brief Build a filename from a projectUrl and a titleName
      * \param projectUrl Url to directory of project.