annotate main/MainWindow.h @ 250:e9f80e5d615f

* More work to abstract out interactive components used in the data library, so that it does not need to depend on QtGui.
author Chris Cannam
date Fri, 14 Mar 2008 17:14:21 +0000
parents 9d772bee2095
children a31c65904a49
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@250 32 #include "widgets/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@233 116 virtual void modelGenerationFailed(QString, QString);
Chris@233 117 virtual void modelGenerationWarning(QString, QString);
Chris@233 118 virtual void modelRegenerationFailed(QString, QString, QString);
Chris@233 119 virtual void modelRegenerationWarning(QString, QString, QString);
Chris@233 120 virtual void alignmentFailed(QString, QString);
Chris@0 121
Chris@200 122 virtual void rightButtonMenuRequested(Pane *, QPoint point);
Chris@0 123
Chris@239 124 virtual void propertyStacksResized(int);
Chris@239 125
Chris@200 126 virtual void addPane();
Chris@200 127 virtual void addLayer();
Chris@200 128 virtual void renameCurrentLayer();
Chris@0 129
Chris@200 130 virtual void paneAdded(Pane *);
Chris@200 131 virtual void paneHidden(Pane *);
Chris@200 132 virtual void paneAboutToBeDeleted(Pane *);
Chris@200 133 virtual void paneDropAccepted(Pane *, QStringList);
Chris@200 134 virtual void paneDropAccepted(Pane *, QString);
Chris@0 135
Chris@200 136 virtual void setupRecentFilesMenu();
Chris@211 137 virtual void setupRecentTransformsMenu();
Chris@0 138
Chris@200 139 virtual void playSpeedChanged(int);
Chris@207 140 virtual void playSoloToggled();
Chris@206 141 virtual void alignToggled();
Chris@0 142
Chris@227 143 virtual void currentPaneChanged(Pane *);
Chris@227 144
Chris@200 145 virtual void speedUpPlayback();
Chris@200 146 virtual void slowDownPlayback();
Chris@200 147 virtual void restoreNormalPlayback();
Chris@0 148
Chris@200 149 virtual void outputLevelsChanged(float, float);
Chris@0 150
Chris@200 151 virtual void layerRemoved(Layer *);
Chris@200 152 virtual void layerInAView(Layer *, bool);
Chris@0 153
Chris@200 154 virtual void mainModelChanged(WaveFileModel *);
Chris@200 155 virtual void modelAdded(Model *);
Chris@0 156
Chris@200 157 virtual void showLayerTree();
Chris@0 158
Chris@200 159 virtual void mouseEnteredWidget();
Chris@200 160 virtual void mouseLeftWidget();
Chris@73 161
Chris@200 162 virtual void handleOSCMessage(const OSCMessage &);
Chris@193 163
Chris@200 164 virtual void website();
Chris@200 165 virtual void help();
Chris@200 166 virtual void about();
Chris@200 167 virtual void keyReference();
Chris@0 168
Chris@0 169 protected:
Chris@65 170 Overview *m_overview;
Chris@0 171 Fader *m_fader;
Chris@0 172 AudioDial *m_playSpeed;
Chris@0 173 WaveformLayer *m_panLayer;
Chris@34 174
Chris@0 175 bool m_mainMenusCreated;
Chris@0 176 QMenu *m_paneMenu;
Chris@0 177 QMenu *m_layerMenu;
Chris@34 178 QMenu *m_transformsMenu;
Chris@155 179 QMenu *m_playbackMenu;
Chris@0 180 QMenu *m_existingLayersMenu;
Chris@95 181 QMenu *m_sliceMenu;
Chris@0 182 QMenu *m_recentFilesMenu;
Chris@211 183 QMenu *m_recentTransformsMenu;
Chris@0 184 QMenu *m_rightButtonMenu;
Chris@0 185 QMenu *m_rightButtonLayerMenu;
Chris@211 186 QMenu *m_rightButtonTransformsMenu;
Chris@155 187 QMenu *m_rightButtonPlaybackMenu;
Chris@155 188
Chris@164 189 QAction *m_deleteSelectedAction;
Chris@207 190 QAction *m_soloAction;
Chris@155 191 QAction *m_ffwdAction;
Chris@155 192 QAction *m_rwdAction;
Chris@0 193
Chris@207 194 bool m_soloModified;
Chris@207 195 bool m_prevSolo;
Chris@207 196
Chris@239 197 QFrame *m_playControlsSpacer;
Chris@239 198 int m_playControlsWidth;
Chris@239 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