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 << "*";
60 bool isCustom = false;
61 if (name.contains('/')) isCustom = true;
64 // List the Mlt profiles
65 profilesFiles = QDir(KdenliveSettings::mltpath()).entryList(profilesFilter, QDir::Files);
66 if (profilesFiles.contains(name)) path = KdenliveSettings::mltpath() + "/" + name;
68 if (isCustom || path.isEmpty()) {
69 // List custom profiles
71 /* QStringList customProfiles = KGlobal::dirs()->findDirs("appdata", "profiles");
72 for (int i = 0; i < customProfiles.size(); ++i) {
73 profilesFiles = QDir(customProfiles.at(i)).entryList(profilesFilter, QDir::Files);
74 if (profilesFiles.contains(name)) {
75 path = customProfiles.at(i) + "/" + name;
81 if (path.isEmpty()) return result;
82 KConfig confFile(path);
84 result.description = confFile.entryMap().value("description");
85 result.frame_rate_num = confFile.entryMap().value("frame_rate_num").toInt();
86 result.frame_rate_den = confFile.entryMap().value("frame_rate_den").toInt();
87 result.width = confFile.entryMap().value("width").toInt();
88 result.height = confFile.entryMap().value("height").toInt();
89 result.progressive = confFile.entryMap().value("progressive").toInt();
90 result.sample_aspect_num = confFile.entryMap().value("sample_aspect_num").toInt();
91 result.sample_aspect_den = confFile.entryMap().value("sample_aspect_den").toInt();
92 result.display_aspect_num = confFile.entryMap().value("display_aspect_num").toInt();
93 result.display_aspect_den = confFile.entryMap().value("display_aspect_den").toInt();
98 QString ProfilesDialog::getProfileDescription(QString name) {
99 QStringList profilesNames;
100 QStringList profilesFiles;
101 QStringList profilesFilter;
102 profilesFilter << "*";
104 // List the Mlt profiles
105 profilesFiles = QDir(KdenliveSettings::mltpath()).entryList(profilesFilter, QDir::Files);
106 if (profilesFiles.contains(name)) {
107 KConfig confFile(KdenliveSettings::mltpath() + "/" + name);
108 return confFile.entryMap().value("description");
111 // List custom profiles
112 QStringList customProfiles = KGlobal::dirs()->findDirs("appdata", "profiles");
113 for (int i = 0; i < customProfiles.size(); ++i) {
114 profilesFiles = QDir(customProfiles.at(i)).entryList(profilesFilter, QDir::Files);
115 if (profilesFiles.contains(name)) {
116 KConfig confFile(customProfiles.at(i) + "/" + name);
117 return confFile.entryMap().value("description");
125 QStringList ProfilesDialog::getProfileNames() {
126 QStringList profilesNames;
127 QStringList profilesFiles;
128 QStringList profilesFilter;
129 profilesFilter << "*";
131 // List the Mlt profiles
132 profilesFiles = QDir(KdenliveSettings::mltpath()).entryList(profilesFilter, QDir::Files);
133 for (int i = 0; i < profilesFiles.size(); ++i) {
134 KConfig confFile(KdenliveSettings::mltpath() + "/" + profilesFiles.at(i));
135 QString desc = confFile.entryMap().value("description");
136 if (!desc.isEmpty()) profilesNames.append(desc);
139 // List custom profiles
140 QStringList customProfiles = KGlobal::dirs()->findDirs("appdata", "profiles");
141 for (int i = 0; i < customProfiles.size(); ++i) {
142 profilesFiles = QDir(customProfiles.at(i)).entryList(profilesFilter, QDir::Files);
143 for (int i = 0; i < profilesFiles.size(); ++i) {
144 KConfig confFile(customProfiles.at(i) + "/" + profilesFiles.at(i));
145 QString desc = confFile.entryMap().value("description");
146 if (!desc.isEmpty()) profilesNames.append(desc);
150 return profilesNames;
154 QMap< QString, QString > ProfilesDialog::getSettingsFromFile(const QString path) {
155 QStringList profilesNames;
156 QStringList profilesFiles;
157 QStringList profilesFilter;
158 profilesFilter << "*";
160 // List the Mlt profiles
161 profilesFiles = QDir(KdenliveSettings::mltpath()).entryList(profilesFilter, QDir::Files);
162 for (int i = 0; i < profilesFiles.size(); ++i) {
163 if (profilesFiles.at(i) == path) {
164 KConfig confFile(KdenliveSettings::mltpath() + "/" + profilesFiles.at(i));
165 return confFile.entryMap();
169 // List custom profiles
170 QStringList customProfiles = KGlobal::dirs()->findDirs("appdata", "profiles");
171 for (int i = 0; i < customProfiles.size(); ++i) {
172 QStringList profiles = QDir(customProfiles.at(i)).entryList(profilesFilter, QDir::Files);
173 for (int i = 0; i < profiles.size(); ++i) {
174 if (profiles.at(i) == path) {
175 KConfig confFile(customProfiles.at(i) + "/" + profiles.at(i));
176 return confFile.entryMap();
180 return QMap< QString, QString >();
184 QMap< QString, QString > ProfilesDialog::getSettingsForProfile(const QString profileName) {
185 QStringList profilesNames;
186 QStringList profilesFiles;
187 QStringList profilesFilter;
188 profilesFilter << "*";
190 // List the Mlt profiles
191 profilesFiles = QDir(KdenliveSettings::mltpath()).entryList(profilesFilter, QDir::Files);
192 for (int i = 0; i < profilesFiles.size(); ++i) {
193 KConfig confFile(KdenliveSettings::mltpath() + "/" + profilesFiles.at(i));
194 QMap< QString, QString > values = confFile.entryMap();
195 if (values.value("description") == profileName) {
196 values.insert("path", profilesFiles.at(i));
201 // List custom profiles
202 QStringList customProfiles = KGlobal::dirs()->findDirs("appdata", "profiles");
203 for (int i = 0; i < customProfiles.size(); ++i) {
204 QStringList profiles = QDir(customProfiles.at(i)).entryList(profilesFilter, QDir::Files);
205 for (int i = 0; i < profiles.size(); ++i) {
206 KConfig confFile(customProfiles.at(i) + "/" + profiles.at(i));
207 QMap< QString, QString > values = confFile.entryMap();
208 if (values.value("description") == profileName) {
209 values.insert("path", customProfiles.at(i) + "/" + profiles.at(i));
214 return QMap< QString, QString >();
218 QString ProfilesDialog::getPathFromDescription(const QString profileDesc) {
219 QStringList profilesNames;
220 QStringList profilesFiles;
221 QStringList profilesFilter;
222 profilesFilter << "*";
224 // List the Mlt profiles
225 profilesFiles = QDir(KdenliveSettings::mltpath()).entryList(profilesFilter, QDir::Files);
226 for (int i = 0; i < profilesFiles.size(); ++i) {
227 KConfig confFile(KdenliveSettings::mltpath() + "/" + profilesFiles.at(i));
228 QMap< QString, QString > values = confFile.entryMap();
229 if (values.value("description") == profileDesc) return profilesFiles.at(i);
232 // List custom profiles
233 QStringList customProfiles = KGlobal::dirs()->findDirs("appdata", "profiles");
234 for (int i = 0; i < customProfiles.size(); ++i) {
235 QStringList profiles = QDir(customProfiles.at(i)).entryList(profilesFilter, QDir::Files);
236 for (int i = 0; i < profiles.size(); ++i) {
237 KConfig confFile(customProfiles.at(i) + "/" + profiles.at(i));
238 QMap< QString, QString > values = confFile.entryMap();
239 if (values.value("description") == profileDesc) return customProfiles.at(i) + "/" + profiles.at(i);
246 void ProfilesDialog::slotUpdateDisplay() {
247 QString currentProfile = m_view.profiles_list->currentText();
248 QString currentProfilePath;
249 if (m_mltProfilesList.indexOf(currentProfile) != -1) {
250 currentProfilePath = KdenliveSettings::mltpath() + "/" + currentProfile;
251 m_isCustomProfile = false;
253 m_isCustomProfile = true;
254 QStringList customProfiles = KGlobal::dirs()->findDirs("appdata", "mltprofiles");
255 QStringList profilesFilter;
256 profilesFilter << "*";
258 for (i = 0; i < customProfiles.size(); ++i) {
259 QStringList profs = QDir(customProfiles.at(i)).entryList(profilesFilter, QDir::Files);
260 if (profs.indexOf(currentProfile) != -1) break;
262 currentProfilePath = customProfiles.at(i) + "/" + currentProfile;
264 m_view.button_delete->setEnabled(m_isCustomProfile);
265 m_view.properties->setEnabled(m_isCustomProfile);
267 KConfig confFile(currentProfilePath);
268 QMap< QString, QString > values = confFile.entryMap();
269 m_view.description->setText(values.value("description"));
270 m_view.size_w->setValue(values.value("width").toInt());
271 m_view.size_h->setValue(values.value("height").toInt());
272 m_view.aspect_num->setValue(values.value("sample_aspect_num").toInt());
273 m_view.aspect_den->setValue(values.value("sample_aspect_den").toInt());
274 m_view.display_num->setValue(values.value("display_aspect_num").toInt());
275 m_view.display_den->setValue(values.value("display_aspect_den").toInt());
276 m_view.frame_num->setValue(values.value("frame_rate_num").toInt());
277 m_view.frame_den->setValue(values.value("frame_rate_den").toInt());
278 m_view.progressive->setChecked(values.value("progressive").toInt());
283 #include "profilesdialog.moc"