From 03e8f526928cf197fb3b88c9e6b574d7c54cb8d5 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Mardelle Date: Sun, 10 Aug 2008 19:11:53 +0000 Subject: [PATCH] Activate profile management svn path=/branches/KDE4/; revision=2372 --- src/kdenlivesettingsdialog.cpp | 30 ++++-- src/profilesdialog.cpp | 176 +++++++++++++++++++++++---------- src/profilesdialog.h | 6 ++ src/projectsettings.cpp | 25 +++-- 4 files changed, 168 insertions(+), 69 deletions(-) diff --git a/src/kdenlivesettingsdialog.cpp b/src/kdenlivesettingsdialog.cpp index 8c230108..29977181 100644 --- a/src/kdenlivesettingsdialog.cpp +++ b/src/kdenlivesettingsdialog.cpp @@ -94,12 +94,23 @@ KdenliveSettingsDialog::KdenliveSettingsDialog(QWidget * parent): KConfigDialog( connect(m_configEnv.kp_audio, SIGNAL(clicked()), this, SLOT(slotEditAudioApplication())); connect(m_configEnv.kp_player, SIGNAL(clicked()), this, SLOT(slotEditVideoApplication())); - QStringList profilesNames = ProfilesDialog::getProfileNames(); - m_configMisc.kcfg_profiles_list->addItems(profilesNames); - m_defaultProfile = ProfilesDialog::getSettingsFromFile(KdenliveSettings::default_profile()).value("description"); - if (profilesNames.contains(m_defaultProfile)) { - m_configMisc.kcfg_profiles_list->setCurrentItem(m_defaultProfile); - KdenliveSettings::setProfiles_list(profilesNames.indexOf(m_defaultProfile)); + + + QMap profilesInfo = ProfilesDialog::getProfilesInfo(); + QMapIterator i(profilesInfo); + while (i.hasNext()) { + i.next(); + m_configMisc.kcfg_profiles_list->addItem(i.key(), i.value()); + } + + if (!KdenliveSettings::default_profile().isEmpty()) { + for (int i = 0; i < m_configMisc.kcfg_profiles_list->count(); i++) { + if (m_configMisc.kcfg_profiles_list->itemData(i).toString() == KdenliveSettings::default_profile()) { + m_configMisc.kcfg_profiles_list->setCurrentIndex(i); + KdenliveSettings::setProfiles_list(i); + break; + } + } } slotUpdateDisplay(); @@ -312,15 +323,16 @@ void KdenliveSettingsDialog::updateSettings() { } void KdenliveSettingsDialog::slotUpdateDisplay() { - QString currentProfile = m_configMisc.kcfg_profiles_list->currentText(); - QMap< QString, QString > values = ProfilesDialog::getSettingsForProfile(currentProfile); + QString currentProfile = m_configMisc.kcfg_profiles_list->itemData(m_configMisc.kcfg_profiles_list->currentIndex()).toString(); + QMap< QString, QString > values = ProfilesDialog::getSettingsFromFile(currentProfile); m_configMisc.p_size->setText(values.value("width") + "x" + values.value("height")); m_configMisc.p_fps->setText(values.value("frame_rate_num") + "/" + values.value("frame_rate_den")); m_configMisc.p_aspect->setText(values.value("sample_aspect_num") + "/" + values.value("sample_aspect_den")); m_configMisc.p_display->setText(values.value("display_aspect_num") + "/" + values.value("display_aspect_den")); if (values.value("progressive").toInt() == 0) m_configMisc.p_progressive->setText(i18n("Interlaced")); else m_configMisc.p_progressive->setText(i18n("Progressive")); - m_defaultPath = values.value("path"); + m_defaultProfile = m_configMisc.kcfg_profiles_list->itemText(m_configMisc.kcfg_profiles_list->currentIndex()); + m_defaultPath = currentProfile; } diff --git a/src/profilesdialog.cpp b/src/profilesdialog.cpp index a3311b20..7a565625 100644 --- a/src/profilesdialog.cpp +++ b/src/profilesdialog.cpp @@ -21,6 +21,8 @@ #include #include +#include +#include #include "kdenlivesettings.h" #include "profilesdialog.h" @@ -31,22 +33,92 @@ ProfilesDialog::ProfilesDialog(QWidget * parent): QDialog(parent), m_isCustomPro QStringList profilesFilter; profilesFilter << "*"; - // List the Mlt profiles - m_mltProfilesList = QDir(KdenliveSettings::mltpath()).entryList(profilesFilter, QDir::Files); - m_view.profiles_list->addItems(m_mltProfilesList); + m_view.button_delete->setIcon(KIcon("trash-empty")); + m_view.button_delete->setToolTip(i18n("Delete profile")); + m_view.button_save->setIcon(KIcon("document-save")); + m_view.button_save->setToolTip(i18n("Save profile")); + m_view.button_create->setIcon(KIcon("document-new")); + m_view.button_create->setToolTip(i18n("Create new profile")); - // List custom profiles - QStringList customProfiles = KGlobal::dirs()->findDirs("appdata", "profiles"); - for (int i = 0; i < customProfiles.size(); ++i) - m_customProfilesList << QDir(customProfiles.at(i)).entryList(profilesFilter, QDir::Files); - m_view.profiles_list->addItems(m_customProfilesList); + fillList(); + slotUpdateDisplay(); + connect(m_view.profiles_list, SIGNAL(currentIndexChanged(int)), this, SLOT(slotUpdateDisplay())); + connect(m_view.button_create, SIGNAL(clicked()), this, SLOT(slotCreateProfile())); + connect(m_view.button_save, SIGNAL(clicked()), this, SLOT(slotSaveProfile())); + connect(m_view.button_delete, SIGNAL(clicked()), this, SLOT(slotDeleteProfile())); +} + +void ProfilesDialog::fillList(const QString selectedProfile) { + // List the Mlt profiles + m_view.profiles_list->clear(); + QMap profilesInfo = ProfilesDialog::getProfilesInfo(); + QMapIterator i(profilesInfo); + while (i.hasNext()) { + i.next(); + m_view.profiles_list->addItem(i.key(), i.value()); + } if (!KdenliveSettings::default_profile().isEmpty()) { - int ix = m_view.profiles_list->findText(KdenliveSettings::default_profile()); - m_view.profiles_list->setCurrentIndex(ix); + for (int i = 0; i < m_view.profiles_list->count(); i++) { + if (m_view.profiles_list->itemData(i).toString() == KdenliveSettings::default_profile()) { + m_view.profiles_list->setCurrentIndex(i); + break; + } + } } - slotUpdateDisplay(); - connect(m_view.profiles_list, SIGNAL(currentIndexChanged(int)), this, SLOT(slotUpdateDisplay())); + int ix = m_view.profiles_list->findText(selectedProfile); + if (ix != -1) m_view.profiles_list->setCurrentIndex(ix); +} + +void ProfilesDialog::slotCreateProfile() { + m_view.button_delete->setEnabled(false); + m_view.button_create->setEnabled(false); + m_view.button_save->setEnabled(true); + m_view.properties->setEnabled(true); +} + +void ProfilesDialog::slotSaveProfile() { + const QString profileDesc = m_view.description->text(); + int ix = m_view.profiles_list->findText(profileDesc); + if (ix != -1) { + // this profile name already exists + const QString path = m_view.profiles_list->itemData(ix).toString(); + if (!path.contains("/")) { + KMessageBox::sorry(this, i18n("A profile with same name already exists in MLT's default profiles, please choose another description for your custom profile.")); + return; + } + saveProfile(path); + } else { + 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, this)) { + i++; + profilePath = KStandardDirs::locateLocal("appdata", customName + QString::number(i)); + } + saveProfile(profilePath); + } + fillList(profileDesc); +} + +void ProfilesDialog::saveProfile(const QString path) { + QFile file(path); + if (!file.open(QIODevice::WriteOnly)) { + KMessageBox::sorry(this, i18n("Cannot write to file %1", path)); + return; + } + QTextStream out(&file); + out << "description=" << m_view.description->text() << "\n" << "frame_rate_num=" << m_view.frame_num->value() << "\n" << "frame_rate_den=" << m_view.frame_den->value() << "\n" << "width=" << m_view.size_w->value() << "\n" << "height=" << m_view.size_h->value() << "\n" << "progressive=" << m_view.progressive->isChecked() << "\n" << "sample_aspect_num=" << m_view.aspect_num->value() << "\n" << "sample_aspect_den=" << m_view.aspect_den->value() << "\n" << "display_aspect_num=" << m_view.display_num->value() << "\n" << "display_aspect_den=" << m_view.display_den->value() << "\n"; + file.close(); +} + +void ProfilesDialog::slotDeleteProfile() { + const QString path = m_view.profiles_list->itemData(m_view.profiles_list->currentIndex()).toString(); + if (path.contains("/")) { + KIO::NetAccess::del(KUrl(path), this); + fillList(); + } else kDebug() << "//// Cannot delete profile " << path << ", does not seem to be custom one"; } // static @@ -122,18 +194,17 @@ QString ProfilesDialog::getProfileDescription(QString name) { } // static -QStringList ProfilesDialog::getProfileNames() { - QStringList profilesNames; - QStringList profilesFiles; +QMap ProfilesDialog::getProfilesInfo() { + QMap result; QStringList profilesFilter; profilesFilter << "*"; // List the Mlt profiles - profilesFiles = QDir(KdenliveSettings::mltpath()).entryList(profilesFilter, QDir::Files); + QStringList 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); QString desc = confFile.entryMap().value("description"); - if (!desc.isEmpty()) profilesNames.append(desc); + if (!desc.isEmpty()) result.insert(desc, profilesFiles.at(i)); } // List custom profiles @@ -143,15 +214,14 @@ QStringList ProfilesDialog::getProfileNames() { for (int i = 0; i < profilesFiles.size(); ++i) { KConfig confFile(customProfiles.at(i) + "/" + profilesFiles.at(i), KConfig::SimpleConfig); QString desc = confFile.entryMap().value("description"); - if (!desc.isEmpty()) profilesNames.append(desc); + if (!desc.isEmpty()) result.insert(desc, customProfiles.at(i) + "/" + profilesFiles.at(i)); } } - - return profilesNames; + return result; } // static -QMap< QString, QString > ProfilesDialog::getSettingsFromFile(const QString path) { +QStringList ProfilesDialog::getProfileNames() { QStringList profilesNames; QStringList profilesFiles; QStringList profilesFilter; @@ -160,24 +230,41 @@ QMap< QString, QString > ProfilesDialog::getSettingsFromFile(const QString path) // List the Mlt profiles profilesFiles = QDir(KdenliveSettings::mltpath()).entryList(profilesFilter, QDir::Files); for (int i = 0; i < profilesFiles.size(); ++i) { - if (profilesFiles.at(i) == path) { - KConfig confFile(KdenliveSettings::mltpath() + "/" + profilesFiles.at(i), KConfig::SimpleConfig); - return confFile.entryMap(); - } + KConfig confFile(KdenliveSettings::mltpath() + "/" + profilesFiles.at(i), KConfig::SimpleConfig); + QString desc = confFile.entryMap().value("description"); + if (!desc.isEmpty()) profilesNames.append(desc); } // 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 i = 0; i < profiles.size(); ++i) { - if (profiles.at(i) == path) { - KConfig confFile(customProfiles.at(i) + "/" + profiles.at(i), KConfig::SimpleConfig); - return confFile.entryMap(); - } + profilesFiles = QDir(customProfiles.at(i)).entryList(profilesFilter, QDir::Files); + for (int i = 0; i < profilesFiles.size(); ++i) { + KConfig confFile(customProfiles.at(i) + "/" + profilesFiles.at(i), KConfig::SimpleConfig); + QString desc = confFile.entryMap().value("description"); + if (!desc.isEmpty()) profilesNames.append(desc); } } - return QMap< QString, QString >(); + + return profilesNames; +} + +// static +QMap< QString, QString > ProfilesDialog::getSettingsFromFile(const QString path) { + QStringList profilesNames; + QStringList profilesFiles; + QStringList profilesFilter; + profilesFilter << "*"; + + if (!path.contains("/")) { + // This is an MLT profile + KConfig confFile(KdenliveSettings::mltpath() + "/" + path, KConfig::SimpleConfig); + return confFile.entryMap(); + } else { + // This is a custom profile + KConfig confFile(path, KConfig::SimpleConfig); + return confFile.entryMap(); + } } // static @@ -244,28 +331,12 @@ QString ProfilesDialog::getPathFromDescription(const QString profileDesc) { void ProfilesDialog::slotUpdateDisplay() { - QString currentProfile = m_view.profiles_list->currentText(); - QString currentProfilePath; - if (m_mltProfilesList.indexOf(currentProfile) != -1) { - currentProfilePath = KdenliveSettings::mltpath() + "/" + currentProfile; - m_isCustomProfile = false; - } else { - m_isCustomProfile = true; - QStringList customProfiles = KGlobal::dirs()->findDirs("appdata", "mltprofiles"); - QStringList profilesFilter; - profilesFilter << "*"; - int i; - for (i = 0; i < customProfiles.size(); ++i) { - QStringList profs = QDir(customProfiles.at(i)).entryList(profilesFilter, QDir::Files); - if (profs.indexOf(currentProfile) != -1) break; - } - currentProfilePath = customProfiles.at(i) + "/" + currentProfile; - } + QString currentProfile = m_view.profiles_list->itemData(m_view.profiles_list->currentIndex()).toString(); + m_isCustomProfile = currentProfile.contains("/"); m_view.button_delete->setEnabled(m_isCustomProfile); m_view.properties->setEnabled(m_isCustomProfile); - - KConfig confFile(currentProfilePath, KConfig::SimpleConfig); - QMap< QString, QString > values = confFile.entryMap(); + 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()); @@ -276,7 +347,6 @@ void ProfilesDialog::slotUpdateDisplay() { 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()); - } diff --git a/src/profilesdialog.h b/src/profilesdialog.h index 2e0d032b..68905840 100644 --- a/src/profilesdialog.h +++ b/src/profilesdialog.h @@ -32,21 +32,27 @@ class ProfilesDialog : public QDialog { public: ProfilesDialog(QWidget * parent = 0); + void fillList(const QString selectedProfile = QString()); static QStringList getProfileNames(); static QString getProfileDescription(QString name); static QMap< QString, QString > getSettingsForProfile(const QString profileName); static QMap< QString, QString > getSettingsFromFile(const QString path); static QString getPathFromDescription(const QString profileDesc); static MltVideoProfile getVideoProfile(QString name); + static QMap getProfilesInfo(); private slots: void slotUpdateDisplay(); + void slotCreateProfile(); + void slotSaveProfile(); + void slotDeleteProfile(); private: Ui::ProfilesDialog_UI m_view; QStringList m_mltProfilesList; QStringList m_customProfilesList; bool m_isCustomProfile; + void saveProfile(const QString path); }; diff --git a/src/projectsettings.cpp b/src/projectsettings.cpp index c1c726d4..e0f62a1f 100644 --- a/src/projectsettings.cpp +++ b/src/projectsettings.cpp @@ -29,11 +29,22 @@ ProjectSettings::ProjectSettings(QWidget * parent): QDialog(parent), m_isCustomProfile(false) { m_view.setupUi(this); - QStringList profilesNames = ProfilesDialog::getProfileNames(); - m_view.profiles_list->addItems(profilesNames); + QMap profilesInfo = ProfilesDialog::getProfilesInfo(); + QMapIterator i(profilesInfo); + while (i.hasNext()) { + i.next(); + m_view.profiles_list->addItem(i.key(), i.value()); + } m_view.project_folder->setMode(KFile::Directory); - QString defaulfProf = ProfilesDialog::getSettingsFromFile(KdenliveSettings::current_profile()).value("description"); - if (profilesNames.contains(defaulfProf)) m_view.profiles_list->setCurrentItem(defaulfProf); + QString currentProf = KdenliveSettings::current_profile(); + + for (int i = 0; i < m_view.profiles_list->count(); i++) { + if (m_view.profiles_list->itemData(i).toString() == currentProf) { + m_view.profiles_list->setCurrentIndex(i); + break; + } + } + buttonOk = m_view.buttonBox->button(QDialogButtonBox::Ok); //buttonOk->setEnabled(false); m_view.audio_thumbs->setChecked(KdenliveSettings::audiothumbnails()); @@ -45,8 +56,8 @@ ProjectSettings::ProjectSettings(QWidget * parent): QDialog(parent), m_isCustomP void ProjectSettings::slotUpdateDisplay() { - QString currentProfile = m_view.profiles_list->currentText(); - QMap< QString, QString > values = ProfilesDialog::getSettingsForProfile(currentProfile); + QString currentProfile = m_view.profiles_list->itemData(m_view.profiles_list->currentIndex()).toString(); + QMap< QString, QString > values = ProfilesDialog::getSettingsFromFile(currentProfile); m_view.p_size->setText(values.value("width") + "x" + values.value("height")); m_view.p_fps->setText(values.value("frame_rate_num") + "/" + values.value("frame_rate_den")); m_view.p_aspect->setText(values.value("sample_aspect_num") + "/" + values.value("sample_aspect_den")); @@ -61,7 +72,7 @@ void ProjectSettings::slotUpdateButton(const QString &path) { } QString ProjectSettings::selectedProfile() const { - return ProfilesDialog::getPathFromDescription(m_view.profiles_list->currentText()); + return m_view.profiles_list->itemData(m_view.profiles_list->currentIndex()).toString(); } KUrl ProjectSettings::selectedFolder() const { -- 2.39.2