X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;ds=sidebyside;f=src%2Fprojectsettings.cpp;h=ddc8d146974d5063b46f689b44f1e3b9a59d17e6;hb=8216494ab1a9f76204d18a61ab1b761516052bbc;hp=d6762537ec43cfa74e62754371eaf37b564927af;hpb=5a0c47a5868ec91b6747f306e84d92f7ecdf4f99;p=kdenlive diff --git a/src/projectsettings.cpp b/src/projectsettings.cpp index d6762537..ddc8d146 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); @@ -65,37 +65,91 @@ ProjectSettings::ProjectSettings(ProjectList *projectlist, QStringList lumas, in video_thumbs->setChecked(KdenliveSettings::videothumbnails()); audio_tracks->setValue(audiotracks); video_tracks->setValue(videotracks); - proxy_params->setMaximumHeight(QFontMetrics(font()).lineSpacing() * 5); connect(generate_proxy, SIGNAL(toggled(bool)), proxy_minsize, SLOT(setEnabled(bool))); connect(generate_imageproxy, SIGNAL(toggled(bool)), proxy_imageminsize, SLOT(setEnabled(bool))); - + QString proxyparameters; + QString proxyextension; if (projectlist) { enable_proxy->setChecked(projectlist->getDocumentProperty("enableproxy").toInt()); generate_proxy->setChecked(projectlist->getDocumentProperty("generateproxy").toInt()); proxy_minsize->setValue(projectlist->getDocumentProperty("proxyminsize").toInt()); - proxy_params->setPlainText(projectlist->getDocumentProperty("proxyparams")); + proxyparameters = projectlist->getDocumentProperty("proxyparams"); generate_imageproxy->setChecked(projectlist->getDocumentProperty("generateimageproxy").toInt()); proxy_imageminsize->setValue(projectlist->getDocumentProperty("proxyimageminsize").toInt()); - proxy_extension->setText(projectlist->getDocumentProperty("proxyextension")); + proxyextension = projectlist->getDocumentProperty("proxyextension"); } else { enable_proxy->setChecked(KdenliveSettings::enableproxy()); generate_proxy->setChecked(KdenliveSettings::generateproxy()); proxy_minsize->setValue(KdenliveSettings::proxyminsize()); - proxy_params->setPlainText(KdenliveSettings::proxyparams()); + proxyparameters = KdenliveSettings::proxyparams(); generate_imageproxy->setChecked(KdenliveSettings::generateimageproxy()); proxy_imageminsize->setValue(KdenliveSettings::proxyimageminsize()); - proxy_extension->setText(KdenliveSettings::proxyextension()); + proxyextension = KdenliveSettings::proxyextension(); } proxy_minsize->setEnabled(generate_proxy->isChecked()); proxy_imageminsize->setEnabled(generate_imageproxy->isChecked()); + + + // load proxy profiles + KConfig conf("encodingprofiles.rc", KConfig::FullConfig, "appdata"); + KConfigGroup group(&conf, "proxy"); + QMap values = group.entryMap(); + QMapIterator k(values); + int ix = -1; + while (k.hasNext()) { + k.next(); + if (!k.key().isEmpty()) { + QString params = k.value().section(';', 0, 0); + QString extension = k.value().section(';', 1, 1); + if (ix == -1 && ((params == proxyparameters && extension == proxyextension) || (proxyparameters.isEmpty() || proxyextension.isEmpty()))) { + // this is the current profile + ix = proxy_profile->count(); + } + proxy_profile->addItem(k.key(), k.value()); + } + } + if (ix == -1) { + // Current project proxy settings not found + ix = proxy_profile->count(); + proxy_profile->addItem(i18n("Current Settings"), QString(proxyparameters + ';' + proxyextension)); + } + proxy_profile->setCurrentIndex(ix); + slotUpdateProxyParams(); + + // Proxy GUI stuff + proxy_showprofileinfo->setIcon(KIcon("help-about")); + connect(proxy_profile, SIGNAL(currentIndexChanged(int)), this, SLOT(slotUpdateProxyParams())); + proxyparams->setVisible(false); + proxyparams->setMaximumHeight(QFontMetrics(font()).lineSpacing() * 5); + connect(proxy_showprofileinfo, SIGNAL(clicked(bool)), proxyparams, SLOT(setVisible(bool))); if (readOnlyTracks) { 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(); @@ -152,8 +206,10 @@ void ProjectSettings::slotClearCache() void ProjectSettings::slotDeleteProxies() { + if (KMessageBox::warningContinueCancel(this, i18n("Deleting proxy clips will disable proxies for this project.")) != KMessageBox::Continue) return; buttonBox->setEnabled(false); - + enable_proxy->setChecked(false); + emit disableProxies(); KIO::NetAccess::del(KUrl(project_folder->url().path(KUrl::AddTrailingSlash) + "proxy/"), this); KStandardDirs::makeDir(project_folder->url().path(KUrl::AddTrailingSlash) + "proxy/"); buttonBox->setEnabled(true); @@ -181,7 +237,7 @@ void ProjectSettings::slotUpdateFiles(bool cacheOnly) // List all files that are used in the project. That also means: // images included in slideshow and titles, files in playlist clips - // TODO: images used in luma transitions, files used for LADSPA effects? + // TODO: images used in luma transitions? // Setup categories QTreeWidgetItem *videos = new QTreeWidgetItem(files_list, QStringList() << i18n("Video clips")); @@ -199,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); @@ -229,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; @@ -262,9 +324,7 @@ void ProjectSettings::slotUpdateFiles(bool cacheOnly) usedSize += clip->fileSize(); } } -#if QT_VERSION >= 0x040500 allFonts.removeDuplicates(); -#endif // Hide unused categories for (int i = 0; i < files_list->topLevelItemCount(); i++) { if (files_list->topLevelItem(i)->childCount() == 0) { @@ -293,6 +353,7 @@ void ProjectSettings::accept() void ProjectSettings::slotUpdateDisplay() { + QLocale locale; QString currentProfile = profiles_list->itemData(profiles_list->currentIndex()).toString(); QMap< QString, QString > values = ProfilesDialog::getSettingsFromFile(currentProfile); p_size->setText(values.value("width") + 'x' + values.value("height")); @@ -301,7 +362,7 @@ void ProjectSettings::slotUpdateDisplay() p_display->setText(values.value("display_aspect_num") + '/' + values.value("display_aspect_den")); if (values.value("progressive").toInt() == 0) { p_progressive->setText(i18n("Interlaced (%1 fields per second)", - QString::number((double)2 * values.value("frame_rate_num").toInt() / values.value("frame_rate_den").toInt(), 'f', 2))); + locale.toString((double)2 * values.value("frame_rate_num").toInt() / values.value("frame_rate_den").toInt(), 'f', 2))); } else { p_progressive->setText(i18n("Progressive")); } @@ -372,12 +433,14 @@ int ProjectSettings::proxyImageMinSize() const QString ProjectSettings::proxyParams() const { - return proxy_params->toPlainText(); + QString params = proxy_profile->itemData(proxy_profile->currentIndex()).toString(); + return params.section(';', 0, 0); } QString ProjectSettings::proxyExtension() const { - return proxy_extension->text(); + QString params = proxy_profile->itemData(proxy_profile->currentIndex()).toString(); + return params.section(';', 1, 1); } //static @@ -401,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")) { @@ -493,7 +559,27 @@ void ProjectSettings::slotExportToText() KIO::NetAccess::upload(tmpfile.fileName(), savePath, 0); } +void ProjectSettings::slotUpdateProxyParams() +{ + QString params = proxy_profile->itemData(proxy_profile->currentIndex()).toString(); + 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"