MainWindow.h

Go to the documentation of this file.
00001 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*-  vi:set ts=8 sts=4 sw=4: */
00002 
00003 /*
00004     Sonic Visualiser
00005     An audio file viewer and annotation editor.
00006     Centre for Digital Music, Queen Mary, University of London.
00007     This file copyright 2006-2007 Chris Cannam and QMUL.
00008     
00009     This program is free software; you can redistribute it and/or
00010     modify it under the terms of the GNU General Public License as
00011     published by the Free Software Foundation; either version 2 of the
00012     License, or (at your option) any later version.  See the file
00013     COPYING included with this distribution for more information.
00014 */
00015 
00016 #ifndef _MAIN_WINDOW_H_
00017 #define _MAIN_WINDOW_H_
00018 
00019 #include <QFrame>
00020 #include <QString>
00021 #include <QUrl>
00022 #include <QPointer>
00023 
00024 #include "framework/MainWindowBase.h"
00025 #include "base/Command.h"
00026 #include "view/ViewManager.h"
00027 #include "base/PropertyContainer.h"
00028 #include "base/RecentFiles.h"
00029 #include "layer/LayerFactory.h"
00030 #include "plugin/transform/Transform.h"
00031 #include "framework/SVFileReader.h"
00032 #include "data/fileio/FileFinder.h"
00033 #include "data/fileio/FileSource.h"
00034 #include "widgets/LayerTreeDialog.h"
00035 #include <map>
00036 
00037 class Document;
00038 class PaneStack;
00039 class Pane;
00040 class View;
00041 class Fader;
00042 class Overview;
00043 class Layer;
00044 class WaveformLayer;
00045 class WaveFileModel;
00046 class AudioCallbackPlaySource;
00047 class AudioCallbackPlayTarget;
00048 class CommandHistory;
00049 class QMenu;
00050 class AudioDial;
00051 class QLabel;
00052 class QCheckBox;
00053 class PreferencesDialog;
00054 class QTreeView;
00055 class QPushButton;
00056 class OSCQueue;
00057 class OSCMessage;
00058 class KeyReference;
00059 class Labeller;
00060 
00061 
00062 class MainWindow : public MainWindowBase
00063 {
00064     Q_OBJECT
00065 
00066 public:
00067     MainWindow(bool withAudioOutput = true,
00068                bool withOSCSupport = true);
00069     virtual ~MainWindow();
00070 
00071 signals:
00072     virtual void canChangeSolo(bool);
00073     virtual void canAlign(bool);
00074 
00075 public slots:
00076     virtual void preferenceChanged(PropertyContainer::PropertyName);
00077     virtual bool commitData(bool mayAskUser);
00078 
00079 protected slots:
00080     virtual void openSession();
00081     virtual void importAudio();
00082     virtual void importMoreAudio();
00083     virtual void openSomething();
00084     virtual void openLocation();
00085     virtual void openRecentFile();
00086     virtual void exportAudio();
00087     virtual void importLayer();
00088     virtual void exportLayer();
00089     virtual void exportImage();
00090     virtual void saveSession();
00091     virtual void saveSessionAs();
00092     virtual void newSession();
00093     virtual void closeSession();
00094     virtual void preferences();
00095 
00096     virtual void sampleRateMismatch(size_t, size_t, bool);
00097     virtual void audioOverloadPluginDisabled();
00098 
00099     virtual void toolNavigateSelected();
00100     virtual void toolSelectSelected();
00101     virtual void toolEditSelected();
00102     virtual void toolDrawSelected();
00103     virtual void toolEraseSelected();
00104     virtual void toolMeasureSelected();
00105 
00106     virtual void documentModified();
00107     virtual void documentRestored();
00108 
00109     virtual void updateMenuStates();
00110     virtual void updateDescriptionLabel();
00111 
00112     virtual void setInstantsNumbering();
00113     virtual void setInstantsCounterCycle();
00114     virtual void resetInstantsCounters();
00115 
00116     virtual void modelGenerationFailed(QString, QString);
00117     virtual void modelGenerationWarning(QString, QString);
00118     virtual void modelRegenerationFailed(QString, QString, QString);
00119     virtual void modelRegenerationWarning(QString, QString, QString);
00120     virtual void alignmentFailed(QString, QString);
00121 
00122     virtual void rightButtonMenuRequested(Pane *, QPoint point);
00123 
00124     virtual void propertyStacksResized(int);
00125 
00126     virtual void addPane();
00127     virtual void addLayer();
00128     virtual void renameCurrentLayer();
00129 
00130     virtual void paneAdded(Pane *);
00131     virtual void paneHidden(Pane *);
00132     virtual void paneAboutToBeDeleted(Pane *);
00133     virtual void paneDropAccepted(Pane *, QStringList);
00134     virtual void paneDropAccepted(Pane *, QString);
00135 
00136     virtual void setupRecentFilesMenu();
00137     virtual void setupRecentTransformsMenu();
00138 
00139     virtual void playSpeedChanged(int);
00140     virtual void playSoloToggled();
00141     virtual void alignToggled();
00142 
00143     virtual void currentPaneChanged(Pane *);
00144 
00145     virtual void speedUpPlayback();
00146     virtual void slowDownPlayback();
00147     virtual void restoreNormalPlayback();
00148 
00149     virtual void outputLevelsChanged(float, float);
00150 
00151     virtual void layerRemoved(Layer *);
00152     virtual void layerInAView(Layer *, bool);
00153 
00154     virtual void mainModelChanged(WaveFileModel *);
00155     virtual void modelAdded(Model *);
00156 
00157     virtual void showLayerTree();
00158 
00159     virtual void mouseEnteredWidget();
00160     virtual void mouseLeftWidget();
00161 
00162     virtual void handleOSCMessage(const OSCMessage &);
00163 
00164     virtual void website();
00165     virtual void help();
00166     virtual void about();
00167     virtual void keyReference();
00168 
00169 protected:
00170     Overview                *m_overview;
00171     Fader                   *m_fader;
00172     AudioDial               *m_playSpeed;
00173     WaveformLayer           *m_panLayer;
00174 
00175     bool                     m_mainMenusCreated;
00176     QMenu                   *m_paneMenu;
00177     QMenu                   *m_layerMenu;
00178     QMenu                   *m_transformsMenu;
00179     QMenu                   *m_playbackMenu;
00180     QMenu                   *m_existingLayersMenu;
00181     QMenu                   *m_sliceMenu;
00182     QMenu                   *m_recentFilesMenu;
00183     QMenu                   *m_recentTransformsMenu;
00184     QMenu                   *m_rightButtonMenu;
00185     QMenu                   *m_rightButtonLayerMenu;
00186     QMenu                   *m_rightButtonTransformsMenu;
00187     QMenu                   *m_rightButtonPlaybackMenu;
00188 
00189     QAction                 *m_deleteSelectedAction;
00190     QAction                 *m_soloAction;
00191     QAction                 *m_ffwdAction;
00192     QAction                 *m_rwdAction;
00193 
00194     bool                     m_soloModified;
00195     bool                     m_prevSolo;
00196 
00197     QFrame                  *m_playControlsSpacer;
00198     int                      m_playControlsWidth;
00199 
00200     QPointer<PreferencesDialog> m_preferencesDialog;
00201     QPointer<LayerTreeDialog>   m_layerTreeDialog;
00202 
00203     KeyReference            *m_keyReference;
00204 
00205     struct LayerConfiguration {
00206         LayerConfiguration(LayerFactory::LayerType _layer
00207                                                = LayerFactory::TimeRuler,
00208                            Model *_source = 0,
00209                            int _channel = -1) :
00210             layer(_layer), sourceModel(_source), channel(_channel) { }
00211         LayerFactory::LayerType layer;
00212         Model *sourceModel;
00213         int channel;
00214     };
00215 
00216     typedef std::map<QAction *, LayerConfiguration> PaneActionMap;
00217     PaneActionMap m_paneActions;
00218 
00219     typedef std::map<QAction *, LayerConfiguration> LayerActionMap;
00220     LayerActionMap m_layerActions;
00221 
00222     typedef std::map<QAction *, TransformId> TransformActionMap;
00223     TransformActionMap m_transformActions;
00224 
00225     typedef std::map<TransformId, QAction *> TransformActionReverseMap;
00226     TransformActionReverseMap m_transformActionsReverse;
00227 
00228     typedef std::map<QAction *, Layer *> ExistingLayerActionMap;
00229     ExistingLayerActionMap m_existingLayerActions;
00230     ExistingLayerActionMap m_sliceActions;
00231 
00232     typedef std::map<ViewManager::ToolMode, QAction *> ToolActionMap;
00233     ToolActionMap m_toolActions;
00234 
00235     typedef std::map<QAction *, int> NumberingActionMap;
00236     NumberingActionMap m_numberingActions;
00237 
00238     virtual void setupMenus();
00239     virtual void setupFileMenu();
00240     virtual void setupEditMenu();
00241     virtual void setupViewMenu();
00242     virtual void setupPaneAndLayerMenus();
00243     virtual void setupTransformsMenu();
00244     virtual void setupHelpMenu();
00245     virtual void setupExistingLayersMenus();
00246     virtual void setupToolbars();
00247 
00248     virtual void addPane(const LayerConfiguration &configuration, QString text);
00249 
00250     virtual void closeEvent(QCloseEvent *e);
00251     virtual bool checkSaveModified();
00252     
00253     virtual void updateVisibleRangeDisplay(Pane *p) const;
00254 };
00255 
00256 
00257 #endif

Generated on Wed Feb 20 15:45:26 2008 for SonicVisualiser by  doxygen 1.5.1