mainwindow.h 18.8 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
/***************************************************************************
 *   Copyright (C) 2007 by Jean-Baptiste Mardelle (jb@kdenlive.org)        *
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 *   This program is distributed in the hope that it will be useful,       *
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
 *   GNU General Public License for more details.                          *
 *                                                                         *
 *   You should have received a copy of the GNU General Public License     *
 *   along with this program; if not, write to the                         *
 *   Free Software Foundation, Inc.,                                       *
 *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA          *
 ***************************************************************************/

Jean-Baptiste Mardelle's avatar
Jean-Baptiste Mardelle committed
20 21
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
22

23
#include <QComboBox>
Nicolas Carion's avatar
Nicolas Carion committed
24
#include <QDBusAbstractAdaptor>
Jean-Baptiste Mardelle's avatar
Jean-Baptiste Mardelle committed
25
#include <QDockWidget>
26
#include <QEvent>
Nicolas Carion's avatar
Nicolas Carion committed
27
#include <QImage>
28
#include <QMap>
Nicolas Carion's avatar
Nicolas Carion committed
29
#include <QShortcut>
30
#include <QString>
Nicolas Carion's avatar
Nicolas Carion committed
31
#include <QUndoView>
Jean-Baptiste Mardelle's avatar
Jean-Baptiste Mardelle committed
32

Nicolas Carion's avatar
Nicolas Carion committed
33 34 35
#include <KActionCategory>
#include <KColorSchemeManager>
#include <KSelectAction>
Jean-Baptiste Mardelle's avatar
Jean-Baptiste Mardelle committed
36
#include <KXmlGuiWindow>
37
#include <kautosavefile.h>
Nicolas Carion's avatar
Nicolas Carion committed
38
#include <utility>
Jean-Baptiste Mardelle's avatar
Jean-Baptiste Mardelle committed
39

40
#include "bin/bin.h"
Jean-Baptiste Mardelle's avatar
Jean-Baptiste Mardelle committed
41
#include "definitions.h"
42
#include "dvdwizard/dvdwizard.h"
Nicolas Carion's avatar
Nicolas Carion committed
43 44 45 46
#include "gentime.h"
#include "kdenlive_debug.h"
#include "kdenlivecore_export.h"
#include "statusbarmessagelabel.h"
Jean-Baptiste Mardelle's avatar
Jean-Baptiste Mardelle committed
47

48
class AssetPanel;
49
class AudioGraphSpectrum;
50
class EffectBasket;
51 52
class EffectListWidget;
class TransitionListWidget;
53 54
class KIconLoader;
class KdenliveDoc;
55
class Monitor;
56
class Render;
57
class RenderWidget;
58 59
class TimelineTabs;
class TimelineWidget;
60
class Transition;
61

Jean-Baptiste Mardelle's avatar
Jean-Baptiste Mardelle committed
62 63 64
class MltErrorEvent : public QEvent
{
public:
Nicolas Carion's avatar
Nicolas Carion committed
65
    explicit MltErrorEvent(QString message)
Jean-Baptiste Mardelle's avatar
Jean-Baptiste Mardelle committed
66
        : QEvent(QEvent::User)
Nicolas Carion's avatar
Nicolas Carion committed
67
        , m_message(std::move(message))
Jean-Baptiste Mardelle's avatar
Jean-Baptiste Mardelle committed
68 69 70 71 72 73 74 75 76
    {
    }

    QString message() const { return m_message; }

private:
    QString m_message;
};

77
class /*KDENLIVECORE_EXPORT*/ MainWindow : public KXmlGuiWindow
78
{
79 80 81
    Q_OBJECT

public:
82
    explicit MainWindow(QWidget *parent = nullptr);
83 84 85
    /** @brief Initialises the main window.
     * @param MltPath (optional) path to MLT environment
     * @param Url (optional) file to open
86
     * @param clipsToLoad (optional) a comma separated list of clips to import in project
87
     *
88
     * If Url is present, it will be opened, otherwise, if openlastproject is
89 90
     * set, latest project will be opened. If no file is open after trying this,
     * a default new file will be created. */
91
    void init();
Nicolas Carion's avatar
Nicolas Carion committed
92
    ~MainWindow() override;
93

94
    /** @brief Cache for luma files thumbnails. */
Laurent Montel's avatar
Laurent Montel committed
95 96
    static QMap<QString, QImage> m_lumacache;
    static QMap<QString, QStringList> m_lumaFiles;
97

98
    /** @brief Adds an action to the action collection and stores the name. */
99
    void addAction(const QString &name, QAction *action, const QKeySequence &shortcut = QKeySequence(), KActionCategory *category = nullptr);
Till Theato's avatar
Till Theato committed
100
    /** @brief Adds an action to the action collection and stores the name. */
Nicolas Carion's avatar
Nicolas Carion committed
101
    QAction *addAction(const QString &name, const QString &text, const QObject *receiver, const char *member, const QIcon &icon = QIcon(),
102
                       const QKeySequence &shortcut = QKeySequence(), KActionCategory *category = nullptr);
103

104 105 106 107 108 109 110 111 112 113
    /**
     * @brief Adds a new dock widget to this window.
     * @param title title of the dock widget
     * @param objectName objectName of the dock widget (required for storing layouts)
     * @param widget widget to use in the dock
     * @param area area to which the dock should be added to
     * @returns the created dock widget
     */
    QDockWidget *addDock(const QString &title, const QString &objectName, QWidget *widget, Qt::DockWidgetArea area = Qt::TopDockWidgetArea);

Till Theato's avatar
Till Theato committed
114 115
    QUndoGroup *m_commandStack;
    QUndoView *m_undoView;
116 117
    /** @brief holds info about whether movit is available on this system */
    bool m_gpuAllowed;
Nicolas Carion's avatar
Nicolas Carion committed
118
    int m_exitCode{EXIT_SUCCESS};
Laurent Montel's avatar
Laurent Montel committed
119
    QMap<QString, KActionCategory *> kdenliveCategoryMap;
Laurent Montel's avatar
Laurent Montel committed
120
    QList<QAction *> getExtraActions(const QString &name);
121
    /** @brief Returns true if docked widget is tabbed with another widget from its object name */
Laurent Montel's avatar
Laurent Montel committed
122
    bool isTabbedWith(QDockWidget *widget, const QString &otherWidget);
Till Theato's avatar
Till Theato committed
123

124 125 126
    /** @brief Returns a ptr to the main timeline widget of the project */
    TimelineWidget *getMainTimeline() const;

Jean-Baptiste Mardelle's avatar
Jean-Baptiste Mardelle committed
127
    /** @brief Returns a pointer to the current timeline */
128 129
    TimelineWidget *getCurrentTimeline() const;

130
protected:
131 132 133 134
    /** @brief Closes the window.
     * @return false if the user presses "Cancel" on a confirmation dialog or
     *     the operation requested (starting waiting jobs or saving file) fails,
     *     true otherwise */
135 136
    bool queryClose() override;
    void closeEvent(QCloseEvent *) override;
137 138

    /** @brief Reports a message in the status bar when an error occurs. */
139
    void customEvent(QEvent *e) override;
140 141

    /** @brief Stops the active monitor when the window gets hidden. */
142
    void hideEvent(QHideEvent *e) override;
143 144

    /** @brief Saves the file and the window properties when saving the session. */
145
    void saveProperties(KConfigGroup &config) override;
146

147
    /** @brief Restores the window and the file when a session is loaded. */
148 149
    void readProperties(const KConfigGroup &config) override;
    void saveNewToolbarConfig() override;
150 151

private:
152
    /** @brief Sets up all the actions and attaches them to the collection. */
Jean-Baptiste Mardelle's avatar
Jean-Baptiste Mardelle committed
153
    void setupActions();
154

155
    KColorSchemeManager *m_colorschemes;
Jean-Baptiste Mardelle's avatar
Jean-Baptiste Mardelle committed
156

157
    QDockWidget *m_projectBinDock;
158
    QDockWidget *m_effectListDock;
159
    QDockWidget *m_transitionListDock;
160 161
    TransitionListWidget *m_transitionList2;
    EffectListWidget *m_effectList2;
Jean-Baptiste Mardelle's avatar
Jean-Baptiste Mardelle committed
162

Nicolas Carion's avatar
Nicolas Carion committed
163
    AssetPanel *m_assetPanel{nullptr};
164
    QDockWidget *m_effectStackDock;
Jean-Baptiste Mardelle's avatar
Jean-Baptiste Mardelle committed
165

166
    QDockWidget *m_clipMonitorDock;
Nicolas Carion's avatar
Nicolas Carion committed
167
    Monitor *m_clipMonitor{nullptr};
Jean-Baptiste Mardelle's avatar
Jean-Baptiste Mardelle committed
168

169
    QDockWidget *m_projectMonitorDock;
Nicolas Carion's avatar
Nicolas Carion committed
170
    Monitor *m_projectMonitor{nullptr};
171

172
    AudioGraphSpectrum *m_audioSpectrum;
173

174
    QDockWidget *m_undoViewDock;
175

176
    KSelectAction *m_timeFormatButton;
177
    KSelectAction *m_compositeAction;
178

Nicolas Carion's avatar
Nicolas Carion committed
179
    TimelineTabs *m_timelineTabs{nullptr};
180

181
    /** This list holds all the scopes used in Kdenlive, allowing to manage some global settings */
Laurent Montel's avatar
Laurent Montel committed
182
    QList<QDockWidget *> m_gfxScopesList;
183

184
    KActionCategory *m_effectActions;
185
    KActionCategory *m_transitionActions;
186
    QMenu *m_effectsMenu;
187
    QMenu *m_transitionsMenu;
188
    QMenu *m_timelineContextMenu;
189
    QList<QAction *> m_timelineClipActions;
190
    KDualAction *m_useTimelineZone;
191

192
    /** Action names that can be used in the slotDoAction() slot, with their i18n() names */
193
    QStringList m_actionNames;
194

195 196 197 198
    /** @brief Shortcut to remove the focus from any element.
     *
     * It allows to get out of e.g. text input fields and to press another
     * shortcut. */
Laurent Montel's avatar
Laurent Montel committed
199
    QShortcut *m_shortcutRemoveFocus;
200

Nicolas Carion's avatar
Nicolas Carion committed
201 202
    RenderWidget *m_renderWidget{nullptr};
    StatusBarMessageLabel *m_messageLabel{nullptr};
Nicolas Carion's avatar
Nicolas Carion committed
203
    QList<QAction *> m_transitions;
204 205 206 207
    QAction *m_buttonAudioThumbs;
    QAction *m_buttonVideoThumbs;
    QAction *m_buttonShowMarkers;
    QAction *m_buttonFitZoom;
208
    QAction *m_buttonAutomaticTransition;
209 210 211 212 213 214 215 216
    QAction *m_normalEditTool;
    QAction *m_overwriteEditTool;
    QAction *m_insertEditTool;
    QAction *m_buttonSelectTool;
    QAction *m_buttonRazorTool;
    QAction *m_buttonSpacerTool;
    QAction *m_buttonSnap;
    QAction *m_saveAction;
Jean-Baptiste Mardelle's avatar
Jean-Baptiste Mardelle committed
217
    QSlider *m_zoomSlider;
218 219 220 221 222
    QAction *m_zoomIn;
    QAction *m_zoomOut;
    QAction *m_loopZone;
    QAction *m_playZone;
    QAction *m_loopClip;
223
    QAction *m_proxyClip;
224
    QString m_theme;
225
    KIconLoader *m_iconLoader;
226 227
    KToolBar *m_timelineToolBar;
    QWidget *m_timelineToolBarContainer;
228
    QLabel *m_trimLabel;
229

230 231
    /** @brief initialize startup values, return true if first run. */
    bool readOptions();
232
    void saveOptions();
233

234
    void loadGenerators();
235 236 237
    /** @brief Instantiates a "Get Hot New Stuff" dialog.
     * @param configFile configuration file for KNewStuff
     * @return number of installed items */
Alberto Villa's avatar
Alberto Villa committed
238
    int getNewStuff(const QString &configFile = QString());
Jean-Baptiste Mardelle's avatar
Jean-Baptiste Mardelle committed
239
    QStringList m_pluginFileNames;
240
    QByteArray m_timelineState;
241
    void buildDynamicActions();
242
    void loadClipActions();
243

244
    QTime m_timer;
245
    KXMLGUIClient *m_extraFactory;
Nicolas Carion's avatar
Nicolas Carion committed
246 247
    bool m_themeInitialized{false};
    bool m_isDarkTheme{false};
248
    EffectBasket *m_effectBasket;
Jean-Baptiste Mardelle's avatar
Jean-Baptiste Mardelle committed
249 250
    /** @brief Update widget style. */
    void doChangeStyle();
251
    void updateActionsToolTip();
252

253
public slots:
254
    void slotGotProgressInfo(const QString &message, int progress, MessageType type = DefaultMessage);
Jean-Baptiste Mardelle's avatar
Jean-Baptiste Mardelle committed
255
    void slotReloadEffects(const QStringList &paths);
256
    Q_SCRIPTABLE void setRenderingProgress(const QString &url, int progress);
257
    Q_SCRIPTABLE void setRenderingFinished(const QString &url, int status, const QString &error);
258 259
    Q_SCRIPTABLE void addProjectClip(const QString &url);
    Q_SCRIPTABLE void addTimelineClip(const QString &url);
260
    Q_SCRIPTABLE void addEffect(const QString &effectId);
261 262
    Q_SCRIPTABLE void scriptRender(const QString &url);
    Q_NOREPLY void exitApp();
263

Till Theato's avatar
Till Theato committed
264 265
    void slotSwitchVideoThumbs();
    void slotSwitchAudioThumbs();
266

Till Theato's avatar
Till Theato committed
267
    void slotPreferences(int page = -1, int option = -1);
268
    void connectDocument();
269 270
    /** @brief Reload project profile in config dialog if changed. */
    void slotRefreshProfiles();
271
    void updateDockTitleBars(bool isTopLevel = true);
272
    void configureToolbars() override;
273 274 275 276
    /** @brief Decreases the timeline zoom level by 1. */
    void slotZoomIn(bool zoomOnMouse = false);
    /** @brief Increases the timeline zoom level by 1. */
    void slotZoomOut(bool zoomOnMouse = false);
277 278
    /** @brief Enable or disable the use of timeline zone for edits. */
    void slotSwitchTimelineZone(bool toggled);
279 280
    /** @brief Open the online services search dialog. */
    void slotDownloadResources();
281

Till Theato's avatar
Till Theato committed
282
private slots:
283 284
    /** @brief Shows the shortcut dialog. */
    void slotEditKeys();
285
    void loadDockActions();
286 287
    /** @brief Add/remove Dock tile bar depending on state (tabbed, floating, ...) */
    void slotUpdateDockLocation(Qt::DockWidgetArea dockLocationArea);
288
    /** @brief Reflects setting changes to the GUI. */
289
    void updateConfiguration();
290
    void slotConnectMonitors();
291
    void slotUpdateMousePosition(int pos);
292
    void slotUpdateProjectDuration(int pos);
293
    void slotEditProjectSettings();
294
    void slotSwitchMarkersComments();
295
    void slotSwitchSnap();
296
    void slotSwitchAutomaticTransition();
297
    void slotRenderProject();
298
    void slotStopRenderProject();
299
    void slotFullScreen();
300
    /** @brief if modified is true adds "modified" to the caption and enables the save button.
Nicolas Carion's avatar
Nicolas Carion committed
301
     * (triggered by KdenliveDoc::setModified()) */
302
    void slotUpdateDocumentState(bool modified);
303 304

    /** @brief Sets the timeline zoom slider to @param value.
Nicolas Carion's avatar
Nicolas Carion committed
305 306
     *
     * Also disables zoomIn and zoomOut actions if they cannot be used at the moment. */
307
    void slotSetZoom(int value, bool zoomOnMouse = false);
308
    /** @brief Makes the timeline zoom level fit the timeline content. */
309
    void slotFitZoom();
310 311
    /** @brief Updates the zoom slider tooltip to fit @param zoomlevel. */
    void slotUpdateZoomSliderToolTip(int zoomlevel);
312 313
    /** @brief Timeline was zoom, update slider to reflect that */
    void updateZoomSlider(int value);
314

315
    /** @brief Displays the zoom slider tooltip.
Nicolas Carion's avatar
Nicolas Carion committed
316 317 318
     * @param zoomlevel (optional) The zoom level to show in the tooltip.
     *
     * Adopted from Dolphin (src/statusbar/dolphinstatusbar.cpp) */
319 320
    void slotShowZoomSliderToolTip(int zoomlevel = -1);
    /** @brief Deletes item in timeline, project tree or effect stack depending on focus. */
321
    void slotDeleteItem();
322
    void slotAddClipMarker();
323
    void slotDeleteClipMarker(bool allowGuideDeletion = false);
324
    void slotDeleteAllClipMarkers();
325
    void slotEditClipMarker();
326

327
    /** @brief Adds marker or guide at the current position without showing the marker dialog.
328
     *
329 330 331 332
     * Adds a marker if clip monitor is active, otherwise a guide.
     * The comment is set to the current position (therefore not dialog).
     * This can be useful to mark something during playback. */
    void slotAddMarkerGuideQuickly();
Jean-Baptiste Mardelle's avatar
Jean-Baptiste Mardelle committed
333
    void slotCutTimelineClip();
334
    void slotInsertClipOverwrite();
335
    void slotInsertClipInsert();
336 337
    void slotExtractZone();
    void slotLiftZone();
338
    void slotPreviewRender();
339
    void slotStopPreviewRender();
340 341
    void slotDefinePreviewRender();
    void slotRemovePreviewRender();
342
    void slotClearPreviewRender(bool resetZones = true);
343 344 345 346 347 348
    void slotSelectTimelineClip();
    void slotSelectTimelineTransition();
    void slotDeselectTimelineClip();
    void slotDeselectTimelineTransition();
    void slotSelectAddTimelineClip();
    void slotSelectAddTimelineTransition();
349
    void slotAddEffect(QAction *result);
350
    void slotAddTransition(QAction *result);
351
    void slotAddProjectClip(const QUrl &url, const QString &folderInfo);
352
    void slotAddProjectClipList(const QList<QUrl> &urls);
Laurent Montel's avatar
Laurent Montel committed
353 354
    void slotChangeTool(QAction *action);
    void slotChangeEdit(QAction *action);
355
    void slotSetTool(ProjectTool tool);
356 357
    void slotSnapForward();
    void slotSnapRewind();
358 359
    void slotClipStart();
    void slotClipEnd();
360
    void slotSelectClipInTimeline();
Nicolas Carion's avatar
Nicolas Carion committed
361
    void slotClipInTimeline(const QString &clipId, const QList<int> &ids);
362

363
    void slotInsertSpace();
364
    void slotRemoveSpace();
365
    void slotRemoveAllSpace();
366
    void slotAddGuide();
367
    void slotEditGuide();
368 369
    void slotDeleteGuide();
    void slotDeleteAllGuides();
370
    void slotGuidesUpdated();
371 372 373

    void slotCopy();
    void slotPaste();
374
    void slotPasteEffects();
375 376
    void slotResizeItemStart();
    void slotResizeItemEnd();
377
    void configureNotifications();
378 379
    void slotInsertTrack();
    void slotDeleteTrack();
380 381 382 383
    /** @brief Select all clips in active track. */
    void slotSelectTrack();
    /** @brief Select all clips in timeline. */
    void slotSelectAllTracks();
384
    void slotUnselectAllTracks();
385
    void slotGetNewKeyboardStuff(QComboBox *schemesList);
386
    void slotAutoTransition();
387
    void slotRunWizard();
388
    void slotZoneMoved(int start, int end);
389
    void slotDvdWizard(const QString &url = QString());
390 391
    void slotGroupClips();
    void slotUnGroupClips();
392
    void slotEditItemDuration();
393
    void slotClipInProjectTree();
Nicolas Carion's avatar
Nicolas Carion committed
394
    // void slotClipToProjectTree();
395
    void slotSplitAV();
396
    void slotSwitchClip();
Simon Eugster's avatar
Simon Eugster committed
397 398
    void slotSetAudioAlignReference();
    void slotAlignAudio();
399
    void slotUpdateClipType(QAction *action);
400
    void slotUpdateTimelineView(QAction *action);
401
    void slotShowTimeline(bool show);
Jean-Baptiste Mardelle's avatar
Jean-Baptiste Mardelle committed
402
    void slotTranscode(const QStringList &urls = QStringList());
403
    void slotTranscodeClip();
404 405
    /** @brief Archive project: creates a copy of the project file with all clips in a new folder. */
    void slotArchiveProject();
Laurent Montel's avatar
Laurent Montel committed
406
    void slotSetDocumentRenderProfile(const QMap<QString, QString> &props);
407

408
    /** @brief Switches between displaying frames or timecode.
Nicolas Carion's avatar
Nicolas Carion committed
409
     * @param ix 0 = display timecode, 1 = display frames. */
410
    void slotUpdateTimecodeFormat(int ix);
411

412
    /** @brief Removes the focus of anything. */
413
    void slotRemoveFocus();
414
    void slotCleanProject();
415
    void slotShutdown();
416

417
    void slotSwitchMonitors();
418
    void slotSwitchMonitorOverlay(QAction *);
419 420
    void slotSwitchDropFrames(bool drop);
    void slotSetMonitorGamma(int gamma);
421
    void slotCheckRenderStatus();
422
    void slotInsertZoneToTree();
423

424 425
    /** @brief The monitor informs that it needs (or not) to have frames sent by the renderer. */
    void slotMonitorRequestRenderFrame(bool request);
426 427
    /** @brief Update project because the use of proxy clips was enabled / disabled. */
    void slotUpdateProxySettings();
428 429
    /** @brief Disable proxies for this project. */
    void slotDisableProxies();
430

431
    /** @brief Process keyframe data sent from a clip to effect / transition stack. */
Nicolas Carion's avatar
Nicolas Carion committed
432
    void slotProcessImportKeyframes(GraphicsRectItem type, const QString &tag, const QString &keyframes);
433
    /** @brief Move playhead to mouse cursor position if defined key is pressed */
434
    void slotAlignPlayheadToMousePos();
435

436
    void slotThemeChanged(const QString &name);
437
    /** @brief Close Kdenlive and try to restart it */
438
    void slotRestart(bool clean = false);
Laurent Montel's avatar
Laurent Montel committed
439
    void triggerKey(QKeyEvent *ev);
440 441
    /** @brief Update monitor overlay actions on monitor switch */
    void slotUpdateMonitorOverlays(int id, int code);
442
    /** @brief Update widget style */
443
    void slotChangeStyle(QAction *a);
444 445 446
    /** @brief Create temporary top track to preview an effect */
    void createSplitOverlay(Mlt::Filter *filter);
    void removeSplitOverlay();
447 448
    /** @brief Create a generator's setup dialog */
    void buildGenerator(QAction *action);
449
    void slotCheckTabPosition();
450 451
    /** @brief Toggle automatic timeline preview on/off */
    void slotToggleAutoPreview(bool enable);
452 453 454
    /** @brief Rebuild/reload timeline toolbar. */
    void rebuildTimlineToolBar();
    void showTimelineToolbarMenu(const QPoint &pos);
455 456
    /** @brief Open Cached Data management dialog. */
    void slotManageCache();
457
    void showMenuBar(bool show);
458 459
    /** @brief Change forced icon theme setting (asks for app restart). */
    void forceIconSet(bool force);
460
    /** @brief Toggle current project's compositing mode. */
461
    void slotUpdateCompositing(QAction *compose);
462 463
    /** @brief Update compositing action to display current project setting. */
    void slotUpdateCompositeAction(int mode);
464 465
    /** @brief Cycle through the different timeline trim modes. */
    void slotSwitchTrimMode();
Laurent Montel's avatar
Laurent Montel committed
466
    void setTrimMode(const QString &mode);
467 468
    /** @brief Set timeline toolbar icon size. */
    void setTimelineToolbarIconSize(QAction *a);
469
    void slotEditItemSpeed();
470
    void updateAction();
471 472
    /** @brief Request adjust of timeline track height */
    void resetTimelineTracks();
473 474
    /** @brief Set keyboard grabbing on current timeline item */
    void slotGrabItem();
475

476 477
signals:
    Q_SCRIPTABLE void abortRenderJob(const QString &url);
478
    void configurationChanged();
479
    void GUISetupDone();
480
    void setPreviewProgress(int);
481
    void setRenderProgress(int);
Laurent Montel's avatar
Laurent Montel committed
482
    void displayMessage(const QString &, MessageType, int);
483 484
    /** @brief Project profile changed, update render widget accordingly. */
    void updateRenderWidgetProfile();
485 486
    /** @brief Clear asset view if itemId is displayed. */
    void clearAssetPanel(int itemId = -1);
487
    void adjustAssetPanelRange(int itemId, int in, int out);
488 489
    /** @brief Enable or disable the undo stack. For example undo/redo should not be enabled when dragging a clip in timeline or we risk corruption. */
    void enableUndo(bool enable);
Jean-Baptiste Mardelle's avatar
Jean-Baptiste Mardelle committed
490
};
491

Jean-Baptiste Mardelle's avatar
Jean-Baptiste Mardelle committed
492
#endif