]> git.sesse.net Git - kdenlive/blob - src/effectslist.cpp
3a64e7dbb064ab1c830ddaaaac50791c1192d3a9
[kdenlive] / src / effectslist.cpp
1 /***************************************************************************
2                           effectslist.cpp  -  description
3                              -------------------
4     begin                : Sat Aug 10 2002
5     copyright            : (C) 2002 by Jason Wood
6     email                : jasonwood@blueyonder.co.uk
7  ***************************************************************************/
8
9 /***************************************************************************
10  *                                                                         *
11  *   This program is free software; you can redistribute it and/or modify  *
12  *   it under the terms of the GNU General Public License as published by  *
13  *   the Free Software Foundation; either version 2 of the License, or     *
14  *   (at your option) any later version.                                   *
15  *                                                                         *
16  ***************************************************************************/
17
18
19 #include "effectslist.h"
20
21 #include <KDebug>
22 #include <KLocale>
23
24
25 EffectsList::EffectsList() :
26         QList < QDomElement > ()
27 {
28 }
29
30 EffectsList::~EffectsList()
31 {
32 }
33
34 QDomElement EffectsList::getEffectByName(const QString & name) const
35 {
36     QString effectName;
37     for (int i = 0; i < size(); ++i) {
38         QDomElement effect =  at(i);
39         QDomNode namenode = effect.elementsByTagName("name").item(0);
40         if (!namenode.isNull()) effectName = i18n(namenode.toElement().text().toUtf8().data());
41         if (name == effectName) {
42             QDomNodeList params = effect.elementsByTagName("parameter");
43             for (int i = 0; i < params.count(); i++) {
44                 QDomElement e = params.item(i).toElement();
45                 if (!e.hasAttribute("value"))
46                     e.setAttribute("value", e.attribute("default"));
47             }
48             return effect;
49         }
50     }
51
52     return QDomElement();
53 }
54
55 QDomElement EffectsList::getEffectByTag(const QString & tag, const QString & id) const
56 {
57
58     if (!id.isEmpty()) for (int i = 0; i < size(); ++i) {
59             QDomElement effect =  at(i);
60             //kDebug() << "// SRCH EFFECT; " << id << ", LKING: " << effect.attribute("id");
61             if (effect.attribute("id") == id) {
62                 QDomNodeList params = effect.elementsByTagName("parameter");
63                 for (int i = 0; i < params.count(); i++) {
64                     QDomElement e = params.item(i).toElement();
65                     if (!e.hasAttribute("value"))
66                         e.setAttribute("value", e.attribute("default"));
67                 }
68                 return effect;
69             }
70         }
71
72     if (!tag.isEmpty()) for (int i = 0; i < size(); ++i) {
73             QDomElement effect =  at(i);
74             if (effect.attribute("tag") == tag) {
75                 QDomNodeList params = effect.elementsByTagName("parameter");
76                 for (int i = 0; i < params.count(); i++) {
77                     QDomElement e = params.item(i).toElement();
78                     if (!e.hasAttribute("value"))
79                         e.setAttribute("value", e.attribute("default"));
80                 }
81                 return effect;
82             }
83         }
84
85     return QDomElement();
86 }
87
88 int EffectsList::hasEffect(const QString & tag, const QString & id) const
89 {
90     for (int i = 0; i < size(); ++i) {
91         QDomElement effect =  at(i);
92         if (!id.isEmpty()) {
93             if (effect.attribute("id") == id) return i;
94         } else if (!tag.isEmpty() && effect.attribute("tag") == tag) return i;
95     }
96     return -1;
97 }
98
99 QStringList EffectsList::effectIdInfo(const int ix) const
100 {
101     QStringList info;
102     QDomElement effect =  at(ix);
103     QDomNode namenode = effect.elementsByTagName("name").item(0);
104     info << i18n(namenode.toElement().text().toUtf8().data()) << effect.attribute("tag") << effect.attribute("id");
105     return info;
106 }
107
108 QStringList EffectsList::effectNames()
109 {
110     QStringList list;
111     for (int i = 0; i < size(); ++i) {
112         QDomElement effect =  at(i);
113         QDomNode namenode = effect.elementsByTagName("name").item(0);
114         if (!namenode.isNull()) list.append(i18n(namenode.toElement().text().toUtf8().data()));
115     }
116     return list;
117 }
118
119 QString EffectsList::getInfo(const QString & tag, const QString & id) const
120 {
121     QString info;
122     QDomElement effect = getEffectByTag(tag, id);
123     QDomNode namenode = effect.elementsByTagName("description").item(0);
124     if (!namenode.isNull()) info = i18n(namenode.toElement().text().toUtf8().data());
125     namenode = effect.elementsByTagName("author").item(0);
126     if (!namenode.isNull()) info.append("<br /><strong>" + i18n("Author:") + " </strong>" + i18n(namenode.toElement().text().toUtf8().data()));
127     return info;
128 }
129
130 QString EffectsList::getInfoFromIndex(const int ix) const
131 {
132     QString info;
133     QDomElement effect = at(ix);
134     QDomNode namenode = effect.elementsByTagName("description").item(0);
135     if (!namenode.isNull()) info = i18n(namenode.toElement().text().toUtf8().data());
136     namenode = effect.elementsByTagName("author").item(0);
137     if (!namenode.isNull()) info.append("<br /><strong>" + i18n("Author:") + " </strong>" + i18n(namenode.toElement().text().toUtf8().data()));
138     return info;
139 }
140
141 bool EffectsList::hasKeyFrames(QDomElement effect)
142 {
143     QDomNodeList params = effect.elementsByTagName("parameter");
144     for (int i = 0; i < params.count(); i++) {
145         QDomElement e = params.item(i).toElement();
146         if (e.attribute("type") == "keyframe") return true;
147     }
148     return false;
149 }
150
151 EffectsList EffectsList::clone() const
152 {
153     EffectsList list;
154     for (int i = 0; i < size(); ++i) {
155         list.append(at(i).cloneNode().toElement());
156     }
157     return list;
158 }
159
160 // static
161 void EffectsList::setParameter(QDomElement effect, const QString &name, const QString &value)
162 {
163     QDomNodeList params = effect.elementsByTagName("parameter");
164     for (int i = 0; i < params.count(); i++) {
165         QDomElement e = params.item(i).toElement();
166         if (e.attribute("name") == name) {
167             e.setAttribute("value", value);
168             break;
169         }
170     }
171 }
172
173 // static
174 QString EffectsList::parameter(QDomElement effect, const QString &name)
175 {
176     QDomNodeList params = effect.elementsByTagName("parameter");
177     for (int i = 0; i < params.count(); i++) {
178         QDomElement e = params.item(i).toElement();
179         if (e.attribute("name") == name) {
180             return e.attribute("value");
181         }
182     }
183     return QString();
184 }
185