]> git.sesse.net Git - kdenlive/blob - src/mainwindow.h
Add cmake option -DNO_JOGSHUTTLE=1 to disable compilation of jogshuttle stuff, patch...
[kdenlive] / src / mainwindow.h
1 /***************************************************************************
2  *   Copyright (C) 2007 by Jean-Baptiste Mardelle (jb@kdenlive.org)        *
3  *                                                                         *
4  *   This program is free software; you can redistribute it and/or modify  *
5  *   it under the terms of the GNU General Public License as published by  *
6  *   the Free Software Foundation; either version 2 of the License, or     *
7  *   (at your option) any later version.                                   *
8  *                                                                         *
9  *   This program is distributed in the hope that it will be useful,       *
10  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
11  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
12  *   GNU General Public License for more details.                          *
13  *                                                                         *
14  *   You should have received a copy of the GNU General Public License     *
15  *   along with this program; if not, write to the                         *
16  *   Free Software Foundation, Inc.,                                       *
17  *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA          *
18  ***************************************************************************/
19
20
21 #ifndef MAINWINDOW_H
22 #define MAINWINDOW_H
23
24 #include <QDockWidget>
25 #include <QUndoView>
26 #include <QLabel>
27 #include <QProgressBar>
28 #include <QEvent>
29 #include <QTimer>
30
31 #include <KXmlGuiWindow>
32 #include <KTextEdit>
33 #include <KListWidget>
34 #include <KTabWidget>
35 #include <KUndoStack>
36 #include <KRecentFilesAction>
37 #include <KComboBox>
38 #include <kautosavefile.h>
39
40 #include "effectslist.h"
41 #include "gentime.h"
42 #include "definitions.h"
43 #include "statusbarmessagelabel.h"
44
45 class KdenliveDoc;
46 class TrackView;
47 class MonitorManager;
48 class ProjectList;
49 class EffectsListView;
50 class EffectStackView;
51 class TransitionSettings;
52 class Monitor;
53 class RecMonitor;
54 class CustomTrackView;
55 class RenderWidget;
56 #ifndef NO_JOGSHUTTLE
57 class JogShuttle;
58 #endif /* NO_JOGSHUTTLE */
59 class DocClipBase;
60 class Render;
61
62 class MainWindow : public KXmlGuiWindow {
63     Q_OBJECT
64
65 public:
66     MainWindow(const QString &MltPath = QString(), QWidget *parent = 0);
67     void parseProfiles(const QString &mltPath = QString());
68
69     static EffectsList videoEffects;
70     static EffectsList audioEffects;
71     static EffectsList customEffects;
72     static EffectsList transitions;
73 protected:
74     virtual bool queryClose();
75     virtual void customEvent(QEvent * e);
76     virtual void keyPressEvent(QKeyEvent *ke);
77     bool eventFilter(QObject *obj, QEvent *ev);
78     /**
79      * This function is called when it is time for the app to save its
80      * properties for session management purposes.
81      */
82     void saveProperties(KConfig *);
83
84     /**
85      * This function is called when this app is restored.  The KConfig
86      * object points to the session management config file that was saved
87      * with @ref saveProperties
88      */
89     void readProperties(KConfig *);
90
91 private:
92     KTabWidget* m_timelineArea;
93     QProgressBar *statusProgressBar;
94     void setupActions();
95     KdenliveDoc *m_activeDocument;
96     TrackView *m_activeTimeline;
97     MonitorManager *m_monitorManager;
98
99     QDockWidget *projectListDock;
100     ProjectList *m_projectList;
101
102     QDockWidget *effectListDock;
103     EffectsListView *m_effectList;
104     //KListWidget *m_effectList;
105
106     QDockWidget *effectStackDock;
107     EffectStackView *effectStack;
108
109     QDockWidget *transitionConfigDock;
110     TransitionSettings *transitionConfig;
111
112     QDockWidget *clipMonitorDock;
113     Monitor *m_clipMonitor;
114
115     QDockWidget *projectMonitorDock;
116     Monitor *m_projectMonitor;
117
118     QDockWidget *recMonitorDock;
119     RecMonitor *m_recMonitor;
120
121     QDockWidget *undoViewDock;
122     QUndoView *m_undoView;
123     QUndoGroup *m_commandStack;
124
125     KComboBox *m_timecodeFormat;
126
127     QDockWidget *overviewDock;
128     CustomTrackView *m_overView;
129
130     QMenu *m_customEffectsMenu;
131     QMenu *m_timelineContextMenu;
132     QMenu *m_timelineContextClipMenu;
133     QMenu *m_timelineContextTransitionMenu;
134
135     RenderWidget *m_renderWidget;
136
137 #ifndef NO_JOGSHUTTLE
138     JogShuttle *m_jogProcess;
139 #endif /* NO_JOGSHUTTLE */
140
141     KRecentFilesAction *m_fileOpenRecent;
142     KAction *m_projectSearch;
143     KAction *m_projectSearchNext;
144
145     KAction *m_buttonAudioThumbs;
146     KAction *m_buttonVideoThumbs;
147     KAction *m_buttonShowMarkers;
148     KAction *m_buttonFitZoom;
149     KAction *m_buttonSelectTool;
150     KAction *m_buttonRazorTool;
151     KAction *m_buttonSnap;
152     QActionGroup *m_toolGroup;
153     KAction *m_saveAction;
154     KAction *m_closeAction;
155     QSlider *m_zoomSlider;
156     StatusBarMessageLabel *m_messageLabel;
157
158     bool m_findActivated;
159     QString m_findString;
160     QTimer m_findTimer;
161     bool m_initialized;
162
163     void readOptions();
164     void saveOptions();
165 #ifndef NO_JOGSHUTTLE
166     void activateShuttleDevice();
167     void slotShuttleAction(int code);
168 #endif /* NO_JOGSHUTTLE */
169     void connectDocumentInfo(KdenliveDoc *doc);
170     void findAhead();
171     void doOpenFile(const KUrl &url, KAutoSaveFile *stale);
172     void recoverFiles(QList<KAutoSaveFile *> staleFiles);
173
174 public slots:
175     void openFile(const KUrl &url);
176     void slotGotProgressInfo(const QString &message, int progress);
177
178 private slots:
179     void newFile(bool showProjectSettings = true);
180     void queryQuit();
181     void activateDocument();
182     void connectDocument(TrackView*, KdenliveDoc*);
183     void openFile();
184     void openLastFile();
185     void saveFile();
186     void saveFileAs();
187     void saveFileAs(const QString &outputFileName);
188     void slotPreferences(int page = -1, int option = -1);
189     void updateConfiguration();
190     void slotConnectMonitors();
191     void slotRaiseMonitor(bool clipMonitor);
192     void slotSetClipDuration(const QString &id, int duration);
193     void slotUpdateMousePosition(int pos);
194     void slotAddEffect(QDomElement effect, GenTime pos = GenTime(), int track = -1);
195     void slotEditProfiles();
196     void slotEditProjectSettings();
197     void slotDisplayActionMessage(QAction *a);
198     void slotSwitchVideoThumbs();
199     void slotSwitchAudioThumbs();
200     void slotSwitchMarkersComments();
201     void slotSwitchSnap();
202     void slotRenderProject();
203     void slotDoRender(const QString &dest, const QString &render, const QStringList &overlay_args, const QStringList &avformat_args, bool zoneOnly, bool playAfter, double guideStart, double guideEnd);
204     void slotFullScreen();
205     void slotUpdateDocumentState(bool modified);
206     void slotZoomIn();
207     void slotZoomOut();
208     void slotFitZoom();
209     void closeCurrentDocument();
210     void slotDeleteTimelineClip();
211     void slotAddClipMarker();
212     void slotDeleteClipMarker();
213     void slotDeleteAllClipMarkers();
214     void slotEditClipMarker();
215     void slotCutTimelineClip();
216     void slotAddVideoEffect(QAction *result);
217     void slotAddAudioEffect(QAction *result);
218     void slotAddCustomEffect(QAction *result);
219     void slotAddTransition(QAction *result);
220     void slotAddProjectClip(KUrl url);
221 #ifndef NO_JOGSHUTTLE
222     void slotShuttleButton(int code);
223 #endif /* NO_JOGSHUTTLE */
224     void slotShowClipProperties(DocClipBase *clip);
225     void slotActivateEffectStackView();
226     void slotActivateTransitionView();
227     void slotChangeTool(QAction * action);
228     void slotSetTool(PROJECTTOOL tool);
229     void slotSnapForward();
230     void slotSnapRewind();
231     void slotClipStart();
232     void slotClipEnd();
233     void slotFind();
234     void findTimeout();
235     void slotFindNext();
236
237     void slotAddGuide();
238     void slotEditGuide();
239     void slotDeleteGuide();
240     void slotDeleteAllGuides();
241     void slotGuidesUpdated();
242
243     void slotCopy();
244     void slotPaste();
245     void slotPasteEffects();
246     void slotReloadEffects();
247     void slotChangeClipSpeed();
248
249     void slotAdjustClipMonitor();
250     void slotAdjustProjectMonitor();
251     void slotSaveZone(Render *render, QPoint zone);
252
253     void slotSetInPoint();
254     void slotSetOutPoint();
255     void configureNotifications();
256 };
257
258
259 #endif