21 #include <QMainWindow> 25 #include <QNetworkAccessManager> 26 #include <QScopedPointer> 27 #include <QSharedPointer> 28 #include "mltcontroller.h" 29 #include "mltxmlchecker.h" 31 #define EXIT_RESTART (42) 43 class FilterController;
44 class ScopeController;
51 class MainWindow :
public QMainWindow
66 static MainWindow& singleton();
68 void open(Mlt::Producer* producer);
69 bool continueModified();
70 bool continueJobsRunning();
71 QUndoStack* undoStack()
const;
72 bool saveXML(
const QString& filename,
bool withRelativePaths =
true);
73 static void changeTheme(
const QString& theme);
74 PlaylistDock* playlistDock()
const {
return m_playlistDock; }
75 FilterController* filterController()
const {
return m_filterController; }
76 Mlt::Playlist* playlist()
const;
77 bool isPlaylistValid()
const;
78 Mlt::Producer* multitrack()
const;
79 bool isMultitrackValid()
const;
81 void setFullScreen(
bool isFullScreen);
82 QString removeFileScheme(QUrl& url);
83 QString untitledFileName()
const;
84 void setProfile(
const QString& profile_name);
85 QString fileName()
const {
return m_currentFile; }
86 bool isSourceClipMyProject(QString resource = MLT.resource(),
bool withDialog =
true);
87 bool keyframesDockIsVisible()
const;
89 void keyPressEvent(QKeyEvent*);
90 void keyReleaseEvent(QKeyEvent *);
91 void hideSetDataDirectory();
92 QMenu* customProfileMenu()
const {
return m_customProfileMenu; }
93 QAction* actionAddCustomProfile()
const;
94 QAction* actionProfileRemove()
const;
95 QActionGroup* profileGroup()
const {
return m_profileGroup; }
96 void buildVideoModeMenu(QMenu *topMenu, QMenu *&customMenu, QActionGroup* group, QAction *addAction, QAction *removeAction);
97 void newProject(
const QString& filename,
bool isProjectFolder =
false);
98 void addCustomProfile(
const QString& name, QMenu* menu, QAction* action, QActionGroup* group);
99 void removeCustomProfiles(
const QStringList& profiles, QDir &dir, QMenu* menu, QAction* action);
100 QUuid timelineClipUuid(
int trackIndex,
int clipIndex);
101 void replaceInTimeline(
const QUuid& uuid, Mlt::Producer& producer);
102 Mlt::ClipInfo* timelineClipInfoByUuid(
const QUuid& uuid,
int& trackIndex,
int& clipIndex);
103 void replaceAllByHash(
const QString& hash, Mlt::Producer& producer,
bool isProxy =
false);
106 void audioChannelsChanged();
107 void producerOpened(
bool withReopen =
true);
108 void profileChanged();
109 void openFailed(QString);
110 void aboutToShutDown();
111 void renameRequested();
115 bool eventFilter(QObject* target, QEvent* event);
116 void dragEnterEvent(QDragEnterEvent*);
117 void dropEvent(QDropEvent*);
118 void closeEvent(QCloseEvent*);
119 void showEvent(QShowEvent*);
122 void setupSettingsMenu();
123 void setupOpenOtherMenu();
124 QAction *addProfile(QActionGroup* actionGroup,
const QString& desc,
const QString& name);
125 QAction *addLayout(QActionGroup* actionGroup,
const QString& name);
126 void readPlayerSettings();
127 void readWindowSettings();
128 void writeSettings();
129 void configureVideoWidget();
130 void setCurrentFile(
const QString &filename);
131 void changeAudioChannels(
bool checked,
int channels);
132 void changeDeinterlacer(
bool checked,
const char* method);
133 void changeInterpolation(
bool checked,
const char* method);
134 bool checkAutoSave(QString &url);
135 void stepLeftBySeconds(
int sec);
136 bool saveRepairedXmlFile(MltXmlChecker& checker, QString& fileName);
137 void setAudioChannels(
int channels);
138 void showSaveError();
139 void setPreviewScale(
int scale);
140 void setVideoModeMenu();
141 void resetVideoModeMenu();
142 void resetDockCorners();
146 QDockWidget* m_propertiesDock;
147 RecentDock* m_recentDock;
148 EncodeDock* m_encodeDock;
149 JobsDock* m_jobsDock;
150 PlaylistDock* m_playlistDock;
151 TimelineDock* m_timelineDock;
152 QString m_currentFile;
153 bool m_isKKeyPressed;
154 QUndoStack* m_undoStack;
155 QDockWidget* m_historyDock;
156 QActionGroup* m_profileGroup;
157 QActionGroup* m_externalGroup;
158 QActionGroup* m_keyerGroup;
159 QActionGroup* m_layoutGroup;
160 QActionGroup* m_previewScaleGroup;
161 FiltersDock* m_filtersDock;
162 FilterController* m_filterController;
163 ScopeController* m_scopeController;
164 QMenu* m_customProfileMenu;
166 QStringList m_multipleFiles;
167 bool m_isPlaylistLoaded;
168 QActionGroup* m_languagesGroup;
169 QSharedPointer<AutoSaveFile> m_autosaveFile;
170 QMutex m_autosaveMutex;
171 QTimer m_autosaveTimer;
173 int m_navigationPosition;
174 QScopedPointer<QAction> m_statusBarAction;
175 QNetworkAccessManager m_network;
176 QString m_upgradeUrl;
177 KeyframesDock* m_keyframesDock;
180 LeapListener m_leapListener;
184 bool isCompatibleWithGpuMode(MltXmlChecker& checker);
185 bool isXmlRepaired(MltXmlChecker& checker, QString& fileName);
186 void updateAutoSave();
187 void open(QString url,
const Mlt::Properties* =
nullptr,
bool play =
true);
188 void openMultiple(
const QStringList& paths);
189 void openMultiple(
const QList<QUrl>& urls);
191 void openCut(Mlt::Producer* producer,
bool play =
false);
193 void closeProducer();
194 void showStatusMessage(QAction* action,
int timeoutSeconds = 5);
195 void showStatusMessage(
const QString& message,
int timeoutSeconds = 5);
196 void seekPlaylist(
int start);
197 void seekTimeline(
int position,
bool seekPlayer =
true);
198 void seekKeyframes(
int position);
199 QWidget* loadProducerWidget(Mlt::Producer* producer);
200 void onProducerOpened(
bool withReopen =
true);
201 void onGpuNotSupported();
202 void stepLeftOneFrame();
203 void stepRightOneFrame();
204 void stepLeftOneSecond();
205 void stepRightOneSecond();
206 void setInToCurrent(
bool ripple);
207 void setOutToCurrent(
bool ripple);
208 void onShuttle(
float x);
209 void onPropertiesDockTriggered(
bool checked =
true);
210 bool on_actionSave_triggered();
213 void showUpgradePrompt();
214 void on_actionAbout_Shotcut_triggered();
215 void on_actionOpenOther_triggered();
216 void onProducerChanged();
217 bool on_actionSave_As_triggered();
218 void onEncodeTriggered(
bool checked =
true);
219 void onCaptureStateChanged(
bool started);
220 void onJobsDockTriggered(
bool =
true);
221 void onRecentDockTriggered(
bool checked =
true);
222 void onPlaylistDockTriggered(
bool checked =
true);
223 void onTimelineDockTriggered(
bool checked =
true);
224 void onHistoryDockTriggered(
bool checked =
true);
225 void onFiltersDockTriggered(
bool checked =
true);
226 void onKeyframesDockTriggered(
bool checked =
true);
227 void onPlaylistCreated();
228 void onPlaylistLoaded();
229 void onPlaylistCleared();
230 void onPlaylistClosed();
231 void onPlaylistModified();
232 void onMultitrackCreated();
233 void onMultitrackClosed();
234 void onMultitrackModified();
235 void onMultitrackDurationChanged();
236 void onCutModified();
237 void onProducerModified();
238 void onFilterModelChanged();
239 void updateMarkers();
240 void updateThumbnails();
241 void on_actionUndo_triggered();
242 void on_actionRedo_triggered();
243 void on_actionFAQ_triggered();
244 void on_actionForum_triggered();
245 void on_actionEnter_Full_Screen_triggered();
246 void on_actionRealtime_triggered(
bool checked);
247 void on_actionProgressive_triggered(
bool checked);
248 void on_actionChannels1_triggered(
bool checked);
249 void on_actionChannels2_triggered(
bool checked);
250 void on_actionChannels6_triggered(
bool checked);
251 void on_actionOneField_triggered(
bool checked);
252 void on_actionLinearBlend_triggered(
bool checked);
253 void on_actionYadifTemporal_triggered(
bool checked);
254 void on_actionYadifSpatial_triggered(
bool checked);
255 void on_actionNearest_triggered(
bool checked);
256 void on_actionBilinear_triggered(
bool checked);
257 void on_actionBicubic_triggered(
bool checked);
258 void on_actionHyper_triggered(
bool checked);
259 void on_actionJack_triggered(
bool checked);
260 void on_actionGPU_triggered(
bool checked);
261 void onExternalTriggered(QAction*);
262 void onKeyerTriggered(QAction*);
263 void onProfileTriggered(QAction*);
264 void onProfileChanged();
265 void on_actionAddCustomProfile_triggered();
266 void processMultipleFiles();
267 void onLanguageTriggered(QAction*);
268 void on_actionSystemTheme_triggered();
269 void on_actionFusionDark_triggered();
270 void on_actionFusionLight_triggered();
271 void on_actionTutorials_triggered();
272 void on_actionRestoreLayout_triggered();
273 void on_actionShowTitleBars_triggered(
bool checked);
274 void on_actionShowToolbar_triggered(
bool checked);
275 void onToolbarVisibilityChanged(
bool visible);
276 void on_menuExternal_aboutToShow();
277 void on_actionUpgrade_triggered();
278 void on_actionOpenXML_triggered();
279 void onAutosaveTimeout();
280 void on_actionGammaSRGB_triggered(
bool checked);
281 void on_actionGammaRec709_triggered(
bool checked);
282 void onFocusChanged(QWidget *old, QWidget * now)
const;
283 void onFocusObjectChanged(QObject *obj)
const;
284 void onFocusWindowChanged(QWindow *window)
const;
285 void onTimelineClipSelected();
286 void onAddAllToTimeline(Mlt::Playlist* playlist,
bool skipProxy);
287 void on_actionScrubAudio_triggered(
bool checked);
288 #if !defined(Q_OS_MAC) 289 void onDrawingMethodTriggered(QAction*);
291 void on_actionApplicationLog_triggered();
292 void on_actionClose_triggered();
293 void onPlayerTabIndexChanged(
int index);
294 void onUpgradeCheckFinished(QNetworkReply* reply);
295 void onUpgradeTriggered();
296 void onTimelineSelectionChanged();
297 void on_actionCut_triggered();
298 void on_actionCopy_triggered();
299 void on_actionPaste_triggered();
301 void on_actionExportEDL_triggered();
302 void on_actionExportFrame_triggered();
303 void onGLWidgetImageReady();
304 void on_actionAppDataSet_triggered();
305 void on_actionAppDataShow_triggered();
306 void on_actionNew_triggered();
307 void on_actionKeyboardShortcuts_triggered();
308 void on_actionLayoutLogging_triggered();
309 void on_actionLayoutEditing_triggered();
310 void on_actionLayoutEffects_triggered();
311 void on_actionLayoutColor_triggered();
312 void on_actionLayoutAudio_triggered();
313 void on_actionLayoutPlayer_triggered();
314 void on_actionLayoutPlaylist_triggered();
315 void on_actionLayoutClip_triggered();
316 void on_actionLayoutAdd_triggered();
317 void onLayoutTriggered(QAction*);
318 void on_actionProfileRemove_triggered();
319 void on_actionLayoutRemove_triggered();
320 void on_actionOpenOther2_triggered();
321 void onOpenOtherTriggered(QWidget* widget);
322 void onOpenOtherTriggered();
323 void on_actionClearRecentOnExit_toggled(
bool arg1);
324 void onSceneGraphInitialized();
325 void on_actionShowTextUnderIcons_toggled(
bool b);
326 void on_actionShowSmallIcons_toggled(
bool b);
327 void onPlaylistInChanged(
int in);
328 void onPlaylistOutChanged(
int out);
329 void on_actionPreviewNone_triggered(
bool checked);
330 void on_actionPreview360_triggered(
bool checked);
331 void on_actionPreview540_triggered(
bool checked);
332 void on_actionPreview720_triggered(
bool checked);
333 void on_actionTopics_triggered();
334 void on_actionSync_triggered();
335 void on_actionUseProxy_triggered(
bool checked);
336 void on_actionProxyStorageSet_triggered();
337 void on_actionProxyStorageShow_triggered();
338 void on_actionProxyUseProjectFolder_triggered(
bool checked);
339 void on_actionProxyUseHardware_triggered(
bool checked);
340 void on_actionProxyConfigureHardware_triggered();
341 void updateLayoutSwitcher();
342 void clearCurrentLayout();
345 #define MAIN MainWindow::singleton() 347 #endif // MAINWINDOW_H