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; }