X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fprojectsettings.cpp;h=9289e18e0875a4099d61f08fae83573a104eb684;hb=9ad93a6f43ea95f4f43acd9bdd226ec2253621e1;hp=0504ba827552e0af64caa4553c26606a192fec7d;hpb=43d27d5a89c1081ff69b79a5949fc87e873781d6;p=kdenlive diff --git a/src/projectsettings.cpp b/src/projectsettings.cpp index 0504ba82..9289e18e 100644 --- a/src/projectsettings.cpp +++ b/src/projectsettings.cpp @@ -35,7 +35,7 @@ #include #include -ProjectSettings::ProjectSettings(ProjectList *projectlist, QStringList lumas, int videotracks, int audiotracks, const QString projectPath, bool readOnlyTracks, bool savedProject, QWidget * parent) : +ProjectSettings::ProjectSettings(ProjectList *projectlist, QMap metadata, 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); @@ -130,6 +130,26 @@ ProjectSettings::ProjectSettings(ProjectList *projectlist, QStringList lumas, in video_tracks->setEnabled(false); audio_tracks->setEnabled(false); } + + + // Metadata list + QTreeWidgetItem *item = new QTreeWidgetItem(metadata_list, QStringList() << i18n("Title")); + item->setData(0, Qt::UserRole, QString("meta.attr.title.markup")); + if (metadata.contains("meta.attr.title.markup")) item->setText(1, metadata.value("meta.attr.title.markup")); + item->setFlags(Qt::ItemIsEditable | Qt::ItemIsSelectable | Qt::ItemIsEnabled); + item = new QTreeWidgetItem(metadata_list, QStringList() << i18n("Author")); + item->setData(0, Qt::UserRole, QString("meta.attr.author.markup")); + if (metadata.contains("meta.attr.author.markup")) item->setText(1, metadata.value("meta.attr.author.markup")); + item->setFlags(Qt::ItemIsEditable | Qt::ItemIsSelectable | Qt::ItemIsEnabled); + item = new QTreeWidgetItem(metadata_list, QStringList() << i18n("Copyright")); + item->setData(0, Qt::UserRole, QString("meta.attr.copyright.markup")); + if (metadata.contains("meta.attr.copyright.markup")) item->setText(1, metadata.value("meta.attr.copyright.markup")); + item->setFlags(Qt::ItemIsEditable | Qt::ItemIsSelectable | Qt::ItemIsEnabled); + item = new QTreeWidgetItem(metadata_list, QStringList() << i18n("Year")); + item->setData(0, Qt::UserRole, QString("meta.attr.year.markup")); + if (metadata.contains("meta.attr.year.markup")) item->setText(1, metadata.value("meta.attr.year.markup")); + item->setFlags(Qt::ItemIsEditable | Qt::ItemIsSelectable | Qt::ItemIsEnabled); + slotUpdateDisplay(); if (m_projectList != NULL) { slotUpdateFiles(); @@ -235,6 +255,9 @@ void ProjectSettings::slotUpdateFiles(bool cacheOnly) QTreeWidgetItem *texts = new QTreeWidgetItem(files_list, QStringList() << i18n("Text clips")); texts->setIcon(0, KIcon("text-plain")); texts->setExpanded(true); + QTreeWidgetItem *playlists = new QTreeWidgetItem(files_list, QStringList() << i18n("Playlist clips")); + playlists->setIcon(0, KIcon("video-mlt-playlist")); + playlists->setExpanded(true); QTreeWidgetItem *others = new QTreeWidgetItem(files_list, QStringList() << i18n("Other clips")); others->setIcon(0, KIcon("unknown")); others->setExpanded(true); @@ -265,6 +288,9 @@ void ProjectSettings::slotUpdateFiles(bool cacheOnly) case IMAGE: new QTreeWidgetItem(images, QStringList() << clip->fileURL().path()); break; + case PLAYLIST: + new QTreeWidgetItem(playlists, QStringList() << clip->fileURL().path()); + break; case UNKNOWN: new QTreeWidgetItem(others, QStringList() << clip->fileURL().path()); break; @@ -438,6 +464,9 @@ QStringList ProjectSettings::extractPlaylistUrls(QString path) QString type = EffectsList::property(e, "mlt_service"); if (type != "colour") { QString url = EffectsList::property(e, "resource"); + if (type == "framebuffer") { + url = url.section('?', 0, 0); + } if (!url.isEmpty()) { if (!url.startsWith('/')) url.prepend(root); if (url.section('.', 0, -2).endsWith("/.all")) { @@ -480,20 +509,20 @@ QStringList ProjectSettings::extractSlideshowUrls(KUrl url) filters << "*." + ext; dir.setNameFilters(filters); QStringList result = dir.entryList(QDir::Files); - urls.append(path + filters.at(0) + " (" + i18np("1 image found", "%1 images found", result.count()) + ")"); + urls.append(path + filters.at(0) + " (" + i18np("1 image found", "%1 images found", result.count()) + ')'); } else { // this is a pattern slideshow, like sequence%4d.jpg QString filter = url.fileName(); QString ext = filter.section('.', -1); filter = filter.section('%', 0, -2); - QString regexp = "^" + filter + "\\d+\\." + ext + "$"; + QString regexp = '^' + filter + "\\d+\\." + ext + '$'; QRegExp rx(regexp); int count = 0; QStringList result = dir.entryList(QDir::Files); foreach(const QString & path, result) { if (rx.exactMatch(path)) count++; } - urls.append(url.path() + " (" + i18np("1 image found", "%1 images found", count) + ")"); + urls.append(url.path() + " (" + i18np("1 image found", "%1 images found", count) + ')'); } return urls; } @@ -503,14 +532,14 @@ void ProjectSettings::slotExportToText() QString savePath = KFileDialog::getSaveFileName(project_folder->url(), "text/plain", this); if (savePath.isEmpty()) return; QString data; - data.append(i18n("Project folder: %1", project_folder->url().path()) + "\n"); - data.append(i18n("Project profile: %1", profiles_list->currentText()) + "\n"); + data.append(i18n("Project folder: %1", project_folder->url().path()) + '\n'); + data.append(i18n("Project profile: %1", profiles_list->currentText()) + '\n'); data.append(i18n("Total clips: %1 (%2 used in timeline).", files_count->text(), used_count->text()) + "\n\n"); for (int i = 0; i < files_list->topLevelItemCount(); i++) { if (files_list->topLevelItem(i)->childCount() > 0) { - data.append("\n" + files_list->topLevelItem(i)->text(0) + ":\n\n"); + data.append('\n' + files_list->topLevelItem(i)->text(0) + ":\n\n"); for (int j = 0; j < files_list->topLevelItem(i)->childCount(); j++) { - data.append(files_list->topLevelItem(i)->child(j)->text(0) + "\n"); + data.append(files_list->topLevelItem(i)->child(j)->text(0) + '\n'); } } } @@ -520,7 +549,8 @@ void ProjectSettings::slotExportToText() return; } QFile xmlf(tmpfile.fileName()); - xmlf.open(QIODevice::WriteOnly); + if (!xmlf.open(QIODevice::WriteOnly)) + return; xmlf.write(data.toUtf8()); if (xmlf.error() != QFile::NoError) { xmlf.close(); @@ -536,6 +566,22 @@ void ProjectSettings::slotUpdateProxyParams() proxyparams->setPlainText(params.section(';', 0, 0)); } +const QMap ProjectSettings::metadata() const +{ + QMap metadata; + for (int i = 0; i < metadata_list->topLevelItemCount(); i++) + { + QTreeWidgetItem *item = metadata_list->topLevelItem(i); + if (!item->text(1).simplified().isEmpty()) { + // Insert metadata entry + QString key = item->data(0, Qt::UserRole).toString(); + QString value = item->text(1); + metadata.insert(key, value); + } + } + return metadata; +} + #include "projectsettings.moc"