1 /***************************************************************************
2 * Copyright (C) 2008 by Jean-Baptiste Mardelle (jb@kdenlive.org) *
4 * This program is free software; you can redistribute it and/or modify *
5 * it under the terms of the GNU General Public License as published by *
6 * the Free Software Foundation; either version 2 of the License, or *
7 * (at your option) any later version. *
9 * This program is distributed in the hope that it will be useful, *
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
12 * GNU General Public License for more details. *
14 * You should have received a copy of the GNU General Public License *
15 * along with this program; if not, write to the *
16 * Free Software Foundation, Inc., *
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
18 ***************************************************************************/
22 #include <KStandardDirs>
25 #include "kdenlivesettings.h"
26 #include "profilesdialog.h"
28 ProfilesDialog::ProfilesDialog(QWidget * parent): QDialog(parent), m_isCustomProfile(false) {
31 QStringList profilesFilter;
32 profilesFilter << "*";
34 // List the Mlt profiles
35 m_mltProfilesList = QDir(KdenliveSettings::mltpath()).entryList(profilesFilter, QDir::Files);
36 m_view.profiles_list->addItems(m_mltProfilesList);
38 // List custom profiles
39 QStringList customProfiles = KGlobal::dirs()->findDirs("appdata", "profiles");
40 for (int i = 0; i < customProfiles.size(); ++i)
41 m_customProfilesList << QDir(customProfiles.at(i)).entryList(profilesFilter, QDir::Files);
42 m_view.profiles_list->addItems(m_customProfilesList);
44 if (!KdenliveSettings::default_profile().isEmpty()) {
45 int ix = m_view.profiles_list->findText(KdenliveSettings::default_profile());
46 m_view.profiles_list->setCurrentIndex(ix);
49 connect(m_view.profiles_list, SIGNAL(currentIndexChanged(int)), this, SLOT(slotUpdateDisplay()));
53 MltVideoProfile ProfilesDialog::getVideoProfile(QString name) {
54 MltVideoProfile result;
55 QStringList profilesNames;
56 QStringList profilesFiles;
57 QStringList profilesFilter;
58 profilesFilter << "*";
61 // List the Mlt profiles
62 profilesFiles = QDir(KdenliveSettings::mltpath()).entryList(profilesFilter, QDir::Files);
63 if (profilesFiles.contains(name)) path = KdenliveSettings::mltpath() + "/" + name;
66 // List custom profiles
67 QStringList customProfiles = KGlobal::dirs()->findDirs("appdata", "profiles");
68 for (int i = 0; i < customProfiles.size(); ++i) {
69 profilesFiles = QDir(customProfiles.at(i)).entryList(profilesFilter, QDir::Files);
70 if (profilesFiles.contains(name)) {
71 path = customProfiles.at(i) + "/" + name;
77 if (path.isEmpty()) return result;
78 KConfig confFile(path);
80 result.description = confFile.entryMap().value("description");
81 result.frame_rate_num = confFile.entryMap().value("frame_rate_num").toInt();
82 result.frame_rate_den = confFile.entryMap().value("frame_rate_den").toInt();
83 result.width = confFile.entryMap().value("width").toInt();
84 result.height = confFile.entryMap().value("height").toInt();
85 result.progressive = confFile.entryMap().value("progressive").toInt();
86 result.sample_aspect_num = confFile.entryMap().value("sample_aspect_num").toInt();
87 result.sample_aspect_den = confFile.entryMap().value("sample_aspect_den").toInt();
88 result.display_aspect_num = confFile.entryMap().value("display_aspect_num").toInt();
89 result.display_aspect_den = confFile.entryMap().value("display_aspect_den").toInt();
94 QString ProfilesDialog::getProfileDescription(QString name) {
95 QStringList profilesNames;
96 QStringList profilesFiles;
97 QStringList profilesFilter;
98 profilesFilter << "*";
100 // List the Mlt profiles
101 profilesFiles = QDir(KdenliveSettings::mltpath()).entryList(profilesFilter, QDir::Files);
102 if (profilesFiles.contains(name)) {
103 KConfig confFile(KdenliveSettings::mltpath() + "/" + name);
104 return confFile.entryMap().value("description");
107 // List custom profiles
108 QStringList customProfiles = KGlobal::dirs()->findDirs("appdata", "profiles");
109 for (int i = 0; i < customProfiles.size(); ++i) {
110 profilesFiles = QDir(customProfiles.at(i)).entryList(profilesFilter, QDir::Files);
111 if (profilesFiles.contains(name)) {
112 KConfig confFile(customProfiles.at(i) + "/" + name);
113 return confFile.entryMap().value("description");
121 QStringList ProfilesDialog::getProfileNames() {
122 QStringList profilesNames;
123 QStringList profilesFiles;
124 QStringList profilesFilter;
125 profilesFilter << "*";
127 // List the Mlt profiles
128 profilesFiles = QDir(KdenliveSettings::mltpath()).entryList(profilesFilter, QDir::Files);
129 for (int i = 0; i < profilesFiles.size(); ++i) {
130 KConfig confFile(KdenliveSettings::mltpath() + "/" + profilesFiles.at(i));
131 QString desc = confFile.entryMap().value("description");
132 if (!desc.isEmpty()) profilesNames.append(desc);
135 // List custom profiles
136 QStringList customProfiles = KGlobal::dirs()->findDirs("appdata", "profiles");
137 for (int i = 0; i < customProfiles.size(); ++i) {
138 profilesFiles = QDir(customProfiles.at(i)).entryList(profilesFilter, QDir::Files);
139 for (int i = 0; i < profilesFiles.size(); ++i) {
140 KConfig confFile(customProfiles.at(i) + "/" + profilesFiles.at(i));
141 QString desc = confFile.entryMap().value("description");
142 if (!desc.isEmpty()) profilesNames.append(desc);
146 return profilesNames;
150 QMap< QString, QString > ProfilesDialog::getSettingsFromFile(const QString path) {
151 QStringList profilesNames;
152 QStringList profilesFiles;
153 QStringList profilesFilter;
154 profilesFilter << "*";
156 // List the Mlt profiles
157 profilesFiles = QDir(KdenliveSettings::mltpath()).entryList(profilesFilter, QDir::Files);
158 for (int i = 0; i < profilesFiles.size(); ++i) {
159 if (profilesFiles.at(i) == path) {
160 KConfig confFile(KdenliveSettings::mltpath() + "/" + profilesFiles.at(i));
161 return confFile.entryMap();
165 // List custom profiles
166 QStringList customProfiles = KGlobal::dirs()->findDirs("appdata", "profiles");
167 for (int i = 0; i < customProfiles.size(); ++i) {
168 QStringList profiles = QDir(customProfiles.at(i)).entryList(profilesFilter, QDir::Files);
169 for (int i = 0; i < profiles.size(); ++i) {
170 if (profiles.at(i) == path) {
171 KConfig confFile(customProfiles.at(i) + "/" + profiles.at(i));
172 return confFile.entryMap();
176 return QMap< QString, QString >();
180 QMap< QString, QString > ProfilesDialog::getSettingsForProfile(const QString profileName) {
181 QStringList profilesNames;
182 QStringList profilesFiles;
183 QStringList profilesFilter;
184 profilesFilter << "*";
186 // List the Mlt profiles
187 profilesFiles = QDir(KdenliveSettings::mltpath()).entryList(profilesFilter, QDir::Files);
188 for (int i = 0; i < profilesFiles.size(); ++i) {
189 KConfig confFile(KdenliveSettings::mltpath() + "/" + profilesFiles.at(i));
190 QMap< QString, QString > values = confFile.entryMap();
191 if (values.value("description") == profileName) return values;
194 // List custom profiles
195 QStringList customProfiles = KGlobal::dirs()->findDirs("appdata", "profiles");
196 for (int i = 0; i < customProfiles.size(); ++i) {
197 QStringList profiles = QDir(customProfiles.at(i)).entryList(profilesFilter, QDir::Files);
198 for (int i = 0; i < profiles.size(); ++i) {
199 KConfig confFile(customProfiles.at(i) + "/" + profiles.at(i));
200 QMap< QString, QString > values = confFile.entryMap();
201 if (values.value("description") == profileName) return values;
204 return QMap< QString, QString >();
207 void ProfilesDialog::slotUpdateDisplay() {
208 QString currentProfile = m_view.profiles_list->currentText();
209 QString currentProfilePath;
210 if (m_mltProfilesList.indexOf(currentProfile) != -1) {
211 currentProfilePath = KdenliveSettings::mltpath() + "/" + currentProfile;
212 m_isCustomProfile = false;
214 m_isCustomProfile = true;
215 QStringList customProfiles = KGlobal::dirs()->findDirs("appdata", "mltprofiles");
216 QStringList profilesFilter;
217 profilesFilter << "*";
219 for (i = 0; i < customProfiles.size(); ++i) {
220 QStringList profs = QDir(customProfiles.at(i)).entryList(profilesFilter, QDir::Files);
221 if (profs.indexOf(currentProfile) != -1) break;
223 currentProfilePath = customProfiles.at(i) + "/" + currentProfile;
225 m_view.button_delete->setEnabled(m_isCustomProfile);
226 m_view.properties->setEnabled(m_isCustomProfile);
228 KConfig confFile(currentProfilePath);
229 QMap< QString, QString > values = confFile.entryMap();
230 m_view.description->setText(values.value("description"));
231 m_view.size_w->setValue(values.value("width").toInt());
232 m_view.size_h->setValue(values.value("height").toInt());
233 m_view.aspect_num->setValue(values.value("sample_aspect_num").toInt());
234 m_view.aspect_den->setValue(values.value("sample_aspect_den").toInt());
235 m_view.display_num->setValue(values.value("display_aspect_num").toInt());
236 m_view.display_den->setValue(values.value("display_aspect_den").toInt());
237 m_view.frame_num->setValue(values.value("frame_rate_num").toInt());
238 m_view.frame_den->setValue(values.value("frame_rate_den").toInt());
239 m_view.progressive->setChecked(values.value("progressive").toInt());
244 #include "profilesdialog.moc"