|
Canorus
0.7
|
00001 00008 #ifndef MAINWIN_H_ 00009 #define MAINWIN_H_ 00010 00011 #include <QObject> 00012 #include <QFileDialog> 00013 #include <QTime> 00014 #include <QTimer> 00015 #include <QHash> 00016 00017 #include "ui_mainwin.h" 00018 00019 #include "core/document.h" 00020 #include "core/muselement.h" 00021 #include "core/note.h" 00022 #include "core/clef.h" 00023 00024 #include "interface/playback.h" 00025 #include "interface/pyconsoleinterface.h" 00026 00027 #include "widgets/viewportcontainer.h" 00028 #include "widgets/scoreviewport.h" 00029 #include "widgets/resourceview.h" 00030 00031 class QKeyEvent; 00032 class QSlider; 00033 class QSpinBox; 00034 class QToolBar; 00035 class QLabel; 00036 class QLineEdit; 00037 class QComboBox; 00038 class QCheckBox; 00039 class QAction; 00040 00041 class CAHelpBrowser; 00042 class CAMenuToolButton; 00043 class CAUndoToolButton; 00044 class CALCDNumber; 00045 class CASheet; 00046 class CAScoreViewPort; 00047 class CASourceViewPort; 00048 class CAMusElementFactory; 00049 class CAPrintPreviewCtl; 00050 class CAPrintCtl; 00051 class CAPreviewCtl; 00052 class CAPyConsole; 00053 class CATransposeView; 00054 class CAMidiRecorderView; 00055 class CAKeybdInput; 00056 class CAExport; 00057 00058 class CAMainWin : public QMainWindow, private Ui::uiMainWindow 00059 { 00060 Q_OBJECT 00061 00062 public: 00063 enum CAMode { 00064 NoDocumentMode, 00065 InsertMode, 00066 SelectMode, 00067 EditMode, 00068 ReadOnlyMode 00069 }; 00070 00071 CAMainWin(QMainWindow *oParent = 0); 00072 ~CAMainWin(); 00073 00074 void clearUI(); 00075 void rebuildUI(CASheet *sheet, bool repaint=true); 00076 void rebuildUI(bool repaint=true); 00077 inline bool rebuildUILock() { return _rebuildUILock; } 00078 void updateWindowTitle(); 00079 00080 void newDocument(); 00081 void addSheet(CASheet *s); 00082 void removeSheet(CASheet *s); 00083 void insertMusElementAt( const QPoint coords, CAScoreViewPort *v ); 00084 void restartTimeEditedTime() { _timeEditedTime = 0; }; 00085 void deleteSelection( CAScoreViewPort *v, bool deleteSyllable, bool deleteNotes, bool undo ); 00086 void copySelection( CAScoreViewPort *v ); 00087 void pasteAt( const QPoint coords, CAScoreViewPort *v ); 00088 00089 CADocument *openDocument( const QString& fileName ); 00090 CADocument *openDocument( CADocument* doc ); 00091 bool saveDocument( QString fileName ); 00092 00093 inline CAMode mode() { return _mode; } 00094 inline QFileDialog *exportDialog() { return uiExportDialog; } 00095 inline QFileDialog *importDialog() { return uiImportDialog; } 00096 inline CAResourceView *resourceView() { return _resourceView; } 00097 inline QAction *resourceViewAction() { return uiResourceView; } 00098 inline CAMidiRecorderView *midiRecorderView() { return _midiRecorderView; } 00099 inline void setMidiRecorderView( CAMidiRecorderView *v ) { _midiRecorderView = v; } 00100 inline CAViewPort *currentViewPort() { return _currentViewPort; } 00101 inline void removeViewPort(CAViewPort* v) { _viewPortList.removeAll(v); } 00102 inline QList<CAViewPort*> viewPortList() { return _viewPortList; } 00103 00104 inline CAScoreViewPort *currentScoreViewPort() { 00105 if (currentViewPort()) return dynamic_cast<CAScoreViewPort*>(currentViewPort()); 00106 else return 0; 00107 } 00108 00109 inline CASheet *currentSheet() { 00110 CAScoreViewPort *v = currentScoreViewPort(); 00111 if (v) return v->sheet(); 00112 else return 0; 00113 } 00114 00115 inline CAStaff *currentStaff() { 00116 CAContext *context = currentContext(); 00117 if (context && context->contextType()==CAContext::Staff) return static_cast<CAStaff*>(context); 00118 else return 0; 00119 } 00120 00121 CAContext *currentContext(); 00122 CAVoice *currentVoice(); 00123 inline CAViewPortContainer *currentViewPortContainer() { return _currentViewPortContainer; } 00124 inline CADocument *document() { return _document; } 00125 00126 inline void setDocument(CADocument *document) { _document = document; _resourceView->setDocument( document ); } 00127 00128 // Dialogs, Windows 00129 static QFileDialog *uiSaveDialog; 00130 static QFileDialog *uiOpenDialog; 00131 static QFileDialog *uiExportDialog; 00132 static QFileDialog *uiImportDialog; 00133 00134 // Python Console 00135 CAPyConsole *pyConsole; 00136 CAPyConsoleInterface* pyConsoleIface; 00137 00138 QDockWidget *helpDock() { return uiHelpDock; } 00139 CAHelpBrowser *helpWidget() { return uiHelpWidget; } 00140 00141 private slots: 00143 // ToolBar/Menus actions // 00145 void closeEvent(QCloseEvent *event); 00146 // File 00147 void on_uiNewDocument_triggered(); 00148 void on_uiOpenDocument_triggered(); 00149 bool on_uiSaveDocument_triggered(); 00150 bool on_uiSaveDocumentAs_triggered(); 00151 void on_uiCloseDocument_triggered(); 00152 void on_uiExportDocument_triggered(); 00153 void on_uiImportDocument_triggered(); 00154 void on_uiExportToPdf_triggered(); 00155 void on_uiOpenRecent_aboutToShow(); 00156 void onUiOpenRecentDocumentTriggered(); 00157 00158 // Edit 00159 void on_uiUndo_toggled(bool, int); 00160 void on_uiRedo_toggled(bool, int); 00161 void on_uiCopy_triggered(); 00162 void on_uiCut_triggered(); 00163 void on_uiPaste_triggered(); 00164 void on_uiSelectAll_triggered(); 00165 void on_uiInvertSelection_triggered(); 00166 void on_uiDocumentProperties_triggered(); 00167 00168 // Insert 00169 void on_uiSelectMode_toggled(bool); 00170 void on_uiEditMode_toggled(bool); 00171 void on_uiNewSheet_triggered(); 00172 void on_uiNewVoice_triggered(); 00173 void on_uiContextType_toggled(bool, int); 00174 void on_uiClefType_toggled(bool, int); 00175 void on_uiInsertKeySig_toggled(bool); 00176 void on_uiTimeSigType_toggled(bool, int); 00177 void on_uiBarlineType_toggled(bool, int); 00178 void on_uiInsertPlayable_toggled(bool); 00179 void on_uiSlurType_toggled(bool, int); 00180 void on_uiMarkType_toggled(bool, int); 00181 void on_uiArticulationType_toggled(bool, int); 00182 void on_uiInsertSyllable_toggled(bool); 00183 void on_uiInsertFM_toggled(bool); 00184 00185 // View 00186 void on_uiFullscreen_toggled(bool); 00187 void on_uiAnimatedScroll_toggled(bool); 00188 void on_uiLockScrollPlayback_toggled(bool); 00189 void on_uiZoomToSelection_triggered(); 00190 void on_uiZoomToFit_triggered(); 00191 void on_uiZoomToWidth_triggered(); 00192 void on_uiZoomToHeight_triggered(); 00193 void on_uiScoreView_triggered(); 00194 void on_uiLilyPondSource_triggered(); 00195 void on_uiCanorusMLSource_triggered(); 00196 void on_uiResourceView_toggled(bool); 00197 00198 // Sheet 00199 void on_uiRemoveSheet_triggered(); 00200 void on_uiSheetName_returnPressed(); 00201 void on_uiSheetProperties_triggered(); 00202 00203 // Context 00204 void on_uiContextName_returnPressed(); 00205 void on_uiRemoveContext_triggered(); 00206 void on_uiStanzaNumber_valueChanged(int); 00207 void on_uiAssociatedVoice_activated(int); 00208 void on_uiContextProperties_triggered(); 00209 00210 // Playback 00211 void on_uiPlayFromSelection_toggled(bool); 00212 00213 // Playable 00214 void on_uiPlayableLength_toggled(bool, int); 00215 void on_uiTupletType_toggled(bool, int); 00216 void on_uiTupletNumber_valueChanged(int); 00217 void on_uiTupletActualNumber_valueChanged(int); 00218 void on_uiNoteStemDirection_toggled(bool, int); 00219 void on_uiHiddenRest_toggled( bool checked ); 00220 void onMidiInEvent( QVector<unsigned char> message ); 00221 00222 // Key Signature 00223 void on_uiKeySig_activated( int ); 00224 00225 // Time Signature 00226 void on_uiTimeSigBeats_valueChanged(int); 00227 void on_uiTimeSigBeat_valueChanged(int); 00228 00229 // Clef 00230 void on_uiClefOffset_valueChanged(int); 00231 00232 // Lyrics 00233 void onTextEditKeyPressEvent(QKeyEvent *); 00234 00235 // Function marks 00236 void on_uiFMFunction_toggled(bool, int); 00237 void on_uiFMChordArea_toggled(bool, int); 00238 void on_uiFMTonicDegree_toggled(bool, int); 00239 void on_uiFMEllipse_toggled(bool); 00240 00241 // Dynamic marks 00242 void on_uiDynamicText_toggled(bool, int); 00243 void on_uiDynamicVolume_valueChanged(int); 00244 void on_uiDynamicCustomText_returnPressed(); 00245 00246 // Instrument change 00247 void on_uiInstrumentChange_activated( int ); 00248 00249 // Fermata 00250 void on_uiFermataType_toggled( bool, int ); 00251 00252 // Repeat Mark 00253 void on_uiRepeatMarkType_toggled( bool, int ); 00254 00255 // Fingering 00256 void on_uiFinger_toggled( bool checked, int t ); 00257 void on_uiFingeringOriginal_toggled( bool checked ); 00258 00259 // Tempo 00260 void on_uiTempoBeat_toggled( bool, int ); 00261 void on_uiTempoBpm_returnPressed(); 00262 00263 // Tools 00264 void on_uiSettings_triggered(); 00265 void on_uiTranspose_triggered(); 00266 void on_uiMidiRecorder_triggered(); 00267 00268 // Voice 00269 void on_uiVoiceNum_valChanged(int); 00270 void on_uiVoiceName_returnPressed(); 00271 void on_uiVoiceInstrument_activated(int); 00272 void on_uiRemoveVoice_triggered(); 00273 void on_uiVoiceStemDirection_toggled(bool, int); 00274 void on_uiVoiceProperties_triggered(); 00275 00276 // Window 00277 void on_uiSplitHorizontally_triggered(); 00278 void on_uiSplitVertically_triggered(); 00279 void on_uiUnsplitAll_triggered(); 00280 void on_uiCloseCurrentView_triggered(); 00281 void on_uiNewViewport_triggered(); 00282 void on_uiNewWindow_triggered(); 00283 00284 // Help 00285 public slots: 00286 void on_uiUsersGuide_triggered(); 00287 private slots: 00288 void on_uiAboutCanorus_triggered(); 00289 void on_uiAboutQt_triggered(); 00290 00292 // Handle other widgets signals // 00294 void keyPressEvent(QKeyEvent *); 00295 void on_uiTabWidget_currentChanged(int); 00296 00297 void viewPortClicked(); 00298 00299 void scoreViewPortMousePress(QMouseEvent *e, const QPoint coords); 00300 void scoreViewPortMouseMove(QMouseEvent *e, const QPoint coords); 00301 void scoreViewPortMouseRelease(QMouseEvent *e, const QPoint coords); 00302 void scoreViewPortDoubleClick(QMouseEvent *e, const QPoint coords); 00303 void scoreViewPortTripleClick(QMouseEvent *e, const QPoint coords); 00304 void scoreViewPortWheel(QWheelEvent *e, const QPoint coords); 00305 void scoreViewPortKeyPress(QKeyEvent *e); 00306 void sourceViewPortCommit(QString inputString); 00307 void floatViewPortClosed(CAViewPort*); 00308 00309 void onTimeEditedTimerTimeout(); 00310 00311 void playbackFinished(); 00312 void onScoreViewPortSelectionChanged(); 00313 void onRepaintTimerTimeout(); 00314 00315 private: 00316 void playImmediately( QList<CAMusElement*> elements ); 00317 00319 // General properties // 00321 CADocument *_document; 00322 CAMode _mode; 00323 00324 CAPreviewCtl *_poPrintPreviewCtl; 00325 CAPrintCtl *_poPrintCtl; 00326 CAExport *_poExp; // abstract export instance 00327 CAResourceView *_resourceView; 00328 CATransposeView *_transposeView; 00329 CAMidiRecorderView *_midiRecorderView; 00330 00331 void setMode(CAMode mode); 00332 inline void setCurrentViewPort( CAViewPort *viewPort ) { _currentViewPort = viewPort; } 00333 inline void setCurrentViewPortContainer( CAViewPortContainer *vpc ) 00334 { _currentViewPortContainer = vpc; } 00335 00336 CAViewPortContainer *_currentViewPortContainer; 00337 QList<CAViewPortContainer *>_viewPortContainerList; 00338 00339 QList<CAViewPort *> _viewPortList; 00340 QHash<CAViewPortContainer*, CASheet*> _sheetMap; 00341 CAViewPort *_currentViewPort; 00342 bool _animatedScroll; 00343 bool _lockScrollPlayback; 00344 CAViewPort *_playbackViewPort; 00345 QList<CADrawableMusElement*> _prePlaybackSelection; 00346 QTimer *_repaintTimer; 00347 bool _rebuildUILock; 00348 inline void setRebuildUILock(bool l) { _rebuildUILock = l; } 00349 00350 CAPlayback *_playback; 00351 QTimer _timeEditedTimer; 00352 unsigned int _timeEditedTime; 00353 CAMusElementFactory *_musElementFactory; 00354 public: 00355 inline CAMusElementFactory *musElementFactory() { return _musElementFactory; } 00356 private: 00357 inline bool stopPlayback() { 00358 if(_playback && _playback->isRunning()) 00359 _playback->stopNow(); 00360 } 00361 00362 bool handleUnsavedChanges(); 00363 00364 CAKeybdInput *_keybdInput; 00366 // Pure user interface - widgets that weren't created by Qt Designer yet // 00368 void createCustomActions(); 00369 void setupCustomUi(); 00370 void initViewPort(CAViewPort*); 00371 void updateUndoRedoButtons(); 00372 void updateToolBars(); 00373 void updateSheetToolBar(); 00374 void updateContextToolBar(); 00375 void updateVoiceToolBar(); 00376 void updateInsertToolBar(); 00377 void updatePlayableToolBar(); 00378 void updateKeySigToolBar(); 00379 void updateTimeSigToolBar(); 00380 void updateClefToolBar(); 00381 void updateFMToolBar(); 00382 void updateDynamicToolBar(); 00383 void updateInstrumentToolBar(); 00384 void updateTempoToolBar(); 00385 void updateFermataToolBar(); 00386 void updateRepeatMarkToolBar(); 00387 void updateFingeringToolBar(); 00388 00390 // Toolbar section // 00392 // Standard toolbar 00393 //QToolBar *uiStandardToolBar; 00394 CAUndoToolButton *uiUndo; 00395 CAUndoToolButton *uiRedo; 00396 00397 // Insert toolbar 00398 QToolBar *uiInsertToolBar; 00399 QActionGroup *uiInsertGroup; // Group for mutual exclusive selection of music elements 00400 // QAction *uiSelectMode; // made by Qt Designer 00401 // QAction *uiNewSheet; // made by Qt Designer 00402 CAMenuToolButton *uiContextType; 00403 00404 // QAction *uiInsertPlayable; // made by Qt Designer 00405 CAMenuToolButton *uiClefType; 00406 // QAction *uiInsertKeySig; // made by Qt Designer 00407 CAMenuToolButton *uiTimeSigType; // made by Qt Designer 00408 CAMenuToolButton *uiBarlineType; 00409 CAMenuToolButton *uiMarkType; 00410 CAMenuToolButton *uiArticulationType; 00411 // QAction *uiInsertSyllable; // made by Qt Designer 00412 // QAction *uiInsertFM; // made by Qt Designer 00413 00414 QToolBar *uiSheetToolBar; 00415 // QAction *uiNewSheet; // made by Qt Designer 00416 QLineEdit *uiSheetName; 00417 // QAction *uiRemoveSheet; // made by Qt Designer 00418 // QAction *uiSheetProperties; // made by Qt Designer 00419 00420 QToolBar *uiContextToolBar; 00421 // CAContext 00422 QLineEdit *uiContextName; 00423 //QAction *uiRemoveContext; // made by Qt Designer 00424 //QAction *uiContextProperties; // made by Qt Designer 00425 // CAStaff 00426 // CALyricsContext 00427 QSpinBox *uiStanzaNumber; 00428 QAction *uiStanzaNumberAction; 00429 QComboBox *uiAssociatedVoice; 00430 QAction *uiAssociatedVoiceAction; 00431 // CAFunctionMarkContext 00432 00433 QToolBar *uiVoiceToolBar; 00434 // QAction *uiNewVoice; // made by Qt Designer 00435 CALCDNumber *uiVoiceNum; 00436 QLineEdit *uiVoiceName; 00437 QComboBox *uiVoiceInstrument; 00438 // QAction *uiRemoveVoice; // made by Qt Designer 00439 CAMenuToolButton *uiVoiceStemDirection; 00440 // QAction *uiVoiceProperties; // made by Qt Designer 00441 00442 QToolBar *uiPlayableToolBar; // note and rest properties are merged for the time being 00443 // Note properties 00444 CAMenuToolButton *uiPlayableLength; 00445 CAMenuToolButton *uiNoteAccs; 00446 CAMenuToolButton *uiSlurType; 00447 public: // Because CAKeyboardInput (input with midi keyboard) needs to operate these widgets to 00448 // provide gui feedback, these, probably even more, should become public. 00449 // Some clean interface would be appropriate. 00450 CAMenuToolButton *uiTupletType; 00451 QSpinBox *uiTupletNumber; 00452 QSpinBox *uiTupletActualNumber; 00453 private: 00454 QAction *uiTupletNumberAction; 00455 QLabel *uiTupletInsteadOf; 00456 QAction *uiTupletInsteadOfAction; 00457 QAction *uiTupletActualNumberAction; 00458 // QAction *uiNoteAccsVisible; // made by Qt Designer 00459 CAMenuToolButton *uiNoteStemDirection; 00460 // Rest properties 00461 // CAMenuToolButton *uiPlayableLength; // same as note properties 00462 // QLabel *uiPlayableDotted; // same as note properties 00463 // QAction *uiHiddenRest; // made by Qt Designer 00464 00465 QToolBar *uiKeySigToolBar; 00466 // CAKeySigPSP *uiKeySigPSP; /// Key signature perspective. \todo Reimplement it. 00467 QComboBox *uiKeySig; 00468 // QComboBox *uiKeySigGender; 00469 00470 QToolBar *uiClefToolBar; 00471 QSpinBox *uiClefOffset; 00472 int oldUiClefOffsetValue; 00473 00474 QToolBar *uiTimeSigToolBar; 00475 QSpinBox *uiTimeSigBeats; 00476 QLabel *uiTimeSigSlash; 00477 QSpinBox *uiTimeSigBeat; 00478 // CAMenuToolButton *uiTimeSigStyle; /// \todo Implement it. -Matevz 00479 00480 QToolBar *uiFMToolBar; // function mark tool bar 00481 CAMenuToolButton *uiFMFunction; 00482 CAMenuToolButton *uiFMChordArea; 00483 CAMenuToolButton *uiFMTonicDegree; 00484 QComboBox *uiFMKeySig; 00485 //QSpinBox *uiKeySigNumberOfAccs; // defined in uiKeySigToolBar 00486 //QComboBox *uiKeySigGender; // defined in uiKeySigToolBar 00487 //QAction *uiFMEllipse; // made by Qt Designer 00488 00489 // Marks tool bars: 00490 QToolBar *uiDynamicToolBar; 00491 CAMenuToolButton *uiDynamicText; 00492 QSpinBox *uiDynamicVolume; 00493 QLineEdit *uiDynamicCustomText; 00494 QToolBar *uiInstrumentToolBar; 00495 QComboBox *uiInstrumentChange; 00496 QToolBar *uiTempoToolBar; 00497 CAMenuToolButton *uiTempoBeat; 00498 QLabel *uiTempoEquals; 00499 QLineEdit *uiTempoBpm; 00500 QToolBar *uiFermataToolBar; 00501 CAMenuToolButton *uiFermataType; 00502 QToolBar *uiRepeatMarkToolBar; 00503 CAMenuToolButton *uiRepeatMarkType; 00504 QToolBar *uiFingeringToolBar; 00505 CAMenuToolButton *uiFinger; 00506 QCheckBox *uiFingeringOriginal; 00507 00508 // Python console 00509 QDockWidget *uiPyConsoleDock; 00510 00511 // Help widget 00512 QDockWidget *uiHelpDock; 00513 CAHelpBrowser *uiHelpWidget; 00514 }; 00515 #endif /* MAINWIN_H_ */
1.8.0