]> git.sesse.net Git - kdenlive/blob - src/effectslist.cpp
i18n: HTML tags don't need to be translated, excluded.
[kdenlive] / src / effectslist.cpp
1 /***************************************************************************
2                           docclipbaseiterator.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 #include <KDebug>
19 #include <KLocale>
20
21 #include "effectslist.h"
22
23
24 EffectsList::EffectsList():
25         QList < QDomElement > () {
26 }
27
28 EffectsList::~EffectsList() {
29 }
30
31 QDomElement EffectsList::getEffectByName(const QString & name) const {
32     QString effectName;
33     for (int i = 0; i < this->size(); ++i) {
34         QDomElement effect =  this->at(i);
35         QDomNode namenode = effect.elementsByTagName("name").item(0);
36         if (!namenode.isNull()) effectName = i18n(namenode.toElement().text().toUtf8().data());
37         if (name == effectName) {
38             QDomNodeList params = effect.elementsByTagName("parameter");
39             for (int i = 0; i < params.count(); i++) {
40                 QDomElement e = params.item(i).toElement();
41                 if (!e.hasAttribute("value"))
42                     e.setAttribute("value", e.attribute("default"));
43             }
44             return effect;
45         }
46     }
47
48     return QDomElement();
49 }
50
51 QDomElement EffectsList::getEffectByTag(const QString & tag, const QString & id) const {
52
53     if (!id.isEmpty()) for (int i = 0; i < this->size(); ++i) {
54             QDomElement effect =  this->at(i);
55             //kDebug() << "// SRCH EFFECT; " << id << ", LKING: " << effect.attribute("id");
56             if (effect.attribute("id") == id) {
57                 QDomNodeList params = effect.elementsByTagName("parameter");
58                 for (int i = 0; i < params.count(); i++) {
59                     QDomElement e = params.item(i).toElement();
60                     if (!e.hasAttribute("value"))
61                         e.setAttribute("value", e.attribute("default"));
62                 }
63                 return effect;
64             }
65         }
66
67     if (!tag.isEmpty()) for (int i = 0; i < this->size(); ++i) {
68             QDomElement effect =  this->at(i);
69             if (effect.attribute("tag") == tag) {
70                 QDomNodeList params = effect.elementsByTagName("parameter");
71                 for (int i = 0; i < params.count(); i++) {
72                     QDomElement e = params.item(i).toElement();
73                     if (!e.hasAttribute("value"))
74                         e.setAttribute("value", e.attribute("default"));
75                 }
76                 return effect;
77             }
78         }
79
80     return QDomElement();
81 }
82
83 int EffectsList::hasEffect(const QString & tag, const QString & id) const {
84     for (int i = 0; i < this->size(); ++i) {
85         QDomElement effect =  this->at(i);
86         if (!id.isEmpty()) {
87             if (effect.attribute("id") == id) return i;
88         } else if (!tag.isEmpty() && effect.attribute("tag") == tag) return i;
89     }
90     return -1;
91 }
92
93 QStringList EffectsList::effectIdInfo(const int ix) const {
94     QStringList info;
95     QDomElement effect =  this->at(ix);
96     QDomNode namenode = effect.elementsByTagName("name").item(0);
97     info << i18n(namenode.toElement().text().toUtf8().data()) << effect.attribute("tag") << effect.attribute("id");
98     return info;
99 }
100
101 QStringList EffectsList::effectNames() {
102     QStringList list;
103     for (int i = 0; i < this->size(); ++i) {
104         QDomElement effect =  this->at(i);
105         QDomNode namenode = effect.elementsByTagName("name").item(0);
106         if (!namenode.isNull()) list.append(i18n(namenode.toElement().text().toUtf8().data()));
107     }
108     return list;
109 }
110
111 QString EffectsList::getInfo(const QString & tag, const QString & id) const {
112     QString info;
113     QDomElement effect = getEffectByTag(tag, id);
114     QDomNode namenode = effect.elementsByTagName("description").item(0);
115     if (!namenode.isNull()) info = i18n(namenode.toElement().text().toUtf8().data());
116     namenode = effect.elementsByTagName("author").item(0);
117     if (!namenode.isNull()) info.append("<br /><strong>" + i18n("Author:") + " </strong>" + i18n(namenode.toElement().text().toUtf8().data()));
118     return info;
119 }
120
121 QString EffectsList::getInfoFromIndex(const int ix) const {
122     QString info;
123     QDomElement effect = this->at(ix);
124     QDomNode namenode = effect.elementsByTagName("description").item(0);
125     if (!namenode.isNull()) info = i18n(namenode.toElement().text().toUtf8().data());
126     namenode = effect.elementsByTagName("author").item(0);
127     if (!namenode.isNull()) info.append("<br /><strong>" + i18n("Author:") + " </strong>" + i18n(namenode.toElement().text().toUtf8().data()));
128     return info;
129 }
130
131 bool EffectsList::hasKeyFrames(QDomElement effect) {
132     QDomNodeList params = effect.elementsByTagName("parameter");
133     for (int i = 0; i < params.count(); i++) {
134         QDomElement e = params.item(i).toElement();
135         if (e.attribute("type") == "keyframe") return true;
136     }
137     return false;
138 }
139
140 EffectsList EffectsList::clone() const {
141     EffectsList list = EffectsList();
142     for (int i = 0; i < this->size(); ++i) {
143         list.append(this->at(i).cloneNode().toElement());
144     }
145     return list;
146 }
147
148 // static
149 void EffectsList::setParameter(QDomElement effect, const QString &name, const QString &value) {
150     QDomNodeList params = effect.elementsByTagName("parameter");
151     for (int i = 0; i < params.count(); i++) {
152         QDomElement e = params.item(i).toElement();
153         if (e.attribute("name") == name) {
154             e.setAttribute("value", value);
155             break;
156         }
157     }
158 }
159
160 // static
161 QString EffectsList::parameter(QDomElement effect, const QString &name) {
162     QDomNodeList params = effect.elementsByTagName("parameter");
163     for (int i = 0; i < params.count(); i++) {
164         QDomElement e = params.item(i).toElement();
165         if (e.attribute("name") == name) {
166             return e.attribute("value");
167         }
168     }
169     return QString();
170 }
171