]> git.sesse.net Git - kdenlive/blob - src/profilesdialog.cpp
Start using mlt profiles
[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
61     // List the Mlt profiles
62     profilesFiles = QDir(KdenliveSettings::mltpath()).entryList(profilesFilter, QDir::Files);
63     if (profilesFiles.contains(name)) path = KdenliveSettings::mltpath() + "/" + name;
64
65     if (path.isEmpty()) {
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;
72                 break;
73             }
74         }
75     }
76
77     if (path.isEmpty()) return result;
78     KConfig confFile(path);
79     result.path = 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();
90     return result;
91 }
92
93 // static
94 QString ProfilesDialog::getProfileDescription(QString name) {
95     QStringList profilesNames;
96     QStringList profilesFiles;
97     QStringList profilesFilter;
98     profilesFilter << "*";
99
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");
105     }
106
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");
114         }
115     }
116
117     return QString();
118 }
119
120 // static
121 QStringList ProfilesDialog::getProfileNames() {
122     QStringList profilesNames;
123     QStringList profilesFiles;
124     QStringList profilesFilter;
125     profilesFilter << "*";
126
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);
133     }
134
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);
143         }
144     }
145
146     return profilesNames;
147 }
148
149 // static
150 QMap< QString, QString > ProfilesDialog::getSettingsFromFile(const QString path) {
151     QStringList profilesNames;
152     QStringList profilesFiles;
153     QStringList profilesFilter;
154     profilesFilter << "*";
155
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();
162         }
163     }
164
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();
173             }
174         }
175     }
176     return QMap< QString, QString >();
177 }
178
179 // static
180 QMap< QString, QString > ProfilesDialog::getSettingsForProfile(const QString profileName) {
181     QStringList profilesNames;
182     QStringList profilesFiles;
183     QStringList profilesFilter;
184     profilesFilter << "*";
185
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;
192     }
193
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;
202         }
203     }
204     return QMap< QString, QString >();
205 }
206
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;
213     } else {
214         m_isCustomProfile = true;
215         QStringList customProfiles = KGlobal::dirs()->findDirs("appdata", "mltprofiles");
216         QStringList profilesFilter;
217         profilesFilter << "*";
218         int i;
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;
222         }
223         currentProfilePath = customProfiles.at(i) + "/" + currentProfile;
224     }
225     m_view.button_delete->setEnabled(m_isCustomProfile);
226     m_view.properties->setEnabled(m_isCustomProfile);
227
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());
240
241 }
242
243
244 #include "profilesdialog.moc"
245
246