]> git.sesse.net Git - kdenlive/blobdiff - src/transition.h
Const'ref
[kdenlive] / src / transition.h
index 3678fd35150c911a69f2183539cf128da9c46c3a..90e690e4ea3e5c928bdb7673aa71e0c82474f400 100644 (file)
  *                                                                         *
  ***************************************************************************/
 
+/**
+ * @class Transition
+ * @author Jean-Baptiste Mardelle
+ * @brief Describes a transition with a name, parameters, keyframes, etc.
+ */
+
 #ifndef TRANSITION_H
 #define TRANSITION_H
 
 #include <QString>
 #include <QGraphicsRectItem>
-#include <qpixmap.h>
-#include <qdom.h>
-#include <qmap.h>
+#include <QPixmap>
+#include <QDomElement>
+#include <QMap>
 
 #include "gentime.h"
 #include "definitions.h"
-
-
-/**Describes a Transition, with a name, parameters keyframes, etc.
-  *@author Jean-Baptiste Mardelle
-  */
+#include "abstractclipitem.h"
 
 class ClipItem;
 
-class Transition {
+class Transition : public AbstractClipItem
+{
+    Q_OBJECT
 public:
 
-    Transition(ClipItem * clipa, const TRANSITIONTYPE & type, const GenTime &startTime, const GenTime &endTime, bool inverted = false);
-    Transition(ClipItem * clip, QDomElement transitionElement, GenTime offset = GenTime());
-    ~Transition();
+    Transition(const ItemInfo &info, int transitiontrack, double fps, const QDomElement &params = QDomElement(), bool automaticTransition = false);
+    virtual ~Transition();
+    virtual void paint(QPainter *painter,
+                       const QStyleOptionGraphicsItem *option,
+                       QWidget *widget);
+    virtual int type() const;
 
-    /** Returns an XML representation of this transition. */
+    /** @brief Returns an XML representation of this transition. */
     QDomElement toXML();
 
-    GenTime transitionStartTime() const;
-    GenTime transitionEndTime() const;
-    /** Return the track number of transition in the playlist*/
-    int transitionStartTrack() const;
+    /** @brief Returns the track number of the transition in the playlist. */
     int transitionEndTrack() const;
-    Transition *clone();
-    bool hasClip(const ClipItem * clip) const;
-    bool belongsToClip(const ClipItem * clip) const;
-    void resizeTransitionEnd(GenTime time);
-    void resizeTransitionStart(GenTime time);
-    void moveTransition(GenTime time);
-    bool invertTransition() const;
-    TRANSITIONTYPE transitionType() const;
     QString transitionTag() const;
-    QString transitionName() const;
-    void setTransitionType(TRANSITIONTYPE newType);
-    const QMap < QString, QString > transitionParameters() const;
-    void setTransitionParameters(const QMap < QString, QString > parameters);
-    void setTransitionDirection(bool inv);
-    int transitionTrack() const;
+    QStringList transitionInfo() const;
+    OPERATIONTYPE operationMode(const QPointF &pos);
+    static int itemHeight();
+    static int itemOffset();
+    //const QMap < QString, QString > transitionParameters() const;
+    void setTransitionParameters(const QDomElement &params);
     void setTransitionTrack(int track);
-    QPixmap transitionPixmap() const;
-    Transition *reparent(ClipItem * clip);
-    bool isValid() const;
-    GenTime transitionDuration() const;
-    const ClipItem *referencedClip() const;
-
-private:
 
-    GenTime m_transitionStart;
-    GenTime m_transitionDuration;
-    QMap < QString, QString > m_transitionParameters;
-
-    /** The name of the transition used by mlt (composite, luma,...)*/
-    TRANSITIONTYPE m_transitionType;
-
-    /** The name of the transition to be displayed to user */
-    QString m_transitionName;
-
-    /** Should the transition be reversed */
-    bool m_invertTransition;
+    /** @brief Links the transition to another track.
+     *
+     * This happens only if the current track is not forced. */
+    void updateTransitionEndTrack(int newtrack);
+    void setForcedTrack(bool force, int track);
+    bool forcedTrack() const;
+    Transition *clone();
+    bool isAutomatic() const;
+    void setAutomatic(bool automatic);
+    bool hasGeometry();
+    int defaultZValue() const;
+    /** @brief When a transition is resized, check if keyframes are out of the transition and fix if necessary. 
+     * @param oldEnd the previous transition end, so that when we expand the transition, if there is a keyframe at end we move it
+     */
+    bool updateKeyframes(int oldEnd);
+
+protected:
+    virtual QVariant itemChange(GraphicsItemChange change, const QVariant &value);
 
-    bool m_singleClip;
+private:
+    QString m_name;
+    bool m_forceTransitionTrack;
 
-    /** The track to which the transition is attached*/
-    int m_track;
+    /** @brief True if the transition is attached to its clip. */
+    bool m_automaticTransition;
 
-    /** The clip to which the transition is attached */
-    ClipItem *m_referenceClip;
+    /** @brief Contains the transition parameters. */
+    QDomElement m_parameters;
 
-    /** The 2nd clip to which the transition is attached */
-    ClipItem *m_secondClip;
     int m_transitionTrack;
 
-    /** Return the display name for a transition type */
+    /** @brief Returns the display name for a transition type. */
     QString getTransitionName(const TRANSITIONTYPE & type);
 
-    /** Return the transition type for a given name */
+    /** @brief Returns the transition type for a given name. */
     TRANSITIONTYPE getTransitionForName(const QString & type);
 };