+// static
+QMap< QString, QString > ProfilesDialog::getSettingsForProfile(const QString profileName)
+{
+ QStringList profilesNames;
+ QStringList profilesFiles;
+ QStringList profilesFilter;
+ profilesFilter << "*";
+
+ // List the Mlt profiles
+ profilesFiles = QDir(KdenliveSettings::mltpath()).entryList(profilesFilter, QDir::Files);
+ for(int i = 0; i < profilesFiles.size(); ++i) {
+ KConfig confFile(KdenliveSettings::mltpath() + profilesFiles.at(i), KConfig::SimpleConfig);
+ QMap< QString, QString > values = confFile.entryMap();
+ if(values.value("description") == profileName) {
+ values.insert("path", profilesFiles.at(i));
+ return values;
+ }
+ }
+
+ // List custom profiles
+ QStringList customProfiles = KGlobal::dirs()->findDirs("appdata", "profiles");
+ for(int i = 0; i < customProfiles.size(); ++i) {
+ QStringList profiles = QDir(customProfiles.at(i)).entryList(profilesFilter, QDir::Files);
+ for(int j = 0; j < profiles.size(); ++j) {
+ KConfig confFile(customProfiles.at(i) + profiles.at(j), KConfig::SimpleConfig);
+ QMap< QString, QString > values = confFile.entryMap();
+ if(values.value("description") == profileName) {
+ values.insert("path", customProfiles.at(i) + profiles.at(j));
+ return values;
+ }
+ }
+ }
+ return QMap< QString, QString >();
+}
+
+// static
+QString ProfilesDialog::getPathFromProperties(int width, int height, double fps, double par, double dar)
+{
+ QStringList profilesNames;
+ QStringList profilesFiles;
+ QStringList profilesFilter;
+ profilesFilter << "*";
+ // List the Mlt profiles
+ profilesFiles = QDir(KdenliveSettings::mltpath()).entryList(profilesFilter, QDir::Files);
+ for(int i = 0; i < profilesFiles.size(); ++i) {
+ KConfig confFile(KdenliveSettings::mltpath() + profilesFiles.at(i), KConfig::SimpleConfig);
+ QMap< QString, QString > values = confFile.entryMap();
+ if(values.value("width").toInt() == width && values.value("height").toInt() == height) {
+ double profile_fps = values.value("frame_rate_num").toDouble() / values.value("frame_rate_den").toDouble();
+ if(qAbs(profile_fps - fps) < 0.5)
+ return profilesFiles.at(i);
+ }
+ }
+
+ // List custom profiles
+ QStringList customProfiles = KGlobal::dirs()->findDirs("appdata", "profiles");
+ for(int i = 0; i < customProfiles.size(); ++i) {
+ QStringList profiles = QDir(customProfiles.at(i)).entryList(profilesFilter, QDir::Files);
+ for(int j = 0; j < profiles.size(); j++) {
+ KConfig confFile(customProfiles.at(i) + profiles.at(j), KConfig::SimpleConfig);
+ QMap< QString, QString > values = confFile.entryMap();
+ if(values.value("width").toInt() == width && values.value("height").toInt() == height) {
+ double profile_fps = values.value("frame_rate_num").toDouble() / values.value("frame_rate_den").toDouble();
+ if(qAbs(profile_fps - fps) < 0.5)
+ return customProfiles.at(i) + profiles.at(j);
+ }
+ }
+ }
+ return QString();
+}
+
+// static
+QString ProfilesDialog::getPathFromDescription(const QString profileDesc)
+{
+ QStringList profilesNames;
+ QStringList profilesFiles;
+ QStringList profilesFilter;
+ profilesFilter << "*";
+
+ // List the Mlt profiles
+ profilesFiles = QDir(KdenliveSettings::mltpath()).entryList(profilesFilter, QDir::Files);
+ for(int i = 0; i < profilesFiles.size(); ++i) {
+ KConfig confFile(KdenliveSettings::mltpath() + profilesFiles.at(i), KConfig::SimpleConfig);
+ QMap< QString, QString > values = confFile.entryMap();
+ if(values.value("description") == profileDesc) return profilesFiles.at(i);
+ }
+
+ // List custom profiles
+ QStringList customProfiles = KGlobal::dirs()->findDirs("appdata", "profiles");
+ for(int i = 0; i < customProfiles.size(); ++i) {
+ QStringList profiles = QDir(customProfiles.at(i)).entryList(profilesFilter, QDir::Files);
+ for(int j = 0; j < profiles.size(); ++j) {
+ KConfig confFile(customProfiles.at(i) + profiles.at(j), KConfig::SimpleConfig);
+ QMap< QString, QString > values = confFile.entryMap();
+ if(values.value("description") == profileDesc) return customProfiles.at(i) + profiles.at(j);
+ }
+ }
+ return QString();
+}
+
+// static
+void ProfilesDialog::saveProfile(MltVideoProfile &profile)
+{
+ int i = 0;
+ QString customName = "profiles/customprofile";
+ QString profilePath = KStandardDirs::locateLocal("appdata", customName + QString::number(i));
+ kDebug() << " TYING PROFILE FILE: " << profilePath;
+ while(KIO::NetAccess::exists(KUrl(profilePath), KIO::NetAccess::SourceSide, 0)) {
+ i++;
+ profilePath = KStandardDirs::locateLocal("appdata", customName + QString::number(i));
+ }
+ QFile file(profilePath);
+ if(!file.open(QIODevice::WriteOnly)) {
+ KMessageBox::sorry(0, i18n("Cannot write to file %1", profilePath));
+ return;
+ }
+ QTextStream out(&file);
+ out << "description=" << profile.description << "\n" << "frame_rate_num=" << profile.frame_rate_num << "\n" << "frame_rate_den=" << profile.frame_rate_den << "\n" << "width=" << profile.width << "\n" << "height=" << profile.height << "\n" << "progressive=" << profile.progressive << "\n" << "sample_aspect_num=" << profile.sample_aspect_num << "\n" << "sample_aspect_den=" << profile.sample_aspect_den << "\n" << "display_aspect_num=" << profile.display_aspect_num << "\n" << "display_aspect_den=" << profile.display_aspect_den << "\n";
+ if(file.error() != QFile::NoError) {
+ KMessageBox::error(0, i18n("Cannot write to file %1", profilePath));
+ }
+ file.close();
+ profile.path = profilePath;
+}
+
+
+void ProfilesDialog::slotUpdateDisplay()
+{
+ if(askForSave() == false) {
+ m_view.profiles_list->blockSignals(true);
+ m_view.profiles_list->setCurrentIndex(m_selectedProfileIndex);
+ m_view.profiles_list->blockSignals(false);
+ return;
+ }
+
+ m_selectedProfileIndex = m_view.profiles_list->currentIndex();
+ QString currentProfile = m_view.profiles_list->itemData(m_view.profiles_list->currentIndex()).toString();
+ m_isCustomProfile = currentProfile.contains('/');
+ m_view.button_create->setEnabled(true);
+ m_view.button_delete->setEnabled(m_isCustomProfile);
+ m_view.properties->setEnabled(m_isCustomProfile);
+ m_view.button_save->setEnabled(m_isCustomProfile);
+ QMap< QString, QString > values = ProfilesDialog::getSettingsFromFile(currentProfile);
+ m_view.description->setText(values.value("description"));
+ m_view.size_w->setValue(values.value("width").toInt());
+ m_view.size_h->setValue(values.value("height").toInt());
+ m_view.aspect_num->setValue(values.value("sample_aspect_num").toInt());
+ m_view.aspect_den->setValue(values.value("sample_aspect_den").toInt());
+ m_view.display_num->setValue(values.value("display_aspect_num").toInt());
+ m_view.display_den->setValue(values.value("display_aspect_den").toInt());
+ m_view.frame_num->setValue(values.value("frame_rate_num").toInt());
+ m_view.frame_den->setValue(values.value("frame_rate_den").toInt());
+ m_view.progressive->setChecked(values.value("progressive").toInt());
+ if(values.value("progressive").toInt()) {
+ m_view.fields->setText(QString::number((double)values.value("frame_rate_num").toInt() / values.value("frame_rate_den").toInt(), 'f', 2));
+ } else {
+ m_view.fields->setText(QString::number((double)2 * values.value("frame_rate_num").toInt() / values.value("frame_rate_den").toInt(), 'f', 2));
+ }
+ m_profileIsModified = false;