]> git.sesse.net Git - kdenlive/blob - src/effectslist.h
Minor optimization
[kdenlive] / src / effectslist.h
1 /***************************************************************************
2                           effectslist.h  -  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  * @class EffectsList
20  * @brief List for effects objects.
21  * @author Jason Wood
22  *
23  * This is a list of DocClipBase objects, to be used instead of
24  * QList<DocClipBase> to enable sorting lists correctly. It also contains the
25  * ability to set a "master clip", which can be used by a number of operations
26  * where there is the need of one clip to act as a reference for what happens to
27  * all clips.
28  */
29
30 #ifndef EFFECTSLIST_H
31 #define EFFECTSLIST_H
32
33 #include <QDomDocument>
34
35 namespace Kdenlive {
36   enum EFFECTTYPE { simpleEffect, groupEffect };
37 }
38
39 class EffectsList: public QDomDocument
40 {
41 public:
42     EffectsList(bool indexRequired = false);
43     ~EffectsList();
44
45     /** @brief Returns the XML element of an effect.
46      * @param name name of the effect to be returned */
47     QDomElement getEffectByName(const QString & name) const;
48     QDomElement getEffectByTag(const QString & tag, const QString & id) const;
49
50     /** @brief Checks the existance of an effect.
51      * @param tag effect tag
52      * @param id effect id
53      * @return effect index if the effect exists, -1 otherwise */
54     int hasEffect(const QString & tag, const QString & id) const;
55
56     /** @brief Lists the core properties of an effect.
57      * @param ix effect index
58      * @return list of name, tag and id of an effect */
59     QStringList effectIdInfo(const int ix) const;
60
61     /** @brief Lists effects names. */
62     QStringList effectNames();
63     QString getInfo(const QString & tag, const QString & id) const;
64     QString getInfoFromIndex(const int ix) const;
65     QString getEffectInfo(const QDomElement &effect) const;
66     void clone(const EffectsList &original);
67     QDomElement append(QDomElement e);
68     bool isEmpty() const;
69     int count() const;
70     const QDomElement at(int ix) const;
71     void removeAt(int ix);
72     QDomElement itemFromIndex(int ix) const;
73     QDomElement insert(QDomElement effect);
74     void updateEffect(const QDomElement &effect);
75     static bool hasKeyFrames(const QDomElement &effect);
76     static bool hasSimpleKeyFrames(const QDomElement &effect);
77     static bool hasGeometryKeyFrames(const QDomElement &effect);
78     static void setParameter(QDomElement effect, const QString &name, const QString &value);
79     static QString parameter(const QDomElement &effect, const QString &name);
80     /** @brief Change the value of a 'property' element from the effect node. */
81     static void setProperty(QDomElement effect, const QString &name, const QString &value);
82     /** @brief Rename a 'property' element from the effect node. */
83     static void renameProperty(QDomElement effect, const QString &oldName, const QString &newName);
84     /** @brief Get the value of a 'property' element from the effect node. */
85     static QString property(QDomElement effect, const QString &name);
86     /** @brief Delete a 'property' element from the effect node. */
87     static void removeProperty(QDomElement effect, const QString &name);
88     /** @brief Remove all 'meta.*' properties from a producer, used when replacing proxy producers in xml for rendering. */
89     static void removeMetaProperties(QDomElement producer);
90     void clearList();
91     /** @brief Get am effect with effect index equal to ix. */
92     QDomElement effectFromIndex(const QDomNodeList &effects, int ix);
93     /** @brief Update all effects indexes to make sure they are 1, 2, 3, ... */
94     void updateIndexes(QDomNodeList effects, int startIndex);
95     /** @brief Enable / disable a list of effects */
96     void enableEffects(const QList<int> &indexes, bool disable);
97
98 private:
99     QDomElement m_baseElement;
100     bool m_useIndex;
101     
102     /** @brief Init effect default parameter values. */
103     void initEffect(const QDomElement &effect) const;
104
105 };
106
107 #endif