X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fprojectsettings.cpp;h=75f5956cd39a22d71986fb0d50caddbead7118b8;hb=c3302003093710ee247ad84c0fe2ef3c579d417f;hp=ba8aebfe66a3b12f97eb2625f0023007f47df5d0;hpb=f41770656c58ffc541441d04a3845cd1005fcdcf;p=kdenlive diff --git a/src/projectsettings.cpp b/src/projectsettings.cpp index ba8aebfe..75f5956c 100644 --- a/src/projectsettings.cpp +++ b/src/projectsettings.cpp @@ -35,7 +35,7 @@ #include #include -ProjectSettings::ProjectSettings(ProjectList *projectlist, QMap metadata, QStringList lumas, int videotracks, int audiotracks, const QString projectPath, bool readOnlyTracks, bool savedProject, QWidget * parent) : +ProjectSettings::ProjectSettings(ProjectList *projectlist, QMap metadata, const 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); @@ -52,7 +52,7 @@ ProjectSettings::ProjectSettings(ProjectList *projectlist, QMap setUrl(KUrl(projectPath)); QString currentProf = KdenliveSettings::current_profile(); - for (int i = 0; i < profiles_list->count(); i++) { + for (int i = 0; i < profiles_list->count(); ++i) { if (profiles_list->itemData(i).toString() == currentProf) { profiles_list->setCurrentIndex(i); break; @@ -94,7 +94,7 @@ ProjectSettings::ProjectSettings(ProjectList *projectlist, QMap values = group.entryMap(); QMapIterator k(values); @@ -135,21 +135,59 @@ ProjectSettings::ProjectSettings(ProjectList *projectlist, QMap 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")); + if (metadata.contains("meta.attr.title.markup")) { + item->setText(1, metadata.value("meta.attr.title.markup")); + metadata.remove("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")); + if (metadata.contains("meta.attr.author.markup")) { + item->setText(1, metadata.value("meta.attr.author.markup")); + metadata.remove("meta.attr.author.markup"); + } + else if (metadata.contains("meta.attr.artist.markup")) { + item->setText(0, i18n("Artist")); + item->setData(0, Qt::UserRole, QString("meta.attr.artist.markup")); + item->setText(1, metadata.value("meta.attr.artist.markup")); + metadata.remove("meta.attr.artist.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")); + if (metadata.contains("meta.attr.copyright.markup")) { + item->setText(1, metadata.value("meta.attr.copyright.markup")); + metadata.remove("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")); + if (metadata.contains("meta.attr.year.markup")) { + item->setText(1, metadata.value("meta.attr.year.markup")); + metadata.remove("meta.attr.year.markup"); + } + else if (metadata.contains("meta.attr.date.markup")) { + item->setText(0, i18n("Date")); + item->setData(0, Qt::UserRole, QString("meta.attr.date.markup")); + item->setText(1, metadata.value("meta.attr.date.markup")); + metadata.remove("meta.attr.date.markup"); + } item->setFlags(Qt::ItemIsEditable | Qt::ItemIsSelectable | Qt::ItemIsEnabled); + QMap::const_iterator meta = metadata.constBegin(); + while (meta != metadata.constEnd()) { + item = new QTreeWidgetItem(metadata_list, QStringList() << meta.key().section('.', 2,2)); + item->setData(0, Qt::UserRole, meta.key()); + item->setText(1, meta.value()); + item->setFlags(Qt::ItemIsEditable | Qt::ItemIsSelectable | Qt::ItemIsEnabled); + ++meta; + } + + connect(add_metadata, SIGNAL(clicked()), this, SLOT(slotAddMetadataField())); + connect(delete_metadata, SIGNAL(clicked()), this, SLOT(slotDeleteMetadataField())); + add_metadata->setIcon(KIcon("list-add")); + delete_metadata->setIcon(KIcon("list-remove")); + slotUpdateDisplay(); if (m_projectList != NULL) { slotUpdateFiles(); @@ -158,7 +196,7 @@ ProjectSettings::ProjectSettings(ProjectList *projectlist, QMap widget(1)->setEnabled(false); connect(profiles_list, SIGNAL(currentIndexChanged(int)), this, SLOT(slotUpdateDisplay())); - connect(project_folder, SIGNAL(textChanged(const QString &)), this, SLOT(slotUpdateButton(const QString &))); + connect(project_folder, SIGNAL(textChanged(QString)), this, SLOT(slotUpdateButton(QString))); connect(button_export, SIGNAL(clicked()), this, SLOT(slotExportToText())); } @@ -166,7 +204,7 @@ void ProjectSettings::slotDeleteUnused() { QStringList toDelete; QList list = m_projectList->documentClipList(); - for (int i = 0; i < list.count(); i++) { + for (int i = 0; i < list.count(); ++i) { DocClipBase *clip = list.at(i); if (clip->numReferences() == 0 && clip->clipType() != SLIDESHOW) { KUrl url = clip->fileURL(); @@ -175,7 +213,7 @@ void ProjectSettings::slotDeleteUnused() } // make sure our urls are not used in another clip - for (int i = 0; i < list.count(); i++) { + for (int i = 0; i < list.count(); ++i) { DocClipBase *clip = list.at(i); if (clip->numReferences() > 0) { KUrl url = clip->fileURL(); @@ -268,7 +306,7 @@ void ProjectSettings::slotUpdateFiles(bool cacheOnly) new QTreeWidgetItem(images, QStringList() << file); } - for (int i = 0; i < list.count(); i++) { + for (int i = 0; i < list.count(); ++i) { DocClipBase *clip = list.at(i); if (clip->clipType() == SLIDESHOW) { QStringList subfiles = extractSlideshowUrls(clip->fileURL()); @@ -326,7 +364,7 @@ void ProjectSettings::slotUpdateFiles(bool cacheOnly) } allFonts.removeDuplicates(); // Hide unused categories - for (int i = 0; i < files_list->topLevelItemCount(); i++) { + for (int i = 0; i < files_list->topLevelItemCount(); ++i) { if (files_list->topLevelItem(i)->childCount() == 0) { files_list->topLevelItem(i)->setHidden(true); } @@ -388,7 +426,7 @@ KUrl ProjectSettings::selectedFolder() const return project_folder->url(); } -QPoint ProjectSettings::tracks() +QPoint ProjectSettings::tracks() const { QPoint p; p.setX(video_tracks->value()); @@ -444,7 +482,7 @@ QString ProjectSettings::proxyExtension() const } //static -QStringList ProjectSettings::extractPlaylistUrls(QString path) +QStringList ProjectSettings::extractPlaylistUrls(const QString &path) { QStringList urls; QDomDocument doc; @@ -459,7 +497,7 @@ QStringList ProjectSettings::extractPlaylistUrls(QString path) 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++) { + for (int i = 0; i < files.count(); ++i) { QDomElement e = files.at(i).toElement(); QString type = EffectsList::property(e, "mlt_service"); if (type != "colour") { @@ -483,7 +521,7 @@ QStringList ProjectSettings::extractPlaylistUrls(QString path) // luma files for transitions files = doc.elementsByTagName("transition"); - for (int i = 0; i < files.count(); i++) { + for (int i = 0; i < files.count(); ++i) { QDomElement e = files.at(i).toElement(); QString url = EffectsList::property(e, "luma"); if (!url.isEmpty()) { @@ -497,7 +535,7 @@ QStringList ProjectSettings::extractPlaylistUrls(QString path) //static -QStringList ProjectSettings::extractSlideshowUrls(KUrl url) +QStringList ProjectSettings::extractSlideshowUrls(const KUrl &url) { QStringList urls; QString path = url.directory(KUrl::AppendTrailingSlash); @@ -535,7 +573,7 @@ void ProjectSettings::slotExportToText() 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++) { + 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"); for (int j = 0; j < files_list->topLevelItem(i)->childCount(); j++) { @@ -549,7 +587,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(); @@ -568,12 +607,13 @@ void ProjectSettings::slotUpdateProxyParams() const QMap ProjectSettings::metadata() const { QMap metadata; - for (int i = 0; i < metadata_list->topLevelItemCount(); i++) + 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(); + if (key.isEmpty()) key = "meta.attr." + item->text(0).simplified() + ".markup"; QString value = item->text(1); metadata.insert(key, value); } @@ -581,6 +621,18 @@ const QMap ProjectSettings::metadata() const return metadata; } +void ProjectSettings::slotAddMetadataField() +{ + QTreeWidgetItem *item = new QTreeWidgetItem(metadata_list, QStringList() << i18n("field_name")); + item->setFlags(Qt::ItemIsEditable | Qt::ItemIsSelectable | Qt::ItemIsEnabled); +} + +void ProjectSettings::slotDeleteMetadataField() +{ + QTreeWidgetItem *item = metadata_list->currentItem(); + if (item) delete item; +} + #include "projectsettings.moc"