#ifndef _GUITAR_VIEWWINDOW_HPP_ #define _GUITAR_VIEWWINDOW_HPP_ #ifndef _COMMON_MDIWIN_HPP_ #include #endif #ifndef _COMMON_SMARTPOINTER_HPP_ #include #endif #ifndef _GUITAR_TABLATURE_HPP_ #include #endif #ifndef _THREAD_MESSAGETHREAD_HPP_ #include #endif #ifndef _GUITAR_TABPAGE_HPP_ #include #endif #ifndef _MIDISEQ_MIDIOUTDEVICE_HPP_ #include #endif class GUIFretboard; class StatusBarEx; class ViewWindow : public MDIWindow, public MessageThread { public: friend class TabPage; enum{THPlay,THPlayFromCurrent,THPlayRange,THStop}; ViewWindow(void); virtual ~ViewWindow(); void setFretboardHandler(CallbackPointer &callbackPointer); bool createProject(const String &strPathTabFile); bool createProject(void); bool openProject(const String &pathFileName); bool saveProject(const String &pathFileName); bool saveProject(void); void play(void); void playFromCurrent(void); void stopPlay(void); void playRepeated(void); void playRange(int rangeIndex); void playRangeRepeated(int rangeIndex); void cut(void); void copy(void); void paste(void); void modifyProperties(void); void setStartRange(void); void setEndRange(void); bool getTabRanges(TabRanges &ranges); void setTabRanges(const TabRanges &ranges); const TabEntries &getEntries(void)const; bool insert(const TabEntry &entry); bool insert(const TabEntries &entries); int getNumTabEntries(void)const; void increaseTempo(void); void decreaseTempo(void); String getTitle(void)const; const String &getPathFileProject(void)const; void setStatusControlRef(SmartPointer &statusBar); bool isDirty(void); protected: virtual void preRegister(WNDCLASS &wndClass); virtual void preCreate(MDICREATESTRUCT &createStruct); private: enum {WindowWidth=565,WindowHeight=210,RestBeforeRepeat=500}; CallbackData::ReturnType createHandler(CallbackData &someCallbackData); CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); CallbackData::ReturnType leftButtonDoubleHandler(CallbackData &someCallbackData); CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); CallbackData::ReturnType rightButtonDownHandler(CallbackData &someCallbackData); DWORD threadHandler(ThreadMessage &threadMessage); void setTitle(const String &strTitle); void enablePlaySelect(bool enable); void enableStopSelect(bool enable); void enableCut(bool enable); void enableCopy(bool enable); void enablePaste(bool enable); bool getEnableCut(void); bool getEnableCopy(void); bool getEnablePaste(void); bool isInRepeatPlay(void)const; void isInRepeatPlay(bool isInRepeatPlay); bool getProjectName(String &strPathFileProject); void thPlay(void); void thPlayFromCurrent(void); void thPlayRange(int rangeIndex); Callback mCreateHandler; Callback mSizeHandler; Callback mPaintHandler; Callback mLeftButtonDoubleHandler; Callback mPlayNoteHandler; Callback mCloseHandler; Callback mRightButtonDownHandler; ThreadCallback mThreadHandler; SmartPointer mTabPage; SmartPointer mMIDIDevice; Tablature mTablature; bool mIsInRepeatPlay; }; inline const TabEntries &ViewWindow::getEntries(void)const { return ((SmartPointer&)mTabPage)->getEntries(); } inline void ViewWindow::setFretboardHandler(CallbackPointer &callbackPointer) { mTabPage->setPlayNoteHandler(callbackPointer); } inline bool ViewWindow::isDirty(void) { return mTabPage->isDirty(); } inline bool ViewWindow::isInRepeatPlay(void)const { return mIsInRepeatPlay; } inline void ViewWindow::isInRepeatPlay(bool isInRepeatPlay) { mIsInRepeatPlay=isInRepeatPlay; } inline const String &ViewWindow::getPathFileProject(void)const { return mTablature.getPathFileProject(); } inline int ViewWindow::getNumTabEntries(void)const { return ((SmartPointer&)mTabPage)->getEntries().size(); } inline void ViewWindow::setStatusControlRef(SmartPointer &statusBar) { mTabPage->setStatusControlRef(statusBar); } #endif