Mercurial > hg > sonic-visualiser
diff main/MainWindow.h @ 200:1871581e4da9
* Split MainWindow out into MainWindowBase (pane stack management, basic file
I/O etc) and MainWindow (widget structure, menus and actions etc)
author | Chris Cannam |
---|---|
date | Mon, 22 Oct 2007 14:24:31 +0000 |
parents | 24ac2e4010c5 |
children | 0de89bce24e4 |
line wrap: on
line diff
--- a/main/MainWindow.h Mon Oct 22 09:45:35 2007 +0000 +++ b/main/MainWindow.h Mon Oct 22 14:24:31 2007 +0000 @@ -4,7 +4,7 @@ Sonic Visualiser An audio file viewer and annotation editor. Centre for Digital Music, Queen Mary, University of London. - This file copyright 2006 Chris Cannam and QMUL. + This file copyright 2006-2007 Chris Cannam and QMUL. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as @@ -19,9 +19,10 @@ #include <QFrame> #include <QString> #include <QUrl> -#include <QMainWindow> #include <QPointer> +#include "MainWindowBase.h" + #include "base/Command.h" #include "view/ViewManager.h" #include "base/PropertyContainer.h" @@ -58,7 +59,7 @@ class Labeller; -class MainWindow : public QMainWindow +class MainWindow : public MainWindowBase { Q_OBJECT @@ -66,228 +67,102 @@ MainWindow(bool withAudioOutput = true, bool withOSCSupport = true); virtual ~MainWindow(); - - enum AudioFileOpenMode { - ReplaceMainModel, - CreateAdditionalModel, - ReplaceCurrentPane, - AskUser - }; - - enum FileOpenStatus { - FileOpenSucceeded, - FileOpenFailed, - FileOpenCancelled, - FileOpenWrongMode // attempted to open layer when no main model present - }; - - FileOpenStatus open(QString fileOrUrl, AudioFileOpenMode = AskUser); - FileOpenStatus open(FileSource source, AudioFileOpenMode = AskUser); - - FileOpenStatus openAudio(FileSource source, AudioFileOpenMode = AskUser); - FileOpenStatus openPlaylist(FileSource source, AudioFileOpenMode = AskUser); - FileOpenStatus openLayer(FileSource source); - FileOpenStatus openImage(FileSource source); - FileOpenStatus openSession(FileSource source); - - bool saveSessionFile(QString path); - bool commitData(bool mayAskUser); // on session shutdown signals: - // Used to toggle the availability of menu actions - void canAddPane(bool); - void canDeleteCurrentPane(bool); - void canAddLayer(bool); - void canImportMoreAudio(bool); - void canImportLayer(bool); - void canExportAudio(bool); - void canExportLayer(bool); - void canExportImage(bool); - void canRenameLayer(bool); - void canEditLayer(bool); - void canMeasureLayer(bool); - void canSelect(bool); - void canClearSelection(bool); - void canEditSelection(bool); - void canDeleteSelection(bool); - void canPaste(bool); - void canInsertInstant(bool); - void canInsertInstantsAtBoundaries(bool); - void canRenumberInstants(bool); - void canDeleteCurrentLayer(bool); - void canZoom(bool); - void canScroll(bool); - void canPlay(bool); - void canFfwd(bool); - void canRewind(bool); - void canPlaySelection(bool); - void canSpeedUpPlayback(bool); - void canSlowDownPlayback(bool); - void canChangePlaybackSpeed(bool); - void canSave(bool); public slots: - void preferenceChanged(PropertyContainer::PropertyName); + virtual void preferenceChanged(PropertyContainer::PropertyName); + virtual bool commitData(bool mayAskUser); protected slots: - void openSession(); - void importAudio(); - void importMoreAudio(); - void openSomething(); - void openLocation(); - void openRecentFile(); - void exportAudio(); - void importLayer(); - void exportLayer(); - void exportImage(); - void saveSession(); - void saveSessionAs(); - void newSession(); - void closeSession(); - void preferences(); + virtual void openSession(); + virtual void importAudio(); + virtual void importMoreAudio(); + virtual void openSomething(); + virtual void openLocation(); + virtual void openRecentFile(); + virtual void exportAudio(); + virtual void importLayer(); + virtual void exportLayer(); + virtual void exportImage(); + virtual void saveSession(); + virtual void saveSessionAs(); + virtual void newSession(); + virtual void closeSession(); + virtual void preferences(); - void zoomIn(); - void zoomOut(); - void zoomToFit(); - void zoomDefault(); - void scrollLeft(); - void scrollRight(); - void jumpLeft(); - void jumpRight(); + virtual void sampleRateMismatch(size_t, size_t, bool); + virtual void audioOverloadPluginDisabled(); - void showNoOverlays(); - void showMinimalOverlays(); - void showStandardOverlays(); - void showAllOverlays(); + virtual void toolNavigateSelected(); + virtual void toolSelectSelected(); + virtual void toolEditSelected(); + virtual void toolDrawSelected(); + virtual void toolMeasureSelected(); - void toggleZoomWheels(); - void togglePropertyBoxes(); - void toggleStatusBar(); + virtual void documentModified(); + virtual void documentRestored(); - void play(); - void ffwd(); - void ffwdEnd(); - void rewind(); - void rewindStart(); - void stop(); + virtual void updateMenuStates(); + virtual void updateDescriptionLabel(); - void addPane(); - void addLayer(); - void deleteCurrentPane(); - void renameCurrentLayer(); - void deleteCurrentLayer(); + virtual void setInstantsNumbering(); + virtual void setInstantsCounterCycle(); + virtual void resetInstantsCounters(); - void playLoopToggled(); - void playSelectionToggled(); - void playSoloToggled(); - void playSpeedChanged(int); - void playSharpenToggled(); - void playMonoToggled(); - void speedUpPlayback(); - void slowDownPlayback(); - void restoreNormalPlayback(); - void sampleRateMismatch(size_t, size_t, bool); - void audioOverloadPluginDisabled(); + virtual void modelGenerationFailed(QString); + virtual void modelRegenerationFailed(QString, QString); - void playbackFrameChanged(unsigned long); - void globalCentreFrameChanged(unsigned long); - void viewCentreFrameChanged(View *, unsigned long); - void viewZoomLevelChanged(View *, unsigned long, bool); - void outputLevelsChanged(float, float); + virtual void rightButtonMenuRequested(Pane *, QPoint point); - void currentPaneChanged(Pane *); - void currentLayerChanged(Pane *, Layer *); + virtual void addPane(); + virtual void addLayer(); + virtual void renameCurrentLayer(); - void toolNavigateSelected(); - void toolSelectSelected(); - void toolEditSelected(); - void toolDrawSelected(); - void toolMeasureSelected(); + virtual void paneAdded(Pane *); + virtual void paneHidden(Pane *); + virtual void paneAboutToBeDeleted(Pane *); + virtual void paneDropAccepted(Pane *, QStringList); + virtual void paneDropAccepted(Pane *, QString); - void selectAll(); - void selectToStart(); - void selectToEnd(); - void selectVisible(); - void clearSelection(); - void cut(); - void copy(); - void paste(); - void deleteSelected(); - void insertInstant(); - void insertInstantAt(size_t); - void insertInstantsAtBoundaries(); - void setInstantsNumbering(); - void setInstantsCounterCycle(); - void resetInstantsCounters(); - void renumberInstants(); + virtual void setupRecentFilesMenu(); + virtual void setupRecentTransformsMenu(); - void documentModified(); - void documentRestored(); + virtual void playSpeedChanged(int); + virtual void playSharpenToggled(); + virtual void playMonoToggled(); - void updateMenuStates(); - void updateDescriptionLabel(); + virtual void speedUpPlayback(); + virtual void slowDownPlayback(); + virtual void restoreNormalPlayback(); - void layerAdded(Layer *); - void layerRemoved(Layer *); - void layerAboutToBeDeleted(Layer *); - void layerInAView(Layer *, bool); + virtual void outputLevelsChanged(float, float); - void mainModelChanged(WaveFileModel *); - void modelAdded(Model *); - void modelAboutToBeDeleted(Model *); + virtual void layerRemoved(Layer *); + virtual void layerInAView(Layer *, bool); - void modelGenerationFailed(QString); - void modelRegenerationFailed(QString, QString); + virtual void mainModelChanged(WaveFileModel *); + virtual void modelAdded(Model *); - void rightButtonMenuRequested(Pane *, QPoint point); + virtual void showLayerTree(); - void propertyStacksResized(); + virtual void mouseEnteredWidget(); + virtual void mouseLeftWidget(); - void paneDropAccepted(Pane *, QStringList); - void paneDropAccepted(Pane *, QString); + virtual void handleOSCMessage(const OSCMessage &); - void setupRecentFilesMenu(); - void setupRecentTransformsMenu(); - - void showLayerTree(); - - void pollOSC(); - void handleOSCMessage(const OSCMessage &); - - void mouseEnteredWidget(); - void mouseLeftWidget(); - void contextHelpChanged(const QString &); - void inProgressSelectionChanged(); - - void website(); - void help(); - void about(); - void keyReference(); + virtual void website(); + virtual void help(); + virtual void about(); + virtual void keyReference(); protected: - QString m_sessionFile; - QString m_audioFile; - Document *m_document; - - QLabel *m_descriptionLabel; - PaneStack *m_paneStack; - ViewManager *m_viewManager; Overview *m_overview; Fader *m_fader; AudioDial *m_playSpeed; QPushButton *m_playSharpen; QPushButton *m_playMono; WaveformLayer *m_panLayer; - Layer *m_timeRulerLayer; - - bool m_audioOutput; - AudioCallbackPlaySource *m_playSource; - AudioCallbackPlayTarget *m_playTarget; - - OSCQueue *m_oscQueue; - - RecentFiles m_recentFiles; - RecentFiles m_recentTransforms; bool m_mainMenusCreated; QMenu *m_paneMenu; @@ -307,26 +182,11 @@ QAction *m_ffwdAction; QAction *m_rwdAction; - bool m_documentModified; - bool m_openingAudioFile; - bool m_abandoning; - - Labeller *m_labeller; - - int m_lastPlayStatusSec; - mutable QString m_myStatusMessage; - QPointer<PreferencesDialog> m_preferencesDialog; QPointer<QTreeView> m_layerTreeView; - bool m_initialDarkBackground; - KeyReference *m_keyReference; - WaveFileModel *getMainModel(); - const WaveFileModel *getMainModel() const; - void createDocument(); - struct PaneConfiguration { PaneConfiguration(LayerFactory::LayerType _layer = LayerFactory::TimeRuler, @@ -360,87 +220,22 @@ typedef std::map<QAction *, int> NumberingActionMap; NumberingActionMap m_numberingActions; - void setupMenus(); - void setupFileMenu(); - void setupEditMenu(); - void setupViewMenu(); - void setupPaneAndLayerMenus(); - void setupTransformsMenu(); - void setupHelpMenu(); - void setupExistingLayersMenus(); - void setupToolbars(); + virtual void setupMenus(); + virtual void setupFileMenu(); + virtual void setupEditMenu(); + virtual void setupViewMenu(); + virtual void setupPaneAndLayerMenus(); + virtual void setupTransformsMenu(); + virtual void setupHelpMenu(); + virtual void setupExistingLayersMenus(); + virtual void setupToolbars(); - Pane *addPaneToStack(); - - void addPane(const PaneConfiguration &configuration, QString text); - - Layer *getSnapLayer() const; - - class PaneCallback : public SVFileReaderPaneCallback - { - public: - PaneCallback(MainWindow *mw) : m_mw(mw) { } - virtual Pane *addPane() { return m_mw->addPaneToStack(); } - virtual void setWindowSize(int width, int height) { - m_mw->resize(width, height); - } - virtual void addSelection(int start, int end) { - m_mw->m_viewManager->addSelection(Selection(start, end)); - } - protected: - MainWindow *m_mw; - }; - - class AddPaneCommand : public Command - { - public: - AddPaneCommand(MainWindow *mw); - virtual ~AddPaneCommand(); - - virtual void execute(); - virtual void unexecute(); - virtual QString getName() const; - - Pane *getPane() { return m_pane; } - - protected: - MainWindow *m_mw; - Pane *m_pane; // Main window owns this, but I determine its lifespan - Pane *m_prevCurrentPane; // I don't own this - bool m_added; - }; - - class RemovePaneCommand : public Command - { - public: - RemovePaneCommand(MainWindow *mw, Pane *pane); - virtual ~RemovePaneCommand(); - - virtual void execute(); - virtual void unexecute(); - virtual QString getName() const; - - protected: - MainWindow *m_mw; - Pane *m_pane; // Main window owns this, but I determine its lifespan - Pane *m_prevCurrentPane; // I don't own this - bool m_added; - }; + virtual void addPane(const PaneConfiguration &configuration, QString text); virtual void closeEvent(QCloseEvent *e); - bool checkSaveModified(); - - QString getOpenFileName(FileFinder::FileType type); - QString getSaveFileName(FileFinder::FileType type); - void registerLastOpenedFilePath(FileFinder::FileType type, QString path); - - void createPlayTarget(); - - void openHelpUrl(QString url); - - void updateVisibleRangeDisplay(Pane *p) const; - - void toXml(QTextStream &stream); + virtual bool checkSaveModified(); + + virtual void updateVisibleRangeDisplay(Pane *p) const; };