]> git.sesse.net Git - kdenlive/blob - src/transition.h
90e690e4ea3e5c928bdb7673aa71e0c82474f400
[kdenlive] / src / transition.h
1 /***************************************************************************
2                           transition.h  -  description
3                              -------------------
4     begin                : Tue Jan 24 2006
5     copyright            : (C) 2006 by Jean-Baptiste Mardelle
6     email                : jb@ader.ch
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 Transition
20  * @author Jean-Baptiste Mardelle
21  * @brief Describes a transition with a name, parameters, keyframes, etc.
22  */
23
24 #ifndef TRANSITION_H
25 #define TRANSITION_H
26
27 #include <QString>
28 #include <QGraphicsRectItem>
29 #include <QPixmap>
30 #include <QDomElement>
31 #include <QMap>
32
33 #include "gentime.h"
34 #include "definitions.h"
35 #include "abstractclipitem.h"
36
37 class ClipItem;
38
39 class Transition : public AbstractClipItem
40 {
41     Q_OBJECT
42 public:
43
44     Transition(const ItemInfo &info, int transitiontrack, double fps, const QDomElement &params = QDomElement(), bool automaticTransition = false);
45     virtual ~Transition();
46     virtual void paint(QPainter *painter,
47                        const QStyleOptionGraphicsItem *option,
48                        QWidget *widget);
49     virtual int type() const;
50
51     /** @brief Returns an XML representation of this transition. */
52     QDomElement toXML();
53
54     /** @brief Returns the track number of the transition in the playlist. */
55     int transitionEndTrack() const;
56     QString transitionTag() const;
57     QStringList transitionInfo() const;
58     OPERATIONTYPE operationMode(const QPointF &pos);
59     static int itemHeight();
60     static int itemOffset();
61     //const QMap < QString, QString > transitionParameters() const;
62     void setTransitionParameters(const QDomElement &params);
63     void setTransitionTrack(int track);
64
65     /** @brief Links the transition to another track.
66      *
67      * This happens only if the current track is not forced. */
68     void updateTransitionEndTrack(int newtrack);
69     void setForcedTrack(bool force, int track);
70     bool forcedTrack() const;
71     Transition *clone();
72     bool isAutomatic() const;
73     void setAutomatic(bool automatic);
74     bool hasGeometry();
75     int defaultZValue() const;
76     /** @brief When a transition is resized, check if keyframes are out of the transition and fix if necessary. 
77      * @param oldEnd the previous transition end, so that when we expand the transition, if there is a keyframe at end we move it
78      */
79     bool updateKeyframes(int oldEnd);
80
81 protected:
82     virtual QVariant itemChange(GraphicsItemChange change, const QVariant &value);
83
84 private:
85     QString m_name;
86     bool m_forceTransitionTrack;
87
88     /** @brief True if the transition is attached to its clip. */
89     bool m_automaticTransition;
90
91     /** @brief Contains the transition parameters. */
92     QDomElement m_parameters;
93
94     int m_transitionTrack;
95
96     /** @brief Returns the display name for a transition type. */
97     QString getTransitionName(const TRANSITIONTYPE & type);
98
99     /** @brief Returns the transition type for a given name. */
100     TRANSITIONTYPE getTransitionForName(const QString & type);
101 };
102
103 #endif