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