]> git.sesse.net Git - kdenlive/blobdiff - src/mainwindow.h
Various changes for getting an OpenGL context (almost) everywhere it is needed.
[kdenlive] / src / mainwindow.h
index 703fc625cd0ef08b695bde47b21c03f207fd089d..8b631dab44c8a145460c9e0ef353ac4ddb62c0d5 100644 (file)
@@ -28,6 +28,9 @@
 #include <QEvent>
 #include <QTimer>
 #include <QShortcut>
+#include <QMap>
+#include <QString>
+#include <QImage>
 
 #include <KXmlGuiWindow>
 #include <KTextEdit>
@@ -45,7 +48,8 @@
 #include "statusbarmessagelabel.h"
 #include "dvdwizard.h"
 #include "stopmotion/stopmotion.h"
-#include "noteswidget.h"
+#include "widgets/noteswidget.h"
+#include "ui_backupdialog_ui.h"
 
 class KdenliveDoc;
 class TrackView;
@@ -53,27 +57,28 @@ class MonitorManager;
 class ProjectList;
 class EffectsListView;
 class EffectStackView;
+class EffectStackView2;
 class TransitionSettings;
 class Monitor;
 class RecMonitor;
-class CustomTrackView;
 class RenderWidget;
-#ifndef NO_JOGSHUTTLE
+#ifdef USE_JOGSHUTTLE
 class JogShuttle;
 class JogShuttleAction;
-#endif /* NO_JOGSHUTTLE */
+#endif
 class DocClipBase;
 class Render;
 class Transition;
+class ScopeManager;
 class Histogram;
 class Vectorscope;
 class Waveform;
 class RGBParade;
 class KActionCollection;
 class AudioSignal;
-class AbstractAudioScopeWidget;
 class AudioSpectrum;
 class Spectrogram;
+class QGLWidget;
 
 class MainWindow : public KXmlGuiWindow
 {
@@ -106,6 +111,10 @@ public:
     static EffectsList audioEffects;
     static EffectsList customEffects;
     static EffectsList transitions;
+    
+    /** @brief Cache for luma files thumbnails. */
+    static QMap <QString,QImage> m_lumacache;
+
 protected:
 
     /** @brief Closes the window.
@@ -133,9 +142,13 @@ protected:
     virtual void readProperties(const KConfigGroup &config);
 
 private:
+    QGLWidget* m_glContext;
+
     KTabWidget* m_timelineArea;
     QProgressBar *m_statusProgressBar;
 
+    ScopeManager *m_scopeManager;
+
     /** @brief Sets up all the actions and attaches them to the collection. */
     void setupActions();
     KdenliveDoc *m_activeDocument;
@@ -153,7 +166,7 @@ private:
     NotesWidget *m_notesWidget;
 
     QDockWidget *m_effectStackDock;
-    EffectStackView *m_effectStack;
+    EffectStackView2 *m_effectStack;
 
     QDockWidget *m_transitionConfigDock;
     TransitionSettings *m_transitionConfig;
@@ -192,11 +205,10 @@ private:
     QUndoView *m_undoView;
     QUndoGroup *m_commandStack;
 
-    KComboBox *m_timecodeFormat;
+    KSelectAction *m_timeFormatButton;
 
     /** This list holds all the scopes used in Kdenlive, allowing to manage some global settings */
     QList <QDockWidget *> m_gfxScopesList;
-    QList <AbstractAudioScopeWidget *> m_audioScopesList;
 
     KActionCategory *m_effectActions;
     QMenu *m_effectsMenu;
@@ -208,7 +220,7 @@ private:
 
     /** Actions used in the stopmotion widget */
     KActionCategory *m_stopmotion_actions;
-    
+
     /** Action names that can be used in the slotDoAction() slot, with their i18n() names */
     QStringList m_action_names;
 
@@ -221,19 +233,16 @@ private:
 
     RenderWidget *m_renderWidget;
 
-#ifndef NO_JOGSHUTTLE
+#ifdef USE_JOGSHUTTLE
     JogShuttle *m_jogProcess;
     JogShuttleAction* m_jogShuttle;
-#endif /* NO_JOGSHUTTLE */
+#endif
 
     KRecentFilesAction *m_fileOpenRecent;
     KAction *m_fileRevert;
     KAction *m_projectSearch;
     KAction *m_projectSearchNext;
 
-    KAction **m_videoEffects;
-    KAction **m_audioEffects;
-    KAction **m_customEffects;
     KAction **m_transitions;
     KAction *m_buttonAudioThumbs;
     KAction *m_buttonVideoThumbs;
@@ -259,6 +268,7 @@ private:
     StatusBarMessageLabel *m_messageLabel;
     QActionGroup *m_clipTypeGroup;
     KActionCollection *m_effectsActionCollection;
+    KActionCollection *m_tracksActionCollection;
 
     bool m_findActivated;
     QString m_findString;
@@ -266,13 +276,13 @@ private:
 
     void readOptions();
     void saveOptions();
-#ifndef NO_JOGSHUTTLE
+#ifdef USE_JOGSHUTTLE
     void activateShuttleDevice();
-#endif /* NO_JOGSHUTTLE */
+#endif
     void connectDocumentInfo(KdenliveDoc *doc);
     void findAhead();
     void doOpenFile(const KUrl &url, KAutoSaveFile *stale);
-    void recoverFiles(QList<KAutoSaveFile *> staleFiles);
+    void recoverFiles(const QList<KAutoSaveFile *> &staleFiles, const KUrl &originUrl);
 
     /** @brief Loads static and dynamic plugins.
      *
@@ -293,6 +303,7 @@ private:
     QStringList m_pluginFileNames;
     QByteArray m_timelineState;
     void loadTranscoders();
+    void loadClipActions();
     QPixmap createSchemePreviewIcon(const KSharedConfigPtr &config);
 
     /** @brief Checks that the Kdenlive mime type is correctly installed.
@@ -304,13 +315,18 @@ private:
     void loadLayouts();
 
     StopmotionWidget *m_stopmotion;
+    QTime m_timer;
+    /** @brief The last selected clip in timeline. */
+    ClipItem *m_mainClip;
+    /** @brief Update statusbar stylesheet (in case of color theme change). */
+    void setStatusBarStyleSheet(const QPalette &p);
 
 public slots:
     /** @brief Prepares opening @param url.
     *
     * Checks if already open and whether backup exists */
     void openFile(const KUrl &url);
-    void slotGotProgressInfo(const QString &message, int progress);
+    void slotGotProgressInfo(const QString &message, int progress, MessageType type = DefaultMessage);
     void slotReloadEffects();
     Q_SCRIPTABLE void setRenderingProgress(const QString &url, int progress);
     Q_SCRIPTABLE void setRenderingFinished(const QString &url, int status, const QString &error);
@@ -345,10 +361,10 @@ private slots:
     /** @brief Reflects setting changes to the GUI. */
     void updateConfiguration();
     void slotConnectMonitors();
-    void slotRaiseMonitor(bool clipMonitor);
     void slotUpdateClip(const QString &id);
     void slotUpdateMousePosition(int pos);
-    void slotAddEffect(const QDomElement effect);
+    void slotUpdateProjectDuration(int pos);
+    void slotAddEffect(const QDomElement &effect);
     void slotEditProfiles();
     void slotDetectAudioDriver();
     void slotEditProjectSettings();
@@ -409,14 +425,16 @@ private slots:
     void slotSelectAddTimelineTransition();
     void slotAddVideoEffect(QAction *result);
     void slotAddTransition(QAction *result);
-    void slotAddProjectClip(KUrl url);
+    void slotAddProjectClip(const KUrl &url, const stringMap &data = stringMap());
+    void slotAddProjectClipList(const KUrl::List &urls);
     void slotShowClipProperties(DocClipBase *clip);
-    void slotShowClipProperties(QList <DocClipBase *>cliplist, QMap<QString, QString> commonproperties);
-    void slotActivateEffectStackView(ClipItem* item = NULL, int ix = -1, bool raise = true);
-    void slotActivateTransitionView(Transition *);
+    void slotShowClipProperties(const QList<DocClipBase *> &cliplist, const QMap<QString, QString> &commonproperties);
+    void slotTimelineClipSelected(ClipItem* item, bool raise = true);
+    void slotTrackSelected(int index, const TrackInfo &info, bool raise = true);
+    void slotActivateTransitionView(Transition *transition);
     void slotChangeTool(QAction * action);
     void slotChangeEdit(QAction * action);
-    void slotSetTool(PROJECTTOOL tool);
+    void slotSetTool(ProjectTool tool);
     void slotSnapForward();
     void slotSnapRewind();
     void slotClipStart();
@@ -443,17 +461,21 @@ private slots:
 
     void slotAdjustClipMonitor();
     void slotAdjustProjectMonitor();
-    void slotSaveZone(Render *render, QPoint zone);
+    void slotSaveZone(Render *render, const QPoint &zone, DocClipBase *baseClip = NULL, KUrl path = KUrl());
 
     void slotSetInPoint();
     void slotSetOutPoint();
     void slotResizeItemStart();
     void slotResizeItemEnd();
     void configureNotifications();
-    void slotInsertTrack(int ix = 0);
-    void slotDeleteTrack(int ix = 0);
+    void slotInsertTrack(int ix = -1);
+    void slotDeleteTrack(int ix = -1);
     /** @brief Shows the configure tracks dialog and updates transitions afterwards. */
     void slotConfigTrack(int ix = -1);
+    /** @brief Select all clips in active track. */
+    void slotSelectTrack();
+    /** @brief Select all clips in timeline. */
+    void slotSelectAllTracks();
     void slotGetNewLumaStuff();
     void slotGetNewTitleStuff();
     void slotGetNewRenderStuff();
@@ -463,21 +485,24 @@ private slots:
     /** @brief Lets the sampleplugin create a generator.  */
     void generateClip();
     void slotZoneMoved(int start, int end);
-    void slotDvdWizard(const QString &url = QString(), const QString &profile = "dv_pal");
+    void slotDvdWizard(const QString &url = QString());
     void slotGroupClips();
     void slotUnGroupClips();
     void slotEditItemDuration();
     void slotClipInProjectTree();
     //void slotClipToProjectTree();
     void slotSplitAudio();
+    void slotSetAudioAlignReference();
+    void slotAlignAudio();
     void slotUpdateClipType(QAction *action);
     void slotShowTimeline(bool show);
     void slotMaximizeCurrent(bool show);
-    void slotTranscode(KUrl::List urls = KUrl::List());
+    void slotTranscode(const KUrl::List &urls = KUrl::List());
+    void slotStartClipAction();
     void slotTranscodeClip();
     /** @brief Archive project: creates a copy of the project file with all clips in a new folder. */
     void slotArchiveProject();
-    void slotSetDocumentRenderProfile(QMap <QString, QString> props);
+    void slotSetDocumentRenderProfile(const QMap<QString, QString> &props);
     void slotPrepareRendering(bool scriptExport, bool zoneOnly, const QString &chapterFile);
 
     /** @brief Switches between displaying frames or timecode.
@@ -502,14 +527,14 @@ private slots:
     /** @brief Deletes items from timeline and document.
     * @param ids The ids of the clips to delete.
     * @param folderids The names and ids of the folders to delete. */
-    void slotDeleteProjectClips(QStringList ids, QMap<QString, QString> folderids);
+    void slotDeleteProjectClips(const QStringList &ids, const QMap<QString, QString> &folderids);
     void slotShowTitleBars(bool show);
     void slotSwitchTitles();
     /** @brief Update the capture folder if user asked a change. */
     void slotUpdateCaptureFolder();
 
     /** @brief Apply new properties to a clip */
-    void slotApplyNewClipProperties(const QString id, QMap <QString, QString> props, QMap <QString, QString> newprops, bool refresh, bool reload);
+    void slotApplyNewClipProperties(const QString &id, const QMap <QString, QString> &props, const QMap <QString, QString> &newprops, bool refresh, bool reload);
 
     /** @brief Delete a clip from current project */
     void slotDeleteClip(const QString &id);
@@ -520,16 +545,6 @@ private slots:
 
     /** @brief The monitor informs that it needs (or not) to have frames sent by the renderer. */
     void slotMonitorRequestRenderFrame(bool request);
-    /** @brief Check if someone needs the render frame sent. */
-    void slotUpdateGfxScopeFrameRequest();
-    /** @brief Check if someone needs the render frame sent. */
-    void slotDoUpdateGfxScopeFrameRequest();
-    void slotUpdateAudioScopeFrameRequest();
-    void slotDoUpdateAudioScopeFrameRequest();
-    /** @brief When switching between monitors, update the visible scopes. */
-    void slotUpdateColorScopes();
-    /** @brief Switch current monitor to fullscreen. */
-    void slotSwitchFullscreen();
     /** @brief Open the stopmotion dialog. */
     void slotOpenStopmotion();
     /** @brief Implements all the actions that are int he ActionsCollection. */
@@ -538,6 +553,27 @@ private slots:
     void slotUpdateProxySettings();
     /** @brief Insert current project's timecode into the notes widget. */
     void slotInsertNotesTimecode();
+    /** @brief Open the project's backupdialog. */
+    void slotOpenBackupDialog(const KUrl &url = KUrl());
+    /** @brief Disable proxies for this project. */
+    void slotDisableProxies();
+
+    void slotElapsedTime();
+    /** @brief Open the online services search dialog. */
+    void slotDownloadResources();
+    
+    void slotChangePalette();
+    /** @brief Save current timeline clip as mlt playlist. */
+    void slotSaveTimelineClip();
+    /** @brief Process keyframe data sent from a clip to effect / transition stack. */
+    void slotProcessImportKeyframes(GraphicsRectItem type, const QString& data, int maximum);
+    /** @brief Move playhead to mouse curser position if defined key is pressed */
+    void slotAlignPlayheadToMousePos();
+    /** @brief Set MLT's consumer deinterlace method */
+    void slotSetDeinterlacer(int ix);
+    /** @brief Set MLT's consumer interpolation method */
+    void slotSetInterpolation(int ix);
+
 signals:
     Q_SCRIPTABLE void abortRenderJob(const QString &url);
 };