Mercurial > hg > svapp
comparison framework/MainWindowBase.h @ 548:baa11365ebdd bqaudioio
Merge from branch bqresample
author | Chris Cannam |
---|---|
date | Wed, 07 Dec 2016 11:51:42 +0000 |
parents | 287fce13a1ae |
children | fb675409297a b9d8c7a690d6 |
comparison
equal
deleted
inserted
replaced
547:82d7e5cf7517 | 548:baa11365ebdd |
---|---|
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 AudioRecordTarget; | |
49 class CommandHistory; | 50 class CommandHistory; |
50 class QMenu; | 51 class QMenu; |
51 class AudioDial; | 52 class AudioDial; |
52 class QLabel; | 53 class QLabel; |
53 class QCheckBox; | 54 class QCheckBox; |
59 class KeyReference; | 60 class KeyReference; |
60 class Labeller; | 61 class Labeller; |
61 class ModelDataTableDialog; | 62 class ModelDataTableDialog; |
62 class QSignalMapper; | 63 class QSignalMapper; |
63 class QShortcut; | 64 class QShortcut; |
65 class AlignmentModel; | |
64 | 66 |
65 namespace breakfastquay { | 67 namespace breakfastquay { |
66 class SystemPlaybackTarget; | 68 class SystemPlaybackTarget; |
69 class SystemAudioIO; | |
67 } | 70 } |
68 | 71 |
69 /** | 72 /** |
70 * The base class for the SV main window. This includes everything to | 73 * The base class for the SV main window. This includes everything to |
71 * do with general document and pane stack management, but nothing | 74 * do with general document and pane stack management, but nothing |
78 class MainWindowBase : public QMainWindow, public FrameTimer | 81 class MainWindowBase : public QMainWindow, public FrameTimer |
79 { | 82 { |
80 Q_OBJECT | 83 Q_OBJECT |
81 | 84 |
82 public: | 85 public: |
83 MainWindowBase(bool withAudioOutput, bool withMIDIInput); | 86 enum SoundOption { |
87 WithAudioOutput = 0x01, | |
88 WithAudioInput = 0x02, | |
89 WithMIDIInput = 0x04, | |
90 WithEverything = 0xff, | |
91 WithNothing = 0x00 | |
92 }; | |
93 typedef int SoundOptions; | |
94 | |
95 MainWindowBase(SoundOptions options = WithEverything); | |
84 virtual ~MainWindowBase(); | 96 virtual ~MainWindowBase(); |
85 | 97 |
86 enum AudioFileOpenMode { | 98 enum AudioFileOpenMode { |
87 ReplaceSession, | 99 ReplaceSession, |
88 ReplaceMainModel, | 100 ReplaceMainModel, |
96 FileOpenFailed, | 108 FileOpenFailed, |
97 FileOpenCancelled, | 109 FileOpenCancelled, |
98 FileOpenWrongMode // attempted to open layer when no main model present | 110 FileOpenWrongMode // attempted to open layer when no main model present |
99 }; | 111 }; |
100 | 112 |
113 enum AudioRecordMode { | |
114 RecordReplaceSession, | |
115 RecordCreateAdditionalModel | |
116 }; | |
117 | |
101 virtual FileOpenStatus open(FileSource source, AudioFileOpenMode = AskUser); | 118 virtual FileOpenStatus open(FileSource source, AudioFileOpenMode = AskUser); |
102 virtual FileOpenStatus openPath(QString fileOrUrl, AudioFileOpenMode = AskUser); | 119 virtual FileOpenStatus openPath(QString fileOrUrl, AudioFileOpenMode = AskUser); |
103 virtual FileOpenStatus openAudio(FileSource source, AudioFileOpenMode = AskUser, QString templateName = ""); | 120 virtual FileOpenStatus openAudio(FileSource source, AudioFileOpenMode = AskUser, QString templateName = ""); |
104 virtual FileOpenStatus openPlaylist(FileSource source, AudioFileOpenMode = AskUser); | 121 virtual FileOpenStatus openPlaylist(FileSource source, AudioFileOpenMode = AskUser); |
105 virtual FileOpenStatus openLayer(FileSource source); | 122 virtual FileOpenStatus openLayer(FileSource source); |
106 virtual FileOpenStatus openImage(FileSource source); | 123 virtual FileOpenStatus openImage(FileSource source); |
107 | 124 |
125 virtual FileOpenStatus openDirOfAudio(QString dirPath); | |
126 | |
108 virtual FileOpenStatus openSession(FileSource source); | 127 virtual FileOpenStatus openSession(FileSource source); |
109 virtual FileOpenStatus openSessionPath(QString fileOrUrl); | 128 virtual FileOpenStatus openSessionPath(QString fileOrUrl); |
110 virtual FileOpenStatus openSessionTemplate(QString templateName); | 129 virtual FileOpenStatus openSessionTemplate(QString templateName); |
111 virtual FileOpenStatus openSessionTemplate(FileSource source); | 130 virtual FileOpenStatus openSessionTemplate(FileSource source); |
112 | 131 |
118 | 137 |
119 void setDefaultFfwdRwdStep(RealTime step) { | 138 void setDefaultFfwdRwdStep(RealTime step) { |
120 m_defaultFfwdRwdStep = step; | 139 m_defaultFfwdRwdStep = step; |
121 } | 140 } |
122 | 141 |
142 void setAudioRecordMode(AudioRecordMode mode) { | |
143 m_audioRecordMode = mode; | |
144 } | |
145 | |
123 signals: | 146 signals: |
124 // Used to toggle the availability of menu actions | 147 // Used to toggle the availability of menu actions |
125 void canAddPane(bool); | 148 void canAddPane(bool); |
126 void canDeleteCurrentPane(bool); | 149 void canDeleteCurrentPane(bool); |
127 void canAddLayer(bool); | 150 void canAddLayer(bool); |
143 void canPaste(bool); | 166 void canPaste(bool); |
144 void canInsertInstant(bool); | 167 void canInsertInstant(bool); |
145 void canInsertInstantsAtBoundaries(bool); | 168 void canInsertInstantsAtBoundaries(bool); |
146 void canInsertItemAtSelection(bool); | 169 void canInsertItemAtSelection(bool); |
147 void canRenumberInstants(bool); | 170 void canRenumberInstants(bool); |
171 void canSubdivideInstants(bool); | |
172 void canWinnowInstants(bool); | |
148 void canDeleteCurrentLayer(bool); | 173 void canDeleteCurrentLayer(bool); |
149 void canZoom(bool); | 174 void canZoom(bool); |
150 void canScroll(bool); | 175 void canScroll(bool); |
151 void canPlay(bool); | 176 void canPlay(bool); |
177 void canRecord(bool); | |
152 void canFfwd(bool); | 178 void canFfwd(bool); |
153 void canRewind(bool); | 179 void canRewind(bool); |
154 void canPlaySelection(bool); | 180 void canPlaySelection(bool); |
155 void canSpeedUpPlayback(bool); | 181 void canSpeedUpPlayback(bool); |
156 void canSlowDownPlayback(bool); | 182 void canSlowDownPlayback(bool); |
197 virtual void play(); | 223 virtual void play(); |
198 virtual void ffwd(); | 224 virtual void ffwd(); |
199 virtual void ffwdEnd(); | 225 virtual void ffwdEnd(); |
200 virtual void rewind(); | 226 virtual void rewind(); |
201 virtual void rewindStart(); | 227 virtual void rewindStart(); |
228 virtual void record(); | |
202 virtual void stop(); | 229 virtual void stop(); |
203 | 230 |
204 virtual void ffwdSimilar(); | 231 virtual void ffwdSimilar(); |
205 virtual void rewindSimilar(); | 232 virtual void rewindSimilar(); |
206 | 233 |
224 virtual void playbackFrameChanged(sv_frame_t); | 251 virtual void playbackFrameChanged(sv_frame_t); |
225 virtual void globalCentreFrameChanged(sv_frame_t); | 252 virtual void globalCentreFrameChanged(sv_frame_t); |
226 virtual void viewCentreFrameChanged(View *, sv_frame_t); | 253 virtual void viewCentreFrameChanged(View *, sv_frame_t); |
227 virtual void viewZoomLevelChanged(View *, int, bool); | 254 virtual void viewZoomLevelChanged(View *, int, bool); |
228 virtual void outputLevelsChanged(float, float) = 0; | 255 virtual void outputLevelsChanged(float, float) = 0; |
256 virtual void recordDurationChanged(sv_frame_t, sv_samplerate_t); | |
229 | 257 |
230 virtual void currentPaneChanged(Pane *); | 258 virtual void currentPaneChanged(Pane *); |
231 virtual void currentLayerChanged(Pane *, Layer *); | 259 virtual void currentLayerChanged(Pane *, Layer *); |
232 | 260 |
233 virtual void selectAll(); | 261 virtual void selectAll(); |
247 virtual void insertInstantAt(sv_frame_t); | 275 virtual void insertInstantAt(sv_frame_t); |
248 virtual void insertInstantsAtBoundaries(); | 276 virtual void insertInstantsAtBoundaries(); |
249 virtual void insertItemAtSelection(); | 277 virtual void insertItemAtSelection(); |
250 virtual void insertItemAt(sv_frame_t, sv_frame_t); | 278 virtual void insertItemAt(sv_frame_t, sv_frame_t); |
251 virtual void renumberInstants(); | 279 virtual void renumberInstants(); |
280 virtual void subdivideInstantsBy(int); | |
281 virtual void winnowInstantsBy(int); | |
252 | 282 |
253 virtual void documentModified(); | 283 virtual void documentModified(); |
254 virtual void documentRestored(); | 284 virtual void documentRestored(); |
255 | 285 |
256 virtual void layerAdded(Layer *); | 286 virtual void layerAdded(Layer *); |
267 | 297 |
268 virtual void modelGenerationFailed(QString, QString) = 0; | 298 virtual void modelGenerationFailed(QString, QString) = 0; |
269 virtual void modelGenerationWarning(QString, QString) = 0; | 299 virtual void modelGenerationWarning(QString, QString) = 0; |
270 virtual void modelRegenerationFailed(QString, QString, QString) = 0; | 300 virtual void modelRegenerationFailed(QString, QString, QString) = 0; |
271 virtual void modelRegenerationWarning(QString, QString, QString) = 0; | 301 virtual void modelRegenerationWarning(QString, QString, QString) = 0; |
272 virtual void alignmentFailed(QString, QString) = 0; | 302 |
303 virtual void alignmentComplete(AlignmentModel *); | |
304 virtual void alignmentFailed(QString) = 0; | |
273 | 305 |
274 virtual void rightButtonMenuRequested(Pane *, QPoint point) = 0; | 306 virtual void rightButtonMenuRequested(Pane *, QPoint point) = 0; |
275 | 307 |
276 virtual void paneAdded(Pane *) = 0; | 308 virtual void paneAdded(Pane *) = 0; |
277 virtual void paneHidden(Pane *) = 0; | 309 virtual void paneHidden(Pane *) = 0; |
305 | 337 |
306 PaneStack *m_paneStack; | 338 PaneStack *m_paneStack; |
307 ViewManager *m_viewManager; | 339 ViewManager *m_viewManager; |
308 Layer *m_timeRulerLayer; | 340 Layer *m_timeRulerLayer; |
309 | 341 |
310 bool m_audioOutput; | 342 SoundOptions m_soundOptions; |
343 | |
311 AudioCallbackPlaySource *m_playSource; | 344 AudioCallbackPlaySource *m_playSource; |
312 breakfastquay::SystemPlaybackTarget *m_playTarget; | 345 AudioRecordTarget *m_recordTarget; |
346 breakfastquay::SystemPlaybackTarget *m_playTarget; // only one of this... | |
347 breakfastquay::SystemAudioIO *m_audioIO; // ... and this exists | |
313 | 348 |
314 class OSCQueueStarter : public QThread | 349 class OSCQueueStarter : public QThread |
315 { | 350 { |
316 public: | 351 public: |
317 OSCQueueStarter(MainWindowBase *mwb) : QThread(mwb), m_mwb(mwb) { } | 352 OSCQueueStarter(MainWindowBase *mwb) : QThread(mwb), m_mwb(mwb) { } |
342 mutable QString m_myStatusMessage; | 377 mutable QString m_myStatusMessage; |
343 | 378 |
344 bool m_initialDarkBackground; | 379 bool m_initialDarkBackground; |
345 | 380 |
346 RealTime m_defaultFfwdRwdStep; | 381 RealTime m_defaultFfwdRwdStep; |
382 | |
383 AudioRecordMode m_audioRecordMode; | |
347 | 384 |
348 mutable QLabel *m_statusLabel; | 385 mutable QLabel *m_statusLabel; |
349 QLabel *getStatusLabel() const; | 386 QLabel *getStatusLabel() const; |
350 | 387 |
351 WaveFileModel *getMainModel(); | 388 WaveFileModel *getMainModel(); |
422 virtual void registerLastOpenedFilePath(FileFinder::FileType type, QString path); | 459 virtual void registerLastOpenedFilePath(FileFinder::FileType type, QString path); |
423 | 460 |
424 virtual QString getDefaultSessionTemplate() const; | 461 virtual QString getDefaultSessionTemplate() const; |
425 virtual void setDefaultSessionTemplate(QString); | 462 virtual void setDefaultSessionTemplate(QString); |
426 | 463 |
427 virtual void createPlayTarget(); | 464 virtual void createAudioIO(); |
428 virtual void openHelpUrl(QString url); | 465 virtual void openHelpUrl(QString url); |
466 virtual void openLocalFolder(QString path); | |
429 | 467 |
430 virtual void setupMenus() = 0; | 468 virtual void setupMenus() = 0; |
431 virtual void updateVisibleRangeDisplay(Pane *p) const = 0; | 469 virtual void updateVisibleRangeDisplay(Pane *p) const = 0; |
432 virtual void updatePositionStatusDisplays() const = 0; | 470 virtual void updatePositionStatusDisplays() const = 0; |
433 | 471 |
434 // Call this after setting up the menu bar, to fix up single-key | 472 // Call this after setting up the menu bar, to fix up single-key |
435 // shortcuts on OS/X | 473 // shortcuts on OS/X and do any other platform-specific tidying |
436 virtual void finaliseMenus(); | 474 virtual void finaliseMenus(); |
437 virtual void finaliseMenu(QMenu *); | 475 virtual void finaliseMenu(QMenu *); |
438 | 476 |
477 // Call before finaliseMenus if you wish to have a say in this question | |
478 void setIconsVisibleInMenus(bool visible) { m_iconsVisibleInMenus = visible; } | |
479 bool m_iconsVisibleInMenus; | |
480 | |
439 // Only used on OS/X to work around a Qt/Cocoa bug, see finaliseMenus | 481 // Only used on OS/X to work around a Qt/Cocoa bug, see finaliseMenus |
440 QSignalMapper *m_menuShortcutMapper; | 482 QSignalMapper *m_menuShortcutMapper; |
441 QList<QShortcut *> m_appShortcuts; | 483 QList<QShortcut *> m_appShortcuts; |
442 | 484 |
443 virtual bool shouldCreateNewSessionForRDFAudio(bool *) { return true; } | 485 virtual bool shouldCreateNewSessionForRDFAudio(bool *) { return true; } |