]> git.sesse.net Git - kdenlive/blob - src/effectstack/effectstackview2.h
Merge branch 'master' of git://anongit.kde.org/kdenlive
[kdenlive] / src / effectstack / effectstackview2.h
1 /***************************************************************************
2                           effecstackview2.h  -  description
3                              -------------------
4     begin                : Feb 15 2008
5     copyright            : (C) 2008 by Marco Gittler (g.marco@freenet.de)
6     copyright            : (C) 2012 by Jean-Baptiste Mardelle (jb@kdenlive.org) 
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 EffectStackView2
20  * @brief View part of the EffectStack
21  * @author Marco Gittler
22  */
23
24 #ifndef EFFECTSTACKVIEW2_H
25 #define EFFECTSTACKVIEW2_H
26
27 #include "ui_effectstack2_ui.h"
28 #include "effectstackedit.h"
29 #include "collapsibleeffect.h"
30 #include "collapsiblegroup.h"
31
32 class EffectsList;
33 class ClipItem;
34 class MltVideoProfile;
35 class Monitor;
36
37
38 class EffectStackView2 : public QWidget
39 {
40     Q_OBJECT
41
42 public:
43     EffectStackView2(Monitor *monitor, QWidget *parent = 0);
44     virtual ~EffectStackView2();
45
46     /** @brief Raises @param dock if a clip is loaded. */
47     void raiseWindow(QWidget* dock);
48
49     /** @brief return the index of the track displayed in effect stack
50      ** @param ok set to true if we are looking at a track's effects, otherwise false. */
51     int isTrackMode(bool *ok) const;
52
53     /** @brief Clears the list of effects and updates the buttons accordingly. */
54     void clear();
55
56     /** @brief Passes updates on @param profile and @param t on to the effect editor. */
57     void updateProjectFormat(MltVideoProfile profile, Timecode t);
58
59     /** @brief Tells the effect editor to update its timecode format. */
60     void updateTimecodeFormat();
61     
62     /** @brief Used to trigger drag effects. */
63     virtual bool eventFilter( QObject * o, QEvent * e );
64     
65     CollapsibleEffect *getEffectByIndex(int ix);
66     
67     /** @brief Delete currently selected effect. */
68     void deleteCurrentEffect();
69     
70     /** @brief Palette was changed, update style. */
71     void updatePalette();
72
73 protected:
74     virtual void mouseMoveEvent(QMouseEvent * event);
75     virtual void mouseReleaseEvent(QMouseEvent * event);
76     virtual void resizeEvent ( QResizeEvent * event );
77     virtual void dragEnterEvent(QDragEnterEvent *event);
78     virtual void dropEvent(QDropEvent *event);
79   
80 private:
81     Ui::EffectStack2_UI m_ui;
82     ClipItem* m_clipref;
83     QList <CollapsibleEffect*> m_effects;
84     EffectsList m_currentEffectList;
85     
86     /** @brief Contains infos about effect like is it a track effect, which monitor displays it,... */
87     EffectMetaInfo m_effectMetaInfo;
88     
89     /** @brief The last mouse click position, used to detect drag events. */
90     QPoint m_clickPoint;
91
92     /** @brief The track index of currently edited track. */
93     int m_trackindex;
94
95     /** If in track mode: Info of the edited track to be able to access its duration. */
96     TrackInfo m_trackInfo;
97     
98     /** @brief The effect currently being dragged, NULL if no drag happening. */
99     CollapsibleEffect *m_draggedEffect;
100     
101     /** @brief The effect currently being dragged, NULL if no drag happening. */
102     CollapsibleGroup *m_draggedGroup;
103     
104     /** @brief The current number of groups. */
105     int m_groupIndex;
106
107     /** @brief Sets the list of effects according to the clip's effect list. */
108     void setupListView();
109     
110     /** @brief Build the drag info and start it. */
111     void startDrag();
112     
113     /** @brief Connect an effect to its signals. */
114     void connectEffect(CollapsibleEffect *currentEffect);
115
116 public slots:
117     /** @brief Sets the clip whose effect list should be managed.
118     * @param c Clip whose effect list should be managed */
119     void slotClipItemSelected(ClipItem* c);
120
121     void slotTrackItemSelected(int ix, const TrackInfo info);
122    
123     /** @brief Check if the mouse wheel events should be used for scrolling the widget view. */
124     void slotCheckWheelEventFilter();
125
126 private slots:
127
128     /** @brief Emits seekTimeline with position = clipstart + @param pos. */
129     void slotSeekTimeline(int pos);
130
131
132     /* @brief Define the region filter for current effect.
133     void slotRegionChanged();*/
134
135     /** @brief Checks whether the monitor scene has to be displayed. */
136     void slotCheckMonitorPosition(int renderPos);
137
138     void slotUpdateEffectParams(const QDomElement old, const QDomElement e, int ix);
139
140     /** @brief Move an effect in the stack.
141      * @param index The effect index in the stack
142      * @param up true if we want to move effect up, false for down */
143     void slotMoveEffectUp(int index, bool up);
144
145     /** @brief Delete an effect in the stack. */
146     void slotDeleteEffect(const QDomElement effect);
147     
148     /** @brief Delete all effect in a group. */
149     void slotDeleteGroup(QDomDocument doc);
150
151     /** @brief Pass position changes of the timeline cursor to the effects to keep their local timelines in sync. */
152     void slotRenderPos(int pos);
153
154     /** @brief Called whenever an effect is enabled / disabled by user. */
155     void slotUpdateEffectState(bool disable, int index, bool updateMainStatus);
156
157     void slotSetCurrentEffect(int ix);
158     
159     /** @brief Triggers a filter job on this clip. */
160     void slotStartFilterJob(const QString&filterName, const QString&filterParams, const QString&finalFilterName, const QString&consumer, const QString&consumerParams, const QString&properties);
161     
162     /** @brief Reset an effect to its default values. */
163     void slotResetEffect(int ix);
164     
165     /** @brief Create a group containing effect with ix index. */
166     void slotCreateGroup(int ix);
167     
168     /** @brief Create a region effect with ix index. */
169     void slotCreateRegion(int ix, KUrl url);
170     
171     /** @brief Move an effect into a group.
172       ** @param ix the index of effect to move in stack layout
173       ** @param group the effect on which the effect was dropped
174       ** @param lastEffectIndex the last effect index in the group, effect will be inserted after that index
175       */
176     void slotMoveEffect(int currentIndex, int newIndex, int groupIndex, QString groupName = QString());
177     
178     /** @brief Remove effects from a group */
179     void slotUnGroup(CollapsibleGroup* group);
180     
181     /** @brief Add en effect to selected clip */
182     void slotAddEffect(QDomElement effect);
183     
184     /** @brief Enable / disable all effects for the clip */
185     void slotCheckAll(int state);
186     
187     /** @brief Update check all button status */
188     void slotUpdateCheckAllButton();
189     
190     /** @brief Display additionnal effect info */
191     void slotShowComments();
192     
193     /** @brief An effect group was renamed, update effects info */
194     void slotRenameGroup(CollapsibleGroup *group);
195
196 signals:
197     void removeEffect(ClipItem*, int, QDomElement);
198     /**  Parameters for an effect changed, update the filter in playlist */
199     void updateEffect(ClipItem*, int, QDomElement, QDomElement, int,bool);
200     /** An effect in stack was moved, we need to regenerate
201         all effects for this clip in the playlist */
202     void refreshEffectStack(ClipItem *);
203     /** Enable or disable an effect */
204     void changeEffectState(ClipItem*, int, int, bool);
205     /** An effect in stack was moved */
206     void changeEffectPosition(ClipItem*, int, int, int);
207     /** an effect was saved, reload list */
208     void reloadEffects();
209     /** An effect with position parameter was changed, seek */
210     void seekTimeline(int);
211     /** The region effect for current effect was changed */
212     void updateClipRegion(ClipItem*, int, QString);
213     void displayMessage(const QString&, int);
214     void showComments(bool show);
215     void startFilterJob(ItemInfo info, const QString &clipId, const QString &filterName, const QString &filterParams, const QString&finalFilterName, const QString &consumer, const QString &consumerParams, const QString &properties);
216     void addEffect(ClipItem*,QDomElement);
217 };
218
219 #endif