00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #ifndef _MAIN_WINDOW_BASE_H_
00017 #define _MAIN_WINDOW_BASE_H_
00018
00019 #include <QFrame>
00020 #include <QString>
00021 #include <QUrl>
00022 #include <QMainWindow>
00023 #include <QPointer>
00024
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 "SVFileReader.h"
00032 #include "data/fileio/FileFinder.h"
00033 #include "data/fileio/FileSource.h"
00034 #include <map>
00035
00036 class Document;
00037 class PaneStack;
00038 class Pane;
00039 class View;
00040 class Fader;
00041 class Overview;
00042 class Layer;
00043 class WaveformLayer;
00044 class WaveFileModel;
00045 class AudioCallbackPlaySource;
00046 class AudioCallbackPlayTarget;
00047 class CommandHistory;
00048 class QMenu;
00049 class AudioDial;
00050 class QLabel;
00051 class QCheckBox;
00052 class PreferencesDialog;
00053 class QTreeView;
00054 class QPushButton;
00055 class OSCQueue;
00056 class OSCMessage;
00057 class KeyReference;
00058 class Labeller;
00059
00069 class MainWindowBase : public QMainWindow
00070 {
00071 Q_OBJECT
00072
00073 public:
00074 MainWindowBase(bool withAudioOutput, bool withOSCSupport);
00075 virtual ~MainWindowBase();
00076
00077 enum AudioFileOpenMode {
00078 ReplaceMainModel,
00079 CreateAdditionalModel,
00080 ReplaceCurrentPane,
00081 AskUser
00082 };
00083
00084 enum FileOpenStatus {
00085 FileOpenSucceeded,
00086 FileOpenFailed,
00087 FileOpenCancelled,
00088 FileOpenWrongMode
00089 };
00090
00091 virtual FileOpenStatus open(QString fileOrUrl, AudioFileOpenMode = AskUser);
00092 virtual FileOpenStatus open(FileSource source, AudioFileOpenMode = AskUser);
00093
00094 virtual FileOpenStatus openAudio(FileSource source, AudioFileOpenMode = AskUser);
00095 virtual FileOpenStatus openPlaylist(FileSource source, AudioFileOpenMode = AskUser);
00096 virtual FileOpenStatus openLayer(FileSource source);
00097 virtual FileOpenStatus openImage(FileSource source);
00098
00099 virtual FileOpenStatus openSessionFile(QString fileOrUrl);
00100 virtual FileOpenStatus openSession(FileSource source);
00101
00102 virtual bool saveSessionFile(QString path);
00103
00104 signals:
00105
00106 void canAddPane(bool);
00107 void canDeleteCurrentPane(bool);
00108 void canAddLayer(bool);
00109 void canImportMoreAudio(bool);
00110 void canImportLayer(bool);
00111 void canExportAudio(bool);
00112 void canExportLayer(bool);
00113 void canExportImage(bool);
00114 void canRenameLayer(bool);
00115 void canEditLayer(bool);
00116 void canMeasureLayer(bool);
00117 void canSelect(bool);
00118 void canClearSelection(bool);
00119 void canEditSelection(bool);
00120 void canDeleteSelection(bool);
00121 void canPaste(bool);
00122 void canInsertInstant(bool);
00123 void canInsertInstantsAtBoundaries(bool);
00124 void canRenumberInstants(bool);
00125 void canDeleteCurrentLayer(bool);
00126 void canZoom(bool);
00127 void canScroll(bool);
00128 void canPlay(bool);
00129 void canFfwd(bool);
00130 void canRewind(bool);
00131 void canPlaySelection(bool);
00132 void canSpeedUpPlayback(bool);
00133 void canSlowDownPlayback(bool);
00134 void canChangePlaybackSpeed(bool);
00135 void canSelectPreviousPane(bool);
00136 void canSelectNextPane(bool);
00137 void canSelectPreviousLayer(bool);
00138 void canSelectNextLayer(bool);
00139 void canSave(bool);
00140
00141 public slots:
00142 virtual void preferenceChanged(PropertyContainer::PropertyName);
00143
00144 protected slots:
00145 virtual void zoomIn();
00146 virtual void zoomOut();
00147 virtual void zoomToFit();
00148 virtual void zoomDefault();
00149 virtual void scrollLeft();
00150 virtual void scrollRight();
00151 virtual void jumpLeft();
00152 virtual void jumpRight();
00153
00154 virtual void showNoOverlays();
00155 virtual void showMinimalOverlays();
00156 virtual void showStandardOverlays();
00157 virtual void showAllOverlays();
00158
00159 virtual void toggleZoomWheels();
00160 virtual void togglePropertyBoxes();
00161 virtual void toggleStatusBar();
00162
00163 virtual void play();
00164 virtual void ffwd();
00165 virtual void ffwdEnd();
00166 virtual void rewind();
00167 virtual void rewindStart();
00168 virtual void stop();
00169
00170 virtual void deleteCurrentPane();
00171 virtual void deleteCurrentLayer();
00172
00173 virtual void previousPane();
00174 virtual void nextPane();
00175 virtual void previousLayer();
00176 virtual void nextLayer();
00177
00178 virtual void playLoopToggled();
00179 virtual void playSelectionToggled();
00180 virtual void playSoloToggled();
00181
00182 virtual void sampleRateMismatch(size_t, size_t, bool) = 0;
00183 virtual void audioOverloadPluginDisabled() = 0;
00184
00185 virtual void playbackFrameChanged(unsigned long);
00186 virtual void globalCentreFrameChanged(unsigned long);
00187 virtual void viewCentreFrameChanged(View *, unsigned long);
00188 virtual void viewZoomLevelChanged(View *, unsigned long, bool);
00189 virtual void outputLevelsChanged(float, float) = 0;
00190
00191 virtual void currentPaneChanged(Pane *);
00192 virtual void currentLayerChanged(Pane *, Layer *);
00193
00194 virtual void selectAll();
00195 virtual void selectToStart();
00196 virtual void selectToEnd();
00197 virtual void selectVisible();
00198 virtual void clearSelection();
00199
00200 virtual void cut();
00201 virtual void copy();
00202 virtual void paste();
00203 virtual void deleteSelected();
00204
00205 virtual void insertInstant();
00206 virtual void insertInstantAt(size_t);
00207 virtual void insertInstantsAtBoundaries();
00208 virtual void renumberInstants();
00209
00210 virtual void documentModified();
00211 virtual void documentRestored();
00212
00213 virtual void layerAdded(Layer *);
00214 virtual void layerRemoved(Layer *);
00215 virtual void layerAboutToBeDeleted(Layer *);
00216 virtual void layerInAView(Layer *, bool);
00217
00218 virtual void mainModelChanged(WaveFileModel *);
00219 virtual void modelAdded(Model *);
00220 virtual void modelAboutToBeDeleted(Model *);
00221
00222 virtual void updateMenuStates();
00223 virtual void updateDescriptionLabel() = 0;
00224
00225 virtual void modelGenerationFailed(QString, QString) = 0;
00226 virtual void modelGenerationWarning(QString, QString) = 0;
00227 virtual void modelRegenerationFailed(QString, QString, QString) = 0;
00228 virtual void modelRegenerationWarning(QString, QString, QString) = 0;
00229 virtual void alignmentFailed(QString, QString) = 0;
00230
00231 virtual void rightButtonMenuRequested(Pane *, QPoint point) = 0;
00232
00233 virtual void paneAdded(Pane *) = 0;
00234 virtual void paneHidden(Pane *) = 0;
00235 virtual void paneAboutToBeDeleted(Pane *) = 0;
00236 virtual void paneDropAccepted(Pane *, QStringList) = 0;
00237 virtual void paneDropAccepted(Pane *, QString) = 0;
00238 virtual void paneDeleteButtonClicked(Pane *);
00239
00240 virtual void pollOSC();
00241 virtual void handleOSCMessage(const OSCMessage &) = 0;
00242
00243 virtual void contextHelpChanged(const QString &);
00244 virtual void inProgressSelectionChanged();
00245
00246 virtual void closeSession() = 0;
00247
00248 protected:
00249 QString m_sessionFile;
00250 QString m_audioFile;
00251 Document *m_document;
00252
00253 QLabel *m_descriptionLabel;
00254 PaneStack *m_paneStack;
00255 ViewManager *m_viewManager;
00256 Layer *m_timeRulerLayer;
00257
00258 bool m_audioOutput;
00259 AudioCallbackPlaySource *m_playSource;
00260 AudioCallbackPlayTarget *m_playTarget;
00261
00262 OSCQueue *m_oscQueue;
00263
00264 RecentFiles m_recentFiles;
00265 RecentFiles m_recentTransforms;
00266
00267 bool m_documentModified;
00268 bool m_openingAudioFile;
00269 bool m_abandoning;
00270
00271 Labeller *m_labeller;
00272
00273 int m_lastPlayStatusSec;
00274 mutable QString m_myStatusMessage;
00275
00276 bool m_initialDarkBackground;
00277
00278 WaveFileModel *getMainModel();
00279 const WaveFileModel *getMainModel() const;
00280 void createDocument();
00281
00282 Pane *addPaneToStack();
00283 Layer *getSnapLayer() const;
00284
00285 class PaneCallback : public SVFileReaderPaneCallback
00286 {
00287 public:
00288 PaneCallback(MainWindowBase *mw) : m_mw(mw) { }
00289 virtual Pane *addPane() { return m_mw->addPaneToStack(); }
00290 virtual void setWindowSize(int width, int height) {
00291 m_mw->resize(width, height);
00292 }
00293 virtual void addSelection(int start, int end) {
00294 m_mw->m_viewManager->addSelection(Selection(start, end));
00295 }
00296 protected:
00297 MainWindowBase *m_mw;
00298 };
00299
00300 class AddPaneCommand : public Command
00301 {
00302 public:
00303 AddPaneCommand(MainWindowBase *mw);
00304 virtual ~AddPaneCommand();
00305
00306 virtual void execute();
00307 virtual void unexecute();
00308 virtual QString getName() const;
00309
00310 Pane *getPane() { return m_pane; }
00311
00312 protected:
00313 MainWindowBase *m_mw;
00314 Pane *m_pane;
00315 Pane *m_prevCurrentPane;
00316 bool m_added;
00317 };
00318
00319 class RemovePaneCommand : public Command
00320 {
00321 public:
00322 RemovePaneCommand(MainWindowBase *mw, Pane *pane);
00323 virtual ~RemovePaneCommand();
00324
00325 virtual void execute();
00326 virtual void unexecute();
00327 virtual QString getName() const;
00328
00329 protected:
00330 MainWindowBase *m_mw;
00331 Pane *m_pane;
00332 Pane *m_prevCurrentPane;
00333 bool m_added;
00334 };
00335
00336 virtual bool checkSaveModified() = 0;
00337
00338 virtual QString getOpenFileName(FileFinder::FileType type);
00339 virtual QString getSaveFileName(FileFinder::FileType type);
00340 virtual void registerLastOpenedFilePath(FileFinder::FileType type, QString path);
00341
00342 virtual void createPlayTarget();
00343 virtual void openHelpUrl(QString url);
00344
00345 virtual void setupMenus() = 0;
00346 virtual void updateVisibleRangeDisplay(Pane *p) const = 0;
00347
00348 virtual void toXml(QTextStream &stream);
00349 };
00350
00351
00352 #endif