annotate main/MainWindow.h @ 490:bc04d651f8a4

Ensure all windows are closed when the main one is (thus exiting the application even if some other windows were still open)
author Chris Cannam
date Thu, 19 Jan 2012 15:36:59 +0000
parents 6d827453657f
children d2a58dfc3ae5
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@249 30 #include "transform/Transform.h"
Chris@204 31 #include "framework/SVFileReader.h"
Chris@322 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@302 60 class ActivityLog;
Chris@426 61 class QFileSystemWatcher;
Chris@0 62
Chris@200 63 class MainWindow : public MainWindowBase
Chris@0 64 {
Chris@0 65 Q_OBJECT
Chris@0 66
Chris@0 67 public:
Chris@70 68 MainWindow(bool withAudioOutput = true,
Chris@70 69 bool withOSCSupport = true);
Chris@0 70 virtual ~MainWindow();
Chris@0 71
Chris@0 72 signals:
Chris@376 73 void canChangeSolo(bool);
Chris@376 74 void canAlign(bool);
Chris@0 75
Chris@118 76 public slots:
Chris@200 77 virtual void preferenceChanged(PropertyContainer::PropertyName);
Chris@200 78 virtual bool commitData(bool mayAskUser);
Chris@118 79
Chris@0 80 protected slots:
Chris@200 81 virtual void openSession();
Chris@200 82 virtual void importAudio();
Chris@200 83 virtual void importMoreAudio();
Chris@200 84 virtual void openSomething();
Chris@200 85 virtual void openLocation();
Chris@200 86 virtual void openRecentFile();
Chris@435 87 virtual void applyTemplate();
Chris@200 88 virtual void exportAudio();
Chris@200 89 virtual void importLayer();
Chris@200 90 virtual void exportLayer();
Chris@200 91 virtual void exportImage();
Chris@200 92 virtual void saveSession();
Chris@200 93 virtual void saveSessionAs();
Chris@200 94 virtual void newSession();
Chris@200 95 virtual void closeSession();
Chris@200 96 virtual void preferences();
Chris@0 97
Chris@200 98 virtual void sampleRateMismatch(size_t, size_t, bool);
Chris@200 99 virtual void audioOverloadPluginDisabled();
Chris@266 100 virtual void audioTimeStretchMultiChannelDisabled();
Chris@0 101
Chris@200 102 virtual void toolNavigateSelected();
Chris@200 103 virtual void toolSelectSelected();
Chris@200 104 virtual void toolEditSelected();
Chris@200 105 virtual void toolDrawSelected();
Chris@217 106 virtual void toolEraseSelected();
Chris@200 107 virtual void toolMeasureSelected();
Chris@7 108
Chris@200 109 virtual void documentModified();
Chris@200 110 virtual void documentRestored();
Chris@303 111 virtual void documentReplaced();
Chris@0 112
Chris@200 113 virtual void updateMenuStates();
Chris@200 114 virtual void updateDescriptionLabel();
Chris@0 115
Chris@200 116 virtual void setInstantsNumbering();
Chris@200 117 virtual void setInstantsCounterCycle();
Chris@200 118 virtual void resetInstantsCounters();
Chris@0 119
Chris@233 120 virtual void modelGenerationFailed(QString, QString);
Chris@233 121 virtual void modelGenerationWarning(QString, QString);
Chris@233 122 virtual void modelRegenerationFailed(QString, QString, QString);
Chris@233 123 virtual void modelRegenerationWarning(QString, QString, QString);
Chris@233 124 virtual void alignmentFailed(QString, QString);
Chris@0 125
Chris@200 126 virtual void rightButtonMenuRequested(Pane *, QPoint point);
Chris@0 127
Chris@239 128 virtual void propertyStacksResized(int);
Chris@239 129
Chris@200 130 virtual void addPane();
Chris@200 131 virtual void addLayer();
Chris@274 132 virtual void addLayer(QString transformId);
Chris@200 133 virtual void renameCurrentLayer();
Chris@0 134
Chris@272 135 virtual void findTransform();
Chris@272 136
Chris@200 137 virtual void paneAdded(Pane *);
Chris@200 138 virtual void paneHidden(Pane *);
Chris@200 139 virtual void paneAboutToBeDeleted(Pane *);
Chris@200 140 virtual void paneDropAccepted(Pane *, QStringList);
Chris@200 141 virtual void paneDropAccepted(Pane *, QString);
Chris@0 142
Chris@200 143 virtual void setupRecentFilesMenu();
Chris@211 144 virtual void setupRecentTransformsMenu();
Chris@423 145 virtual void setupTemplatesMenu();
Chris@0 146
Chris@200 147 virtual void playSpeedChanged(int);
Chris@207 148 virtual void playSoloToggled();
Chris@206 149 virtual void alignToggled();
Chris@0 150
Chris@227 151 virtual void currentPaneChanged(Pane *);
Chris@227 152
Chris@200 153 virtual void speedUpPlayback();
Chris@200 154 virtual void slowDownPlayback();
Chris@200 155 virtual void restoreNormalPlayback();
Chris@0 156
Chris@200 157 virtual void outputLevelsChanged(float, float);
Chris@0 158
Chris@200 159 virtual void layerRemoved(Layer *);
Chris@200 160 virtual void layerInAView(Layer *, bool);
Chris@0 161
Chris@200 162 virtual void mainModelChanged(WaveFileModel *);
Chris@200 163 virtual void modelAdded(Model *);
Chris@0 164
Chris@200 165 virtual void showLayerTree();
Chris@306 166 virtual void showActivityLog();
Chris@0 167
Chris@200 168 virtual void mouseEnteredWidget();
Chris@200 169 virtual void mouseLeftWidget();
Chris@73 170
Chris@200 171 virtual void handleOSCMessage(const OSCMessage &);
Chris@304 172 virtual void midiEventsAvailable();
Chris@305 173 virtual void playStatusChanged(bool);
Chris@193 174
Chris@425 175 virtual void saveSessionAsTemplate();
Chris@425 176 virtual void manageSavedTemplates();
Chris@425 177
Chris@200 178 virtual void website();
Chris@200 179 virtual void help();
Chris@200 180 virtual void about();
Chris@200 181 virtual void keyReference();
Chris@333 182 virtual void newerVersionAvailable(QString);
Chris@0 183
Chris@0 184 protected:
Chris@65 185 Overview *m_overview;
Chris@0 186 Fader *m_fader;
Chris@0 187 AudioDial *m_playSpeed;
Chris@0 188 WaveformLayer *m_panLayer;
Chris@34 189
Chris@0 190 bool m_mainMenusCreated;
Chris@0 191 QMenu *m_paneMenu;
Chris@0 192 QMenu *m_layerMenu;
Chris@34 193 QMenu *m_transformsMenu;
Chris@155 194 QMenu *m_playbackMenu;
Chris@0 195 QMenu *m_existingLayersMenu;
Chris@95 196 QMenu *m_sliceMenu;
Chris@0 197 QMenu *m_recentFilesMenu;
Chris@211 198 QMenu *m_recentTransformsMenu;
Chris@423 199 QMenu *m_templatesMenu;
Chris@0 200 QMenu *m_rightButtonMenu;
Chris@0 201 QMenu *m_rightButtonLayerMenu;
Chris@211 202 QMenu *m_rightButtonTransformsMenu;
Chris@155 203 QMenu *m_rightButtonPlaybackMenu;
Chris@155 204
Chris@164 205 QAction *m_deleteSelectedAction;
Chris@207 206 QAction *m_soloAction;
Chris@265 207 QAction *m_rwdStartAction;
Chris@323 208 QAction *m_rwdSimilarAction;
Chris@265 209 QAction *m_rwdAction;
Chris@155 210 QAction *m_ffwdAction;
Chris@323 211 QAction *m_ffwdSimilarAction;
Chris@265 212 QAction *m_ffwdEndAction;
Chris@265 213 QAction *m_playAction;
Chris@265 214 QAction *m_playSelectionAction;
Chris@265 215 QAction *m_playLoopAction;
Chris@436 216 QAction *m_manageTemplatesAction;
Chris@0 217
Chris@207 218 bool m_soloModified;
Chris@207 219 bool m_prevSolo;
Chris@207 220
Chris@490 221 bool m_exiting;
Chris@490 222
Chris@239 223 QFrame *m_playControlsSpacer;
Chris@239 224 int m_playControlsWidth;
Chris@239 225
Chris@340 226 QLabel *m_currentLabel;
Chris@340 227
Chris@0 228 QPointer<PreferencesDialog> m_preferencesDialog;
Chris@219 229 QPointer<LayerTreeDialog> m_layerTreeDialog;
Chris@0 230
Chris@302 231 ActivityLog *m_activityLog;
Chris@162 232 KeyReference *m_keyReference;
Chris@162 233
Chris@426 234 QFileSystemWatcher *m_templateWatcher;
Chris@426 235
Chris@232 236 struct LayerConfiguration {
Chris@232 237 LayerConfiguration(LayerFactory::LayerType _layer
Chris@0 238 = LayerFactory::TimeRuler,
Chris@232 239 Model *_source = 0,
Chris@232 240 int _channel = -1) :
Chris@66 241 layer(_layer), sourceModel(_source), channel(_channel) { }
Chris@0 242 LayerFactory::LayerType layer;
Chris@66 243 Model *sourceModel;
Chris@0 244 int channel;
Chris@0 245 };
Chris@0 246
Chris@232 247 typedef std::map<QAction *, LayerConfiguration> PaneActionMap;
Chris@0 248 PaneActionMap m_paneActions;
Chris@0 249
Chris@232 250 typedef std::map<QAction *, LayerConfiguration> LayerActionMap;
Chris@232 251 LayerActionMap m_layerActions;
Chris@232 252
Chris@211 253 typedef std::map<QAction *, TransformId> TransformActionMap;
Chris@211 254 TransformActionMap m_transformActions;
Chris@34 255
Chris@211 256 typedef std::map<TransformId, QAction *> TransformActionReverseMap;
Chris@211 257 TransformActionReverseMap m_transformActionsReverse;
Chris@0 258
Chris@0 259 typedef std::map<QAction *, Layer *> ExistingLayerActionMap;
Chris@0 260 ExistingLayerActionMap m_existingLayerActions;
Chris@95 261 ExistingLayerActionMap m_sliceActions;
Chris@0 262
Chris@0 263 typedef std::map<ViewManager::ToolMode, QAction *> ToolActionMap;
Chris@0 264 ToolActionMap m_toolActions;
Chris@0 265
Chris@189 266 typedef std::map<QAction *, int> NumberingActionMap;
Chris@189 267 NumberingActionMap m_numberingActions;
Chris@189 268
Chris@200 269 virtual void setupMenus();
Chris@200 270 virtual void setupFileMenu();
Chris@200 271 virtual void setupEditMenu();
Chris@200 272 virtual void setupViewMenu();
Chris@200 273 virtual void setupPaneAndLayerMenus();
Chris@211 274 virtual void setupTransformsMenu();
Chris@200 275 virtual void setupHelpMenu();
Chris@200 276 virtual void setupExistingLayersMenus();
Chris@200 277 virtual void setupToolbars();
Chris@66 278
Chris@232 279 virtual void addPane(const LayerConfiguration &configuration, QString text);
Chris@0 280
Chris@0 281 virtual void closeEvent(QCloseEvent *e);
Chris@200 282 virtual bool checkSaveModified();
Chris@265 283
Chris@265 284 virtual void updateVisibleRangeDisplay(Pane *p) const;
Chris@340 285 virtual void updatePositionStatusDisplays() const;
Chris@290 286
Chris@294 287 virtual bool shouldCreateNewSessionForRDFAudio(bool *cancel);
Chris@200 288
Chris@265 289 virtual void connectLayerEditDialog(ModelDataTableDialog *);
Chris@0 290 };
Chris@0 291
Chris@0 292
Chris@0 293 #endif