]> git.sesse.net Git - kdenlive/blobdiff - src/projectsettings.cpp
Cleaning code style of Definitions.
[kdenlive] / src / projectsettings.cpp
index ba8aebfe66a3b12f97eb2625f0023007f47df5d0..848a0718c87c92f1d7fa6b12b89404e4f2d2fb0b 100644 (file)
@@ -21,7 +21,7 @@
 #include "kdenlivesettings.h"
 #include "profilesdialog.h"
 #include "docclipbase.h"
-#include "titlewidget.h"
+#include "widgets/titlewidget.h"
 #include "effectslist.h"
 
 #include <KStandardDirs>
@@ -35,7 +35,7 @@
 #include <QDir>
 #include <kmessagebox.h>
 
-ProjectSettings::ProjectSettings(ProjectList *projectlist, QMap <QString, QString> metadata, QStringList lumas, int videotracks, int audiotracks, const QString projectPath, bool readOnlyTracks, bool savedProject, QWidget * parent) :
+ProjectSettings::ProjectSettings(ProjectList *projectlist, QMap <QString, QString> 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 <QString, QStrin
     project_folder->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 <QString, QStrin
 
 
     // load proxy profiles
-    KConfig conf("encodingprofiles.rc", KConfig::FullConfig, "appdata");
+    KConfig conf("encodingprofiles.rc", KConfig::CascadeConfig, "appdata");
     KConfigGroup group(&conf, "proxy");
     QMap <QString, QString> values = group.entryMap();
     QMapIterator<QString, QString> k(values);
@@ -135,21 +135,59 @@ ProjectSettings::ProjectSettings(ProjectList *projectlist, QMap <QString, QStrin
     // 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"));
+    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<QString, QString>::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 <QString, QStrin
         connect(delete_proxies, SIGNAL(clicked()), this, SLOT(slotDeleteProxies()));
     } else tabWidget->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,16 +204,16 @@ void ProjectSettings::slotDeleteUnused()
 {
     QStringList toDelete;
     QList <DocClipBase*> 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) {
+        if (clip->numReferences() == 0 && clip->clipType() != SlideShow) {
             KUrl url = clip->fileURL();
             if (!url.isEmpty() && !toDelete.contains(url.path())) toDelete << url.path();
         }
     }
 
     // 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,9 +306,9 @@ 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) {
+        if (clip->clipType() == SlideShow) {
             QStringList subfiles = extractSlideshowUrls(clip->fileURL());
             foreach(const QString & file, subfiles) {
                 count++;
@@ -279,19 +317,19 @@ void ProjectSettings::slotUpdateFiles(bool cacheOnly)
         } else if (!clip->fileURL().isEmpty()) {
             //allFiles.append(clip->fileURL().path());
             switch (clip->clipType()) {
-            case TEXT:
+            case Text:
                 new QTreeWidgetItem(texts, QStringList() << clip->fileURL().path());
                 break;
-            case AUDIO:
+            case Audio:
                 new QTreeWidgetItem(sounds, QStringList() << clip->fileURL().path());
                 break;
-            case IMAGE:
+            case Image:
                 new QTreeWidgetItem(images, QStringList() << clip->fileURL().path());
                 break;
-            case PLAYLIST:
+            case Playlist:
                 new QTreeWidgetItem(playlists, QStringList() << clip->fileURL().path());
                 break;
-            case UNKNOWN:
+            case Unknown:
                 new QTreeWidgetItem(others, QStringList() << clip->fileURL().path());
                 break;
             default:
@@ -300,7 +338,7 @@ void ProjectSettings::slotUpdateFiles(bool cacheOnly)
             }
             count++;
         }
-        if (clip->clipType() == TEXT) {
+        if (clip->clipType() == Text) {
             QStringList imagefiles = TitleWidget::extractImageList(clip->getProperty("xmldata"));
             QStringList fonts = TitleWidget::extractFontList(clip->getProperty("xmldata"));
             foreach(const QString & file, imagefiles) {
@@ -308,7 +346,7 @@ void ProjectSettings::slotUpdateFiles(bool cacheOnly)
                 new QTreeWidgetItem(images, QStringList() << file);
             }
             allFonts << fonts;
-        } else if (clip->clipType() == PLAYLIST) {
+        } else if (clip->clipType() == Playlist) {
             QStringList files = extractPlaylistUrls(clip->fileURL().path());
             foreach(const QString & file, files) {
                 count++;
@@ -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 <QString, QString> ProjectSettings::metadata() const
 {
     QMap <QString, QString> 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 <QString, QString> 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"