#include "kdenlivesettings.h"
#include "profilesdialog.h"
#include "docclipbase.h"
+#include "titlewidget.h"
+#include "effectslist.h"
#include <KStandardDirs>
#include <KMessageBox>
#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);
video_thumbs->setChecked(KdenliveSettings::videothumbnails());
audio_tracks->setValue(audiotracks);
video_tracks->setValue(videotracks);
+
if (readOnlyTracks) {
video_tracks->setEnabled(false);
audio_tracks->setEnabled(false);
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++) {
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 and titles, files in playlist clips
+ // 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;
+ }
if (clip->numReferences() == 0) {
unused++;
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));
return audio_thumbs->isChecked();
}
+
+//static
+QStringList ProjectSettings::extractPlaylistUrls(QString path)
+{
+ QStringList urls;
+ QDomDocument doc;
+ QFile file(path);
+ if (!file.open(QIODevice::ReadOnly))
+ return urls;
+ if (!doc.setContent(&file)) {
+ file.close();
+ return urls;
+ }
+ 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") {
+ QString url = EffectsList::property(e, "resource");
+ if (!url.isEmpty()) {
+ if (!url.startsWith('/')) url.prepend(root);
+ 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);
+ }
+ }
+ }
+ }
+
+ // 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;
+}
+
#include "projectsettings.moc"