Chris@0: /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ Chris@0: Chris@0: /* Chris@0: Sonic Visualiser Chris@0: An audio file viewer and annotation editor. Chris@0: Centre for Digital Music, Queen Mary, University of London. Chris@200: This file copyright 2006-2007 Chris Cannam and QMUL. Chris@0: Chris@0: This program is free software; you can redistribute it and/or Chris@0: modify it under the terms of the GNU General Public License as Chris@0: published by the Free Software Foundation; either version 2 of the Chris@0: License, or (at your option) any later version. See the file Chris@0: COPYING included with this distribution for more information. Chris@0: */ Chris@0: Chris@2300: #ifndef SV_MAIN_WINDOW_H Chris@2300: #define SV_MAIN_WINDOW_H Chris@0: Chris@672: #include "framework/MainWindowBase.h" Chris@0: Chris@672: class VersionTester; Chris@672: class Surveyer; Chris@672: class LayerTreeDialog; Chris@672: class ActivityLog; Chris@891: class UnitConverter; Chris@0: Chris@426: class QFileSystemWatcher; Chris@489: class QScrollArea; Chris@0: Chris@200: class MainWindow : public MainWindowBase Chris@0: { Chris@0: Q_OBJECT Chris@0: Chris@0: public: Chris@2375: MainWindow(AudioMode audioMode, MIDIMode midiMode, bool withOSCSupport); Chris@0: virtual ~MainWindow(); Chris@0: Chris@0: signals: Chris@376: void canChangeSolo(bool); Chris@376: void canAlign(bool); Chris@0: Chris@118: public slots: Chris@2125: void preferenceChanged(PropertyContainer::PropertyName) override; Chris@1448: virtual void coloursChanged(); Chris@1448: Chris@200: virtual bool commitData(bool mayAskUser); Chris@118: Chris@489: void goFullScreen(); Chris@492: void endFullScreen(); Chris@489: Chris@0: protected slots: Chris@200: virtual void importAudio(); Chris@200: virtual void importMoreAudio(); Chris@508: virtual void replaceMainAudio(); Chris@200: virtual void openSomething(); Chris@200: virtual void openLocation(); Chris@2149: virtual void openRecentFile(); Chris@435: virtual void applyTemplate(); Chris@200: virtual void exportAudio(); Chris@631: virtual void exportAudioData(); Chris@1995: virtual void convertAudio(); Chris@200: virtual void importLayer(); Chris@200: virtual void exportLayer(); Chris@200: virtual void exportImage(); Chris@1451: virtual void exportSVG(); Chris@1056: virtual void browseRecordedAudio(); Chris@200: virtual void saveSession(); Chris@200: virtual void saveSessionAs(); Chris@200: virtual void newSession(); Chris@2125: void closeSession() override; Chris@200: virtual void preferences(); Chris@0: Chris@2125: void sampleRateMismatch(sv_samplerate_t, sv_samplerate_t, bool) override; Chris@2125: void audioOverloadPluginDisabled() override; Chris@2125: void audioTimeStretchMultiChannelDisabled() override; Chris@0: Chris@200: virtual void toolNavigateSelected(); Chris@200: virtual void toolSelectSelected(); Chris@200: virtual void toolEditSelected(); Chris@200: virtual void toolDrawSelected(); Chris@217: virtual void toolEraseSelected(); Chris@200: virtual void toolMeasureSelected(); Chris@7: Chris@2125: void documentModified() override; Chris@2125: void documentRestored() override; Chris@303: virtual void documentReplaced(); Chris@0: Chris@2125: void updateMenuStates() override; Chris@2125: void updateDescriptionLabel() override; Chris@0: Chris@200: virtual void setInstantsNumbering(); Chris@200: virtual void setInstantsCounterCycle(); Chris@597: virtual void setInstantsCounters(); Chris@200: virtual void resetInstantsCounters(); Chris@1355: virtual void subdivideInstants(); Chris@1356: virtual void winnowInstants(); Chris@0: Chris@2125: void modelGenerationFailed(QString, QString) override; Chris@2125: void modelGenerationWarning(QString, QString) override; Chris@2125: void modelRegenerationFailed(QString, QString, QString) override; Chris@2125: void modelRegenerationWarning(QString, QString, QString) override; Chris@2125: void alignmentFailed(QString) override; Chris@0: Chris@2125: void rightButtonMenuRequested(Pane *, QPoint point) override; Chris@0: Chris@239: virtual void propertyStacksResized(int); Chris@239: Chris@200: virtual void addPane(); Chris@200: virtual void addLayer(); Chris@274: virtual void addLayer(QString transformId); Chris@200: virtual void renameCurrentLayer(); Chris@0: Chris@272: virtual void findTransform(); Chris@272: Chris@2125: void paneAdded(Pane *) override; Chris@2125: void paneHidden(Pane *) override; Chris@2125: void paneAboutToBeDeleted(Pane *) override; Chris@2125: void paneDropAccepted(Pane *, QStringList) override; Chris@2125: void paneDropAccepted(Pane *, QString) override; Chris@0: Chris@2303: void paneCancelButtonPressed(Layer *); Chris@2303: Chris@200: virtual void setupRecentFilesMenu(); Chris@211: virtual void setupRecentTransformsMenu(); Chris@423: virtual void setupTemplatesMenu(); Chris@0: Chris@200: virtual void playSpeedChanged(int); Chris@2125: void playSoloToggled() override; Chris@206: virtual void alignToggled(); Chris@0: Chris@2125: void currentPaneChanged(Pane *) override; Chris@227: Chris@200: virtual void speedUpPlayback(); Chris@200: virtual void slowDownPlayback(); Chris@200: virtual void restoreNormalPlayback(); Chris@0: Chris@2125: void monitoringLevelsChanged(float, float) override; Chris@0: Chris@2125: void layerRemoved(Layer *) override; Chris@2125: void layerInAView(Layer *, bool) override; Chris@0: Chris@2300: void mainModelChanged(ModelId) override; Chris@1035: virtual void mainModelGainChanged(float); Chris@1386: virtual void mainModelPanChanged(float); Chris@2300: void modelAdded(ModelId) override; Chris@0: Chris@200: virtual void showLayerTree(); Chris@306: virtual void showActivityLog(); Chris@891: virtual void showUnitConverter(); Chris@0: Chris@200: virtual void mouseEnteredWidget(); Chris@200: virtual void mouseLeftWidget(); Chris@73: Chris@2125: void handleOSCMessage(const OSCMessage &) override; Chris@304: virtual void midiEventsAvailable(); Chris@305: virtual void playStatusChanged(bool); Chris@193: Chris@1521: virtual void betaReleaseWarning(); Chris@1148: virtual void pluginPopulationWarning(); Chris@1087: Chris@425: virtual void saveSessionAsTemplate(); Chris@425: virtual void manageSavedTemplates(); Chris@425: Chris@200: virtual void website(); Chris@200: virtual void help(); Chris@200: virtual void about(); Chris@1516: virtual void whatsNew(); Chris@200: virtual void keyReference(); Chris@2125: void newerVersionAvailable(QString) override; Chris@0: Chris@0: protected: Chris@65: Overview *m_overview; Chris@1431: LevelPanToolButton *m_mainLevelPan; Chris@0: AudioDial *m_playSpeed; Chris@0: WaveformLayer *m_panLayer; Chris@489: Chris@489: QScrollArea *m_mainScroll; Chris@34: Chris@0: bool m_mainMenusCreated; Chris@0: QMenu *m_paneMenu; Chris@0: QMenu *m_layerMenu; Chris@34: QMenu *m_transformsMenu; Chris@155: QMenu *m_playbackMenu; Chris@0: QMenu *m_existingLayersMenu; Chris@95: QMenu *m_sliceMenu; Chris@0: QMenu *m_recentFilesMenu; Chris@211: QMenu *m_recentTransformsMenu; Chris@423: QMenu *m_templatesMenu; Chris@0: QMenu *m_rightButtonMenu; Chris@0: QMenu *m_rightButtonLayerMenu; Chris@211: QMenu *m_rightButtonTransformsMenu; Chris@155: QMenu *m_rightButtonPlaybackMenu; Chris@155: Chris@164: QAction *m_deleteSelectedAction; Chris@207: QAction *m_soloAction; Chris@265: QAction *m_rwdStartAction; Chris@323: QAction *m_rwdSimilarAction; Chris@265: QAction *m_rwdAction; Chris@155: QAction *m_ffwdAction; Chris@323: QAction *m_ffwdSimilarAction; Chris@265: QAction *m_ffwdEndAction; Chris@265: QAction *m_playAction; Chris@1047: QAction *m_recordAction; Chris@265: QAction *m_playSelectionAction; Chris@265: QAction *m_playLoopAction; Chris@436: QAction *m_manageTemplatesAction; Chris@494: QAction *m_zoomInAction; Chris@494: QAction *m_zoomOutAction; Chris@494: QAction *m_zoomFitAction; Chris@494: QAction *m_scrollLeftAction; Chris@494: QAction *m_scrollRightAction; Chris@494: QAction *m_showPropertyBoxesAction; Chris@0: Chris@207: bool m_soloModified; Chris@207: bool m_prevSolo; Chris@207: Chris@239: QFrame *m_playControlsSpacer; Chris@239: int m_playControlsWidth; Chris@239: Chris@518: QLabel *m_descriptionLabel; Chris@340: QLabel *m_currentLabel; Chris@340: Chris@0: QPointer m_preferencesDialog; Chris@219: QPointer m_layerTreeDialog; Chris@0: Chris@302: ActivityLog *m_activityLog; Chris@891: UnitConverter *m_unitConverter; Chris@162: KeyReference *m_keyReference; Chris@162: Chris@426: QFileSystemWatcher *m_templateWatcher; Chris@426: Chris@662: Surveyer *m_surveyer; Chris@573: VersionTester *m_versionTester; Chris@1516: QString m_newerVersionIs; Chris@573: Chris@232: struct LayerConfiguration { Chris@1770: LayerConfiguration(LayerFactory::LayerType _layer Chris@1770: = LayerFactory::TimeRuler, Chris@2300: ModelId _source = ModelId(), Chris@232: int _channel = -1) : Chris@1770: layer(_layer), sourceModel(_source), channel(_channel) { } Chris@1770: LayerFactory::LayerType layer; Chris@2300: ModelId sourceModel; Chris@1770: int channel; Chris@0: }; Chris@0: Chris@1794: QString shortcutFor(LayerFactory::LayerType, bool isPaneMenu); Chris@2300: void updateLayerShortcutsFor(ModelId); Chris@2093: Chris@2093: // Map from menu action to the resulting layer configurations Chris@2093: // etc. These all used to be std::maps, but we sometimes want to Chris@2093: // iterate through actions in order of creation, not in order of Chris@2093: // arbitrary QAction pointer. And speed of random lookup is not Chris@2093: // important. Chris@2093: // Chris@2093: // Some of these would still be fine as maps, but we might as well Chris@2093: // consistently use the same arrangement throughout. Chris@1794: Chris@2093: typedef std::vector> PaneActions; Chris@2093: PaneActions m_paneActions; Chris@0: Chris@2093: typedef std::vector> LayerActions; Chris@2093: LayerActions m_layerActions; Chris@232: Chris@2093: typedef std::vector> ExistingLayerActions; Chris@2093: ExistingLayerActions m_existingLayerActions; Chris@2093: ExistingLayerActions m_sliceActions; Chris@34: Chris@2093: typedef std::vector> ToolActions; Chris@2093: ToolActions m_toolActions; Chris@2093: Chris@2093: typedef std::vector> NumberingActions; Chris@2093: NumberingActions m_numberingActions; Chris@2093: Chris@2093: typedef std::vector> TransformActions; Chris@2093: TransformActions m_transformActions; Chris@2093: Chris@2093: // This one only makes sense as a map though Chris@211: typedef std::map TransformActionReverseMap; Chris@211: TransformActionReverseMap m_transformActionsReverse; Chris@0: Chris@1610: QString getReleaseText() const; Chris@1610: Chris@2125: void setupMenus() override; Chris@200: virtual void setupFileMenu(); Chris@200: virtual void setupEditMenu(); Chris@200: virtual void setupViewMenu(); Chris@200: virtual void setupPaneAndLayerMenus(); Chris@211: virtual void setupTransformsMenu(); Chris@200: virtual void setupHelpMenu(); Chris@200: virtual void setupExistingLayersMenus(); Chris@200: virtual void setupToolbars(); Chris@66: Chris@232: virtual void addPane(const LayerConfiguration &configuration, QString text); Chris@0: Chris@2125: void closeEvent(QCloseEvent *e) override; Chris@2125: bool checkSaveModified() override; Chris@265: Chris@631: virtual void exportAudio(bool asData); Chris@631: Chris@2125: void updateVisibleRangeDisplay(Pane *p) const override; Chris@2125: void updatePositionStatusDisplays() const override; Chris@290: Chris@2125: bool shouldCreateNewSessionForRDFAudio(bool *cancel) override; Chris@200: Chris@2125: void connectLayerEditDialog(ModelDataTableDialog *) override; Chris@0: }; Chris@0: Chris@0: Chris@0: #endif