Mercurial > hg > svapp
comparison framework/MainWindowBase.h @ 582:b2d49e7c4149
Merge from branch 3.0-integration
author | Chris Cannam |
---|---|
date | Fri, 13 Jan 2017 10:29:55 +0000 |
parents | 702272b78bbe |
children | b23bebfdfaba |
comparison
equal
deleted
inserted
replaced
513:d65ce7e55346 | 582:b2d49e7c4149 |
---|---|
11 published by the Free Software Foundation; either version 2 of the | 11 published by the Free Software Foundation; either version 2 of the |
12 License, or (at your option) any later version. See the file | 12 License, or (at your option) any later version. See the file |
13 COPYING included with this distribution for more information. | 13 COPYING included with this distribution for more information. |
14 */ | 14 */ |
15 | 15 |
16 #ifndef _MAIN_WINDOW_BASE_H_ | 16 #ifndef SV_MAIN_WINDOW_BASE_H |
17 #define _MAIN_WINDOW_BASE_H_ | 17 #define SV_MAIN_WINDOW_BASE_H |
18 | 18 |
19 #include <QFrame> | 19 #include <QFrame> |
20 #include <QString> | 20 #include <QString> |
21 #include <QUrl> | 21 #include <QUrl> |
22 #include <QMainWindow> | 22 #include <QMainWindow> |
44 class Overview; | 44 class Overview; |
45 class Layer; | 45 class Layer; |
46 class WaveformLayer; | 46 class WaveformLayer; |
47 class WaveFileModel; | 47 class WaveFileModel; |
48 class AudioCallbackPlaySource; | 48 class AudioCallbackPlaySource; |
49 class AudioCallbackPlayTarget; | 49 class AudioCallbackRecordTarget; |
50 class CommandHistory; | 50 class CommandHistory; |
51 class QMenu; | 51 class QMenu; |
52 class AudioDial; | 52 class AudioDial; |
53 class LevelPanWidget; | |
54 class LevelPanToolButton; | |
53 class QLabel; | 55 class QLabel; |
54 class QCheckBox; | 56 class QCheckBox; |
55 class PreferencesDialog; | 57 class PreferencesDialog; |
56 class QTreeView; | 58 class QTreeView; |
57 class QPushButton; | 59 class QPushButton; |
60 class KeyReference; | 62 class KeyReference; |
61 class Labeller; | 63 class Labeller; |
62 class ModelDataTableDialog; | 64 class ModelDataTableDialog; |
63 class QSignalMapper; | 65 class QSignalMapper; |
64 class QShortcut; | 66 class QShortcut; |
67 class AlignmentModel; | |
68 | |
69 namespace breakfastquay { | |
70 class SystemPlaybackTarget; | |
71 class SystemAudioIO; | |
72 class ResamplerWrapper; | |
73 } | |
65 | 74 |
66 /** | 75 /** |
67 * The base class for the SV main window. This includes everything to | 76 * The base class for the SV main window. This includes everything to |
68 * do with general document and pane stack management, but nothing | 77 * do with general document and pane stack management, but nothing |
69 * that involves user interaction -- this doesn't create the widget or | 78 * that involves user interaction -- this doesn't create the widget or |
75 class MainWindowBase : public QMainWindow, public FrameTimer | 84 class MainWindowBase : public QMainWindow, public FrameTimer |
76 { | 85 { |
77 Q_OBJECT | 86 Q_OBJECT |
78 | 87 |
79 public: | 88 public: |
80 MainWindowBase(bool withAudioOutput, bool withMIDIInput); | 89 enum SoundOption { |
90 WithAudioOutput = 0x01, | |
91 WithAudioInput = 0x02, | |
92 WithMIDIInput = 0x04, | |
93 WithEverything = 0xff, | |
94 WithNothing = 0x00 | |
95 }; | |
96 typedef int SoundOptions; | |
97 | |
98 MainWindowBase(SoundOptions options = WithEverything); | |
81 virtual ~MainWindowBase(); | 99 virtual ~MainWindowBase(); |
82 | 100 |
83 enum AudioFileOpenMode { | 101 enum AudioFileOpenMode { |
84 ReplaceSession, | 102 ReplaceSession, |
85 ReplaceMainModel, | 103 ReplaceMainModel, |
93 FileOpenFailed, | 111 FileOpenFailed, |
94 FileOpenCancelled, | 112 FileOpenCancelled, |
95 FileOpenWrongMode // attempted to open layer when no main model present | 113 FileOpenWrongMode // attempted to open layer when no main model present |
96 }; | 114 }; |
97 | 115 |
116 enum AudioRecordMode { | |
117 RecordReplaceSession, | |
118 RecordCreateAdditionalModel | |
119 }; | |
120 | |
98 virtual FileOpenStatus open(FileSource source, AudioFileOpenMode = AskUser); | 121 virtual FileOpenStatus open(FileSource source, AudioFileOpenMode = AskUser); |
99 virtual FileOpenStatus openPath(QString fileOrUrl, AudioFileOpenMode = AskUser); | 122 virtual FileOpenStatus openPath(QString fileOrUrl, AudioFileOpenMode = AskUser); |
100 virtual FileOpenStatus openAudio(FileSource source, AudioFileOpenMode = AskUser, QString templateName = ""); | 123 virtual FileOpenStatus openAudio(FileSource source, AudioFileOpenMode = AskUser, QString templateName = ""); |
101 virtual FileOpenStatus openPlaylist(FileSource source, AudioFileOpenMode = AskUser); | 124 virtual FileOpenStatus openPlaylist(FileSource source, AudioFileOpenMode = AskUser); |
102 virtual FileOpenStatus openLayer(FileSource source); | 125 virtual FileOpenStatus openLayer(FileSource source); |
103 virtual FileOpenStatus openImage(FileSource source); | 126 virtual FileOpenStatus openImage(FileSource source); |
104 | 127 |
128 virtual FileOpenStatus openDirOfAudio(QString dirPath); | |
129 | |
105 virtual FileOpenStatus openSession(FileSource source); | 130 virtual FileOpenStatus openSession(FileSource source); |
106 virtual FileOpenStatus openSessionPath(QString fileOrUrl); | 131 virtual FileOpenStatus openSessionPath(QString fileOrUrl); |
107 virtual FileOpenStatus openSessionTemplate(QString templateName); | 132 virtual FileOpenStatus openSessionTemplate(QString templateName); |
108 virtual FileOpenStatus openSessionTemplate(FileSource source); | 133 virtual FileOpenStatus openSessionTemplate(FileSource source); |
109 | 134 |
115 | 140 |
116 void setDefaultFfwdRwdStep(RealTime step) { | 141 void setDefaultFfwdRwdStep(RealTime step) { |
117 m_defaultFfwdRwdStep = step; | 142 m_defaultFfwdRwdStep = step; |
118 } | 143 } |
119 | 144 |
145 void setAudioRecordMode(AudioRecordMode mode) { | |
146 m_audioRecordMode = mode; | |
147 } | |
148 | |
120 signals: | 149 signals: |
121 // Used to toggle the availability of menu actions | 150 // Used to toggle the availability of menu actions |
122 void canAddPane(bool); | 151 void canAddPane(bool); |
123 void canDeleteCurrentPane(bool); | 152 void canDeleteCurrentPane(bool); |
124 void canAddLayer(bool); | 153 void canAddLayer(bool); |
140 void canPaste(bool); | 169 void canPaste(bool); |
141 void canInsertInstant(bool); | 170 void canInsertInstant(bool); |
142 void canInsertInstantsAtBoundaries(bool); | 171 void canInsertInstantsAtBoundaries(bool); |
143 void canInsertItemAtSelection(bool); | 172 void canInsertItemAtSelection(bool); |
144 void canRenumberInstants(bool); | 173 void canRenumberInstants(bool); |
174 void canSubdivideInstants(bool); | |
175 void canWinnowInstants(bool); | |
145 void canDeleteCurrentLayer(bool); | 176 void canDeleteCurrentLayer(bool); |
146 void canZoom(bool); | 177 void canZoom(bool); |
147 void canScroll(bool); | 178 void canScroll(bool); |
148 void canPlay(bool); | 179 void canPlay(bool); |
180 void canRecord(bool); | |
149 void canFfwd(bool); | 181 void canFfwd(bool); |
150 void canRewind(bool); | 182 void canRewind(bool); |
151 void canPlaySelection(bool); | 183 void canPlaySelection(bool); |
152 void canSpeedUpPlayback(bool); | 184 void canSpeedUpPlayback(bool); |
153 void canSlowDownPlayback(bool); | 185 void canSlowDownPlayback(bool); |
166 void activity(QString); | 198 void activity(QString); |
167 | 199 |
168 public slots: | 200 public slots: |
169 virtual void preferenceChanged(PropertyContainer::PropertyName); | 201 virtual void preferenceChanged(PropertyContainer::PropertyName); |
170 virtual void resizeConstrained(QSize); | 202 virtual void resizeConstrained(QSize); |
203 virtual void recreateAudioIO(); | |
171 | 204 |
172 protected slots: | 205 protected slots: |
173 virtual void zoomIn(); | 206 virtual void zoomIn(); |
174 virtual void zoomOut(); | 207 virtual void zoomOut(); |
175 virtual void zoomToFit(); | 208 virtual void zoomToFit(); |
194 virtual void play(); | 227 virtual void play(); |
195 virtual void ffwd(); | 228 virtual void ffwd(); |
196 virtual void ffwdEnd(); | 229 virtual void ffwdEnd(); |
197 virtual void rewind(); | 230 virtual void rewind(); |
198 virtual void rewindStart(); | 231 virtual void rewindStart(); |
232 virtual void record(); | |
199 virtual void stop(); | 233 virtual void stop(); |
200 | 234 |
201 virtual void ffwdSimilar(); | 235 virtual void ffwdSimilar(); |
202 virtual void rewindSimilar(); | 236 virtual void rewindSimilar(); |
203 | 237 |
212 | 246 |
213 virtual void playLoopToggled(); | 247 virtual void playLoopToggled(); |
214 virtual void playSelectionToggled(); | 248 virtual void playSelectionToggled(); |
215 virtual void playSoloToggled(); | 249 virtual void playSoloToggled(); |
216 | 250 |
251 virtual void audioChannelCountIncreased(int count); | |
252 | |
217 virtual void sampleRateMismatch(sv_samplerate_t, sv_samplerate_t, bool) = 0; | 253 virtual void sampleRateMismatch(sv_samplerate_t, sv_samplerate_t, bool) = 0; |
218 virtual void audioOverloadPluginDisabled() = 0; | 254 virtual void audioOverloadPluginDisabled() = 0; |
219 virtual void audioTimeStretchMultiChannelDisabled() = 0; | 255 virtual void audioTimeStretchMultiChannelDisabled() = 0; |
220 | 256 |
221 virtual void playbackFrameChanged(sv_frame_t); | 257 virtual void playbackFrameChanged(sv_frame_t); |
222 virtual void globalCentreFrameChanged(sv_frame_t); | 258 virtual void globalCentreFrameChanged(sv_frame_t); |
223 virtual void viewCentreFrameChanged(View *, sv_frame_t); | 259 virtual void viewCentreFrameChanged(View *, sv_frame_t); |
224 virtual void viewZoomLevelChanged(View *, int, bool); | 260 virtual void viewZoomLevelChanged(View *, int, bool); |
225 virtual void outputLevelsChanged(float, float) = 0; | 261 virtual void monitoringLevelsChanged(float, float) = 0; |
262 virtual void recordDurationChanged(sv_frame_t, sv_samplerate_t); | |
226 | 263 |
227 virtual void currentPaneChanged(Pane *); | 264 virtual void currentPaneChanged(Pane *); |
228 virtual void currentLayerChanged(Pane *, Layer *); | 265 virtual void currentLayerChanged(Pane *, Layer *); |
229 | 266 |
230 virtual void selectAll(); | 267 virtual void selectAll(); |
244 virtual void insertInstantAt(sv_frame_t); | 281 virtual void insertInstantAt(sv_frame_t); |
245 virtual void insertInstantsAtBoundaries(); | 282 virtual void insertInstantsAtBoundaries(); |
246 virtual void insertItemAtSelection(); | 283 virtual void insertItemAtSelection(); |
247 virtual void insertItemAt(sv_frame_t, sv_frame_t); | 284 virtual void insertItemAt(sv_frame_t, sv_frame_t); |
248 virtual void renumberInstants(); | 285 virtual void renumberInstants(); |
286 virtual void subdivideInstantsBy(int); | |
287 virtual void winnowInstantsBy(int); | |
249 | 288 |
250 virtual void documentModified(); | 289 virtual void documentModified(); |
251 virtual void documentRestored(); | 290 virtual void documentRestored(); |
252 | 291 |
253 virtual void layerAdded(Layer *); | 292 virtual void layerAdded(Layer *); |
264 | 303 |
265 virtual void modelGenerationFailed(QString, QString) = 0; | 304 virtual void modelGenerationFailed(QString, QString) = 0; |
266 virtual void modelGenerationWarning(QString, QString) = 0; | 305 virtual void modelGenerationWarning(QString, QString) = 0; |
267 virtual void modelRegenerationFailed(QString, QString, QString) = 0; | 306 virtual void modelRegenerationFailed(QString, QString, QString) = 0; |
268 virtual void modelRegenerationWarning(QString, QString, QString) = 0; | 307 virtual void modelRegenerationWarning(QString, QString, QString) = 0; |
269 virtual void alignmentFailed(QString, QString) = 0; | 308 |
309 virtual void alignmentComplete(AlignmentModel *); | |
310 virtual void alignmentFailed(QString) = 0; | |
270 | 311 |
271 virtual void rightButtonMenuRequested(Pane *, QPoint point) = 0; | 312 virtual void rightButtonMenuRequested(Pane *, QPoint point) = 0; |
272 | 313 |
273 virtual void paneAdded(Pane *) = 0; | 314 virtual void paneAdded(Pane *) = 0; |
274 virtual void paneHidden(Pane *) = 0; | 315 virtual void paneHidden(Pane *) = 0; |
302 | 343 |
303 PaneStack *m_paneStack; | 344 PaneStack *m_paneStack; |
304 ViewManager *m_viewManager; | 345 ViewManager *m_viewManager; |
305 Layer *m_timeRulerLayer; | 346 Layer *m_timeRulerLayer; |
306 | 347 |
307 bool m_audioOutput; | 348 SoundOptions m_soundOptions; |
349 | |
308 AudioCallbackPlaySource *m_playSource; | 350 AudioCallbackPlaySource *m_playSource; |
309 AudioCallbackPlayTarget *m_playTarget; | 351 AudioCallbackRecordTarget *m_recordTarget; |
352 breakfastquay::ResamplerWrapper *m_resamplerWrapper; | |
353 breakfastquay::SystemPlaybackTarget *m_playTarget; // only one of this... | |
354 breakfastquay::SystemAudioIO *m_audioIO; // ... and this exists | |
310 | 355 |
311 class OSCQueueStarter : public QThread | 356 class OSCQueueStarter : public QThread |
312 { | 357 { |
313 public: | 358 public: |
314 OSCQueueStarter(MainWindowBase *mwb) : QThread(mwb), m_mwb(mwb) { } | 359 OSCQueueStarter(MainWindowBase *mwb) : QThread(mwb), m_mwb(mwb) { } |
340 | 385 |
341 bool m_initialDarkBackground; | 386 bool m_initialDarkBackground; |
342 | 387 |
343 RealTime m_defaultFfwdRwdStep; | 388 RealTime m_defaultFfwdRwdStep; |
344 | 389 |
390 AudioRecordMode m_audioRecordMode; | |
391 | |
345 mutable QLabel *m_statusLabel; | 392 mutable QLabel *m_statusLabel; |
346 QLabel *getStatusLabel() const; | 393 QLabel *getStatusLabel() const; |
347 | 394 |
348 WaveFileModel *getMainModel(); | 395 WaveFileModel *getMainModel(); |
349 const WaveFileModel *getMainModel() const; | 396 const WaveFileModel *getMainModel() const; |
419 virtual void registerLastOpenedFilePath(FileFinder::FileType type, QString path); | 466 virtual void registerLastOpenedFilePath(FileFinder::FileType type, QString path); |
420 | 467 |
421 virtual QString getDefaultSessionTemplate() const; | 468 virtual QString getDefaultSessionTemplate() const; |
422 virtual void setDefaultSessionTemplate(QString); | 469 virtual void setDefaultSessionTemplate(QString); |
423 | 470 |
424 virtual void createPlayTarget(); | 471 virtual void findTimeRulerLayer(); |
472 | |
473 virtual void createAudioIO(); | |
474 virtual void deleteAudioIO(); | |
475 | |
425 virtual void openHelpUrl(QString url); | 476 virtual void openHelpUrl(QString url); |
477 virtual void openLocalFolder(QString path); | |
426 | 478 |
427 virtual void setupMenus() = 0; | 479 virtual void setupMenus() = 0; |
428 virtual void updateVisibleRangeDisplay(Pane *p) const = 0; | 480 virtual void updateVisibleRangeDisplay(Pane *p) const = 0; |
429 virtual void updatePositionStatusDisplays() const = 0; | 481 virtual void updatePositionStatusDisplays() const = 0; |
430 | 482 |
431 // Call this after setting up the menu bar, to fix up single-key | 483 // Call this after setting up the menu bar, to fix up single-key |
432 // shortcuts on OS/X | 484 // shortcuts on OS/X and do any other platform-specific tidying |
433 virtual void finaliseMenus(); | 485 virtual void finaliseMenus(); |
434 virtual void finaliseMenu(QMenu *); | 486 virtual void finaliseMenu(QMenu *); |
435 | 487 |
488 // Call before finaliseMenus if you wish to have a say in this question | |
489 void setIconsVisibleInMenus(bool visible) { m_iconsVisibleInMenus = visible; } | |
490 bool m_iconsVisibleInMenus; | |
491 | |
436 // Only used on OS/X to work around a Qt/Cocoa bug, see finaliseMenus | 492 // Only used on OS/X to work around a Qt/Cocoa bug, see finaliseMenus |
437 QSignalMapper *m_menuShortcutMapper; | 493 QSignalMapper *m_menuShortcutMapper; |
438 QList<QShortcut *> m_appShortcuts; | 494 QList<QShortcut *> m_appShortcuts; |
439 | 495 |
440 virtual bool shouldCreateNewSessionForRDFAudio(bool *) { return true; } | 496 virtual bool shouldCreateNewSessionForRDFAudio(bool *) { return true; } |