From 6d2e3e28674988bd0911e8a6810ab50c6c25821d Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Mardelle Date: Tue, 20 Oct 2009 21:46:53 +0000 Subject: [PATCH] List images included in titles svn path=/trunk/kdenlive/; revision=4055 --- src/projectsettings.cpp | 44 +++++++++++++++++++++++------------------ src/titlewidget.cpp | 21 +++++++++++++++++++- src/titlewidget.h | 5 +++++ 3 files changed, 50 insertions(+), 20 deletions(-) diff --git a/src/projectsettings.cpp b/src/projectsettings.cpp index 58c8dd78..f7a71abb 100644 --- a/src/projectsettings.cpp +++ b/src/projectsettings.cpp @@ -21,6 +21,7 @@ #include "kdenlivesettings.h" #include "profilesdialog.h" #include "docclipbase.h" +#include "titlewidget.h" #include #include @@ -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 profilesInfo = ProfilesDialog::getProfilesInfo(); @@ -132,28 +133,33 @@ void ProjectSettings::slotUpdateFiles(bool cacheOnly) KIO::filesize_t unUsedSize = 0; QList 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(); diff --git a/src/titlewidget.cpp b/src/titlewidget.cpp index 5cb56afe..d3af1cf9 100644 --- a/src/titlewidget.cpp +++ b/src/titlewidget.cpp @@ -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()); diff --git a/src/titlewidget.h b/src/titlewidget.h index b6dec5ae..63b68abd 100644 --- a/src/titlewidget.h +++ b/src/titlewidget.h @@ -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. -- 2.39.2