annotate main/MainWindow.h @ 232:99e0dfd3ea75

* Various fixes to object lifetime management, particularly in the spectrum layer and for notification of main model deletion. The main purpose of this is to improve the behaviour of the spectrum, but I think it may also help with #1840922 Various crashes in Layer Summary window.
author Chris Cannam
date Wed, 23 Jan 2008 15:43:27 +0000
parents 718aaac046e7
children 5544593dd850
rev   line source
Chris@0 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@0 2
Chris@0 3 /*
Chris@0 4 Sonic Visualiser
Chris@0 5 An audio file viewer and annotation editor.
Chris@0 6 Centre for Digital Music, Queen Mary, University of London.
Chris@200 7 This file copyright 2006-2007 Chris Cannam and QMUL.
Chris@0 8
Chris@0 9 This program is free software; you can redistribute it and/or
Chris@0 10 modify it under the terms of the GNU General Public License as
Chris@0 11 published by the Free Software Foundation; either version 2 of the
Chris@0 12 License, or (at your option) any later version. See the file
Chris@0 13 COPYING included with this distribution for more information.
Chris@0 14 */
Chris@0 15
Chris@0 16 #ifndef _MAIN_WINDOW_H_
Chris@0 17 #define _MAIN_WINDOW_H_
Chris@0 18
Chris@0 19 #include <QFrame>
Chris@0 20 #include <QString>
Chris@85 21 #include <QUrl>
Chris@0 22 #include <QPointer>
Chris@0 23
Chris@204 24 #include "framework/MainWindowBase.h"
Chris@0 25 #include "base/Command.h"
Chris@1 26 #include "view/ViewManager.h"
Chris@0 27 #include "base/PropertyContainer.h"
Chris@34 28 #include "base/RecentFiles.h"
Chris@0 29 #include "layer/LayerFactory.h"
Chris@211 30 #include "plugin/transform/Transform.h"
Chris@204 31 #include "framework/SVFileReader.h"
Chris@88 32 #include "data/fileio/FileFinder.h"
Chris@198 33 #include "data/fileio/FileSource.h"
Chris@219 34 #include "widgets/LayerTreeDialog.h"
Chris@0 35 #include <map>
Chris@0 36
Chris@0 37 class Document;
Chris@0 38 class PaneStack;
Chris@0 39 class Pane;
Chris@0 40 class View;
Chris@0 41 class Fader;
Chris@65 42 class Overview;
Chris@0 43 class Layer;
Chris@0 44 class WaveformLayer;
Chris@0 45 class WaveFileModel;
Chris@0 46 class AudioCallbackPlaySource;
Chris@0 47 class AudioCallbackPlayTarget;
Chris@0 48 class CommandHistory;
Chris@0 49 class QMenu;
Chris@0 50 class AudioDial;
Chris@0 51 class QLabel;
Chris@16 52 class QCheckBox;
Chris@0 53 class PreferencesDialog;
Chris@177 54 class QTreeView;
Chris@26 55 class QPushButton;
Chris@69 56 class OSCQueue;
Chris@69 57 class OSCMessage;
Chris@162 58 class KeyReference;
Chris@189 59 class Labeller;
Chris@0 60
Chris@0 61
Chris@200 62 class MainWindow : public MainWindowBase
Chris@0 63 {
Chris@0 64 Q_OBJECT
Chris@0 65
Chris@0 66 public:
Chris@70 67 MainWindow(bool withAudioOutput = true,
Chris@70 68 bool withOSCSupport = true);
Chris@0 69 virtual ~MainWindow();
Chris@0 70
Chris@0 71 signals:
Chris@207 72 virtual void canChangeSolo(bool);
Chris@206 73 virtual void canAlign(bool);
Chris@0 74
Chris@118 75 public slots:
Chris@200 76 virtual void preferenceChanged(PropertyContainer::PropertyName);
Chris@200 77 virtual bool commitData(bool mayAskUser);
Chris@118 78
Chris@0 79 protected slots:
Chris@200 80 virtual void openSession();
Chris@200 81 virtual void importAudio();
Chris@200 82 virtual void importMoreAudio();
Chris@200 83 virtual void openSomething();
Chris@200 84 virtual void openLocation();
Chris@200 85 virtual void openRecentFile();
Chris@200 86 virtual void exportAudio();
Chris@200 87 virtual void importLayer();
Chris@200 88 virtual void exportLayer();
Chris@200 89 virtual void exportImage();
Chris@200 90 virtual void saveSession();
Chris@200 91 virtual void saveSessionAs();
Chris@200 92 virtual void newSession();
Chris@200 93 virtual void closeSession();
Chris@200 94 virtual void preferences();
Chris@0 95
Chris@200 96 virtual void sampleRateMismatch(size_t, size_t, bool);
Chris@200 97 virtual void audioOverloadPluginDisabled();
Chris@0 98
Chris@200 99 virtual void toolNavigateSelected();
Chris@200 100 virtual void toolSelectSelected();
Chris@200 101 virtual void toolEditSelected();
Chris@200 102 virtual void toolDrawSelected();
Chris@217 103 virtual void toolEraseSelected();
Chris@200 104 virtual void toolMeasureSelected();
Chris@7 105
Chris@200 106 virtual void documentModified();
Chris@200 107 virtual void documentRestored();
Chris@0 108
Chris@200 109 virtual void updateMenuStates();
Chris@200 110 virtual void updateDescriptionLabel();
Chris@0 111
Chris@200 112 virtual void setInstantsNumbering();
Chris@200 113 virtual void setInstantsCounterCycle();
Chris@200 114 virtual void resetInstantsCounters();
Chris@0 115
Chris@200 116 virtual void modelGenerationFailed(QString);
Chris@200 117 virtual void modelRegenerationFailed(QString, QString);
Chris@0 118
Chris@200 119 virtual void rightButtonMenuRequested(Pane *, QPoint point);
Chris@0 120
Chris@200 121 virtual void addPane();
Chris@200 122 virtual void addLayer();
Chris@200 123 virtual void renameCurrentLayer();
Chris@0 124
Chris@200 125 virtual void paneAdded(Pane *);
Chris@200 126 virtual void paneHidden(Pane *);
Chris@200 127 virtual void paneAboutToBeDeleted(Pane *);
Chris@200 128 virtual void paneDropAccepted(Pane *, QStringList);
Chris@200 129 virtual void paneDropAccepted(Pane *, QString);
Chris@0 130
Chris@200 131 virtual void setupRecentFilesMenu();
Chris@211 132 virtual void setupRecentTransformsMenu();
Chris@0 133
Chris@200 134 virtual void playSpeedChanged(int);
Chris@220 135 #ifndef HAVE_RUBBERBAND
Chris@200 136 virtual void playSharpenToggled();
Chris@200 137 virtual void playMonoToggled();
Chris@218 138 #endif
Chris@207 139 virtual void playSoloToggled();
Chris@206 140 virtual void alignToggled();
Chris@0 141
Chris@227 142 virtual void currentPaneChanged(Pane *);
Chris@227 143
Chris@200 144 virtual void speedUpPlayback();
Chris@200 145 virtual void slowDownPlayback();
Chris@200 146 virtual void restoreNormalPlayback();
Chris@0 147
Chris@200 148 virtual void outputLevelsChanged(float, float);
Chris@0 149
Chris@200 150 virtual void layerRemoved(Layer *);
Chris@200 151 virtual void layerInAView(Layer *, bool);
Chris@0 152
Chris@200 153 virtual void mainModelChanged(WaveFileModel *);
Chris@200 154 virtual void modelAdded(Model *);
Chris@0 155
Chris@200 156 virtual void showLayerTree();
Chris@0 157
Chris@200 158 virtual void mouseEnteredWidget();
Chris@200 159 virtual void mouseLeftWidget();
Chris@73 160
Chris@200 161 virtual void handleOSCMessage(const OSCMessage &);
Chris@193 162
Chris@200 163 virtual void website();
Chris@200 164 virtual void help();
Chris@200 165 virtual void about();
Chris@200 166 virtual void keyReference();
Chris@0 167
Chris@0 168 protected:
Chris@65 169 Overview *m_overview;
Chris@0 170 Fader *m_fader;
Chris@0 171 AudioDial *m_playSpeed;
Chris@220 172 #ifndef HAVE_RUBBERBAND
Chris@26 173 QPushButton *m_playSharpen;
Chris@26 174 QPushButton *m_playMono;
Chris@218 175 #endif
Chris@0 176 WaveformLayer *m_panLayer;
Chris@34 177
Chris@0 178 bool m_mainMenusCreated;
Chris@0 179 QMenu *m_paneMenu;
Chris@0 180 QMenu *m_layerMenu;
Chris@34 181 QMenu *m_transformsMenu;
Chris@155 182 QMenu *m_playbackMenu;
Chris@0 183 QMenu *m_existingLayersMenu;
Chris@95 184 QMenu *m_sliceMenu;
Chris@0 185 QMenu *m_recentFilesMenu;
Chris@211 186 QMenu *m_recentTransformsMenu;
Chris@0 187 QMenu *m_rightButtonMenu;
Chris@0 188 QMenu *m_rightButtonLayerMenu;
Chris@211 189 QMenu *m_rightButtonTransformsMenu;
Chris@155 190 QMenu *m_rightButtonPlaybackMenu;
Chris@155 191
Chris@164 192 QAction *m_deleteSelectedAction;
Chris@207 193 QAction *m_soloAction;
Chris@155 194 QAction *m_ffwdAction;
Chris@155 195 QAction *m_rwdAction;
Chris@0 196
Chris@207 197 bool m_soloModified;
Chris@207 198 bool m_prevSolo;
Chris@207 199
Chris@0 200 QPointer<PreferencesDialog> m_preferencesDialog;
Chris@219 201 QPointer<LayerTreeDialog> m_layerTreeDialog;
Chris@0 202
Chris@162 203 KeyReference *m_keyReference;
Chris@162 204
Chris@232 205 struct LayerConfiguration {
Chris@232 206 LayerConfiguration(LayerFactory::LayerType _layer
Chris@0 207 = LayerFactory::TimeRuler,
Chris@232 208 Model *_source = 0,
Chris@232 209 int _channel = -1) :
Chris@66 210 layer(_layer), sourceModel(_source), channel(_channel) { }
Chris@0 211 LayerFactory::LayerType layer;
Chris@66 212 Model *sourceModel;
Chris@0 213 int channel;
Chris@0 214 };
Chris@0 215
Chris@232 216 typedef std::map<QAction *, LayerConfiguration> PaneActionMap;
Chris@0 217 PaneActionMap m_paneActions;
Chris@0 218
Chris@232 219 typedef std::map<QAction *, LayerConfiguration> LayerActionMap;
Chris@232 220 LayerActionMap m_layerActions;
Chris@232 221
Chris@211 222 typedef std::map<QAction *, TransformId> TransformActionMap;
Chris@211 223 TransformActionMap m_transformActions;
Chris@34 224
Chris@211 225 typedef std::map<TransformId, QAction *> TransformActionReverseMap;
Chris@211 226 TransformActionReverseMap m_transformActionsReverse;
Chris@0 227
Chris@0 228 typedef std::map<QAction *, Layer *> ExistingLayerActionMap;
Chris@0 229 ExistingLayerActionMap m_existingLayerActions;
Chris@95 230 ExistingLayerActionMap m_sliceActions;
Chris@0 231
Chris@0 232 typedef std::map<ViewManager::ToolMode, QAction *> ToolActionMap;
Chris@0 233 ToolActionMap m_toolActions;
Chris@0 234
Chris@189 235 typedef std::map<QAction *, int> NumberingActionMap;
Chris@189 236 NumberingActionMap m_numberingActions;
Chris@189 237
Chris@200 238 virtual void setupMenus();
Chris@200 239 virtual void setupFileMenu();
Chris@200 240 virtual void setupEditMenu();
Chris@200 241 virtual void setupViewMenu();
Chris@200 242 virtual void setupPaneAndLayerMenus();
Chris@211 243 virtual void setupTransformsMenu();
Chris@200 244 virtual void setupHelpMenu();
Chris@200 245 virtual void setupExistingLayersMenus();
Chris@200 246 virtual void setupToolbars();
Chris@66 247
Chris@232 248 virtual void addPane(const LayerConfiguration &configuration, QString text);
Chris@0 249
Chris@0 250 virtual void closeEvent(QCloseEvent *e);
Chris@200 251 virtual bool checkSaveModified();
Chris@200 252
Chris@200 253 virtual void updateVisibleRangeDisplay(Pane *p) const;
Chris@0 254 };
Chris@0 255
Chris@0 256
Chris@0 257 #endif