]> git.sesse.net Git - kdenlive/blob - src/profilesdialog.cpp
Save default profile
[kdenlive] / src / profilesdialog.cpp
1 /***************************************************************************
2  *   Copyright (C) 2008 by Jean-Baptiste Mardelle (jb@kdenlive.org)        *
3  *                                                                         *
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.                                   *
8  *                                                                         *
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.                          *
13  *                                                                         *
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  ***************************************************************************/
19
20 #include <QDir>
21
22 #include <KStandardDirs>
23 #include <KDebug>
24
25 #include "kdenlivesettings.h"
26 #include "profilesdialog.h"
27
28 ProfilesDialog::ProfilesDialog(QWidget * parent): QDialog(parent), m_isCustomProfile(false) {
29     m_view.setupUi(this);
30
31     QStringList profilesFilter;
32     profilesFilter << "*";
33
34     // List the Mlt profiles
35     m_mltProfilesList = QDir(KdenliveSettings::mltpath()).entryList(profilesFilter, QDir::Files);
36     m_view.profiles_list->addItems(m_mltProfilesList);
37
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);
43
44     if (!KdenliveSettings::default_profile().isEmpty()) {
45         int ix = m_view.profiles_list->findText(KdenliveSettings::default_profile());
46         m_view.profiles_list->setCurrentIndex(ix);
47     }
48     slotUpdateDisplay();
49     connect(m_view.profiles_list, SIGNAL(currentIndexChanged(int)), this, SLOT(slotUpdateDisplay()));
50 }
51
52 // static
53 MltVideoProfile ProfilesDialog::getVideoProfile(QString name) {
54     MltVideoProfile result;
55     QStringList profilesNames;
56     QStringList profilesFiles;
57     QStringList profilesFilter;
58     profilesFilter << "*";
59     QString path;
60     bool isCustom = false;
61     if (name.contains('/')) isCustom = true;
62
63     if (!isCustom) {
64         // List the Mlt profiles
65         profilesFiles = QDir(KdenliveSettings::mltpath()).entryList(profilesFilter, QDir::Files);
66         if (profilesFiles.contains(name)) path = KdenliveSettings::mltpath() + "/" + name;
67     }
68     if (isCustom  || path.isEmpty()) {
69         // List custom profiles
70         path = name;
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;
76                         break;
77                     }
78                 }*/
79     }
80
81     if (path.isEmpty()) return result;
82     KConfig confFile(path);
83     result.path = name;
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();
94     return result;
95 }
96
97 // static
98 QString ProfilesDialog::getProfileDescription(QString name) {
99     QStringList profilesNames;
100     QStringList profilesFiles;
101     QStringList profilesFilter;
102     profilesFilter << "*";
103
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");
109     }
110
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");
118         }
119     }
120
121     return QString();
122 }
123
124 // static
125 QStringList ProfilesDialog::getProfileNames() {
126     QStringList profilesNames;
127     QStringList profilesFiles;
128     QStringList profilesFilter;
129     profilesFilter << "*";
130
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);
137     }
138
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);
147         }
148     }
149
150     return profilesNames;
151 }
152
153 // static
154 QMap< QString, QString > ProfilesDialog::getSettingsFromFile(const QString path) {
155     QStringList profilesNames;
156     QStringList profilesFiles;
157     QStringList profilesFilter;
158     profilesFilter << "*";
159
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();
166         }
167     }
168
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();
177             }
178         }
179     }
180     return QMap< QString, QString >();
181 }
182
183 // static
184 QMap< QString, QString > ProfilesDialog::getSettingsForProfile(const QString profileName) {
185     QStringList profilesNames;
186     QStringList profilesFiles;
187     QStringList profilesFilter;
188     profilesFilter << "*";
189
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));
197             return values;
198         }
199     }
200
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));
210                 return values;
211             }
212         }
213     }
214     return QMap< QString, QString >();
215 }
216
217 // static
218 QString ProfilesDialog::getPathFromDescription(const QString profileDesc) {
219     QStringList profilesNames;
220     QStringList profilesFiles;
221     QStringList profilesFilter;
222     profilesFilter << "*";
223
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);
230     }
231
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);
240         }
241     }
242     return QString();
243 }
244
245
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;
252     } else {
253         m_isCustomProfile = true;
254         QStringList customProfiles = KGlobal::dirs()->findDirs("appdata", "mltprofiles");
255         QStringList profilesFilter;
256         profilesFilter << "*";
257         int i;
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;
261         }
262         currentProfilePath = customProfiles.at(i) + "/" + currentProfile;
263     }
264     m_view.button_delete->setEnabled(m_isCustomProfile);
265     m_view.properties->setEnabled(m_isCustomProfile);
266
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());
279
280 }
281
282
283 #include "profilesdialog.moc"
284
285