From 672e606b6d857e370ac75c076a1b2982e5bccd67 Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Sun, 15 Sep 2013 21:57:55 -0700 Subject: Converted Sekaiju 3.6 to Visual Studio 2008. --- src/MusicalScoreFrame.h | 352 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 352 insertions(+) create mode 100644 src/MusicalScoreFrame.h (limited to 'src/MusicalScoreFrame.h') diff --git a/src/MusicalScoreFrame.h b/src/MusicalScoreFrame.h new file mode 100644 index 0000000..907dcd5 --- /dev/null +++ b/src/MusicalScoreFrame.h @@ -0,0 +1,352 @@ +//****************************************************************************** +// MIDIシーケンサーソフト『世界樹』 +// 譜面フレームウィンドウクラス +// (C)2002-2013 おーぷんMIDIぷろじぇくと/くず +//****************************************************************************** + +/* This library is free software; you can redistribute it and/or */ +/* modify it under the terms of the GNU Lesser General Public */ +/* License as published by the Free Software Foundation; either */ +/* version 2.1 of the License, or (at your option) any later version. */ + +/* This library is distributed in the hope that it will be useful, */ +/* but WITHOUT ANY WARRANTY; without even the implied warranty of */ +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU */ +/* Lesser General Public License for more details. */ + +/* You should have received a copy of the GNU Lesser General Public */ +/* License along with this library; if not, write to the Free Software */ +/* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + + + +// 音符情報(ひとつのおたまじゃくしにつきひとつ確保) +typedef struct tagMusicalScoreNoteInfo { + MIDIEvent* m_pNoteOnEvent; // ノートオンイベントへのポインタ + MIDIEvent* m_pNoteOffEvent; // ノートオフイベントへのポインタ + long m_lNoteOnTime; // ノートオン時刻[Tick] + long m_lNoteOnMeasure; // ノートオン小節 + long m_lNoteOnBeat; // ノートオン拍 + long m_lNoteOnTick; // ノートオンティック + long m_lNoteOffTime; // ノートオフ時刻[Tick] + long m_lNoteOffMeasure; // ノートオフ小節 + long m_lNoteOffBeat; // ノートオフ拍 + long m_lNoteOffTick; // ノートオフティック + long m_lFlags; // フラグ + long m_lSelected; // 選択状態 + struct tagMusicalScoreNoteInfo* m_pPrevNoteInfo; // 次の音符情報へのポインタ(なければNULL) + struct tagMusicalScoreNoteInfo* m_pNextNoteInfo; // 前の音符情報へのポインタ(なければNULL) + void* m_pNoteGroupInfo; // 旗グループ情報へのポインタ(なければNULL) + void* m_pTripletGroupInfo; // 3連符グループ情報へのポインタ(なければNULL) +} MusicalScoreNoteInfo; + +// 旗グループ情報(複数の音符を旗をつなげて束ねる情報) +typedef struct tagMusicalScoreNoteGroupInfo { + MusicalScoreNoteInfo* m_pFirstNoteInfo; // 最初の音符情報へのポインタ + MusicalScoreNoteInfo* m_pLastNoteInfo; // 最後の音符情報へのポインタ + long m_lBeginTime; // 開始時刻 + long m_lEndTime; // 終了時刻 + long m_lMinKey; // 最低音階(0-127) + long m_lMaxKey; // 最高音階(0-127) + long m_lMinDur; // 最短音長さ + long m_lMaxDur; // 最長音長さ + long m_lNumNoteInfo; // グループ内の音符数 +} MusicalScoreNoteGroupInfo; + +// 3連符グループ情報(複数の音符を-3-でつなげて束ねる情報) +typedef struct tagMusicalScoreTripletGroupInfo { + MusicalScoreNoteInfo* m_pFirstNoteInfo; // 最初の音符情報へのポインタ + MusicalScoreNoteInfo* m_pLastNoteInfo; // 最後の音符情報へのポインタ + long m_lBeginTime; // 開始時刻 + long m_lEndTime; // 終了時刻 + long m_lMinKey; // 最低音階(0-127) + long m_lMaxKey; // 最高音階(0-127) + long m_lMinDur; // 最短音長さ + long m_lMaxDur; // 最長音長さ + long m_lNumNoteInfo; // グループ内の音符数 +} MusicalScoreTripletGroupInfo; + +// トラック情報 +typedef struct { + long m_lTop; // 上端座標[pixel] + long m_lHeight; // 高さ[pixel] + long m_lFlags; // フラグ + long m_lMinKey; // トラック内最低音階(0-127) + long m_lMaxKey; // トラック内最高音階(0-127) + CPtrArray m_theNoteInfoArray; // 音符情報の配列 + CPtrArray m_theNoteGroupInfoArray; // 音符グループ情報の配列 + CPtrArray m_theTripletGroupInfoArray; // 3連音符グループ情報の配列 + long m_lTopPrint; // 上端座標(印刷用)[*1/10mm] + long m_lHeightPrint; // 高さ(印刷用)[*1/10mm] +} MusicalScoreTrackInfo; + +// 小節情報 +typedef struct { + long m_lTime; // この小節の開始タイム[Tick][Subframe] + long m_lDuration; // この小節にの長さ[Tick][Subframe] + long m_lLeft; // この小節の左座標[pixel] + long m_lSignatureWidth; // この小節の拍子記号・調性記号用幅[pixel] + long m_lPreWidth; // この小節の左余白幅[pixel] + long m_lWidth; // この小節の幅[pixel] + long m_lPostWidth; // この小節の右余白幅[pixel] + long m_lFlags; // フラグ + long m_lTimeSignature; // この小節の拍子記号 + long m_lKeySignature; // この小節の調性記号 + long m_lLeftPrint; // この小節の左座標(印刷用)[*1/10mm] + long m_lSignatureWidthPrint; // この小節の拍子記号・調性記号用幅(印刷用)[*1/10mm] + long m_lPreWidthPrint; // この小節の左余白幅(印刷用)[*1/10mm] + long m_lWidthPrint; // この小節の幅(印刷用)[*1/10mm] + long m_lPostWidthPrint; // この小節の右余白幅[pixel](印刷用)[*1/10mm] +} MusicalScoreMeasureInfo; + + + + +class CMusicalScoreFrame : public CChildFrame { + DECLARE_DYNCREATE (CMusicalScoreFrame) + + //------------------------------------------------------------------------- + // アトリビュート + //------------------------------------------------------------------------- +protected: + long m_lToolBar1Height; // ツールバー1の高さ[pixel] + long m_lKeyHeight; // トラック番号-時間ビューの高さ[pixel] + long m_lScaleHeight; // 上部目盛りビューの高さ[pixel] + long m_lScaleWidth; // 左部目盛りビューの高さ[pixel] + long m_lTimeWidth; // トラック番号ー-時間ビューの幅[pixel] + long m_lHScrollBarHeight; // 水平スクロールバーの高さ[pixel] + long m_lVScrollBarWidth; // 垂直スクロールバーの高さ[pixel] + long m_lTrackListWidth; // トラックリストボックスの幅[pixel] + long m_lTrackZoom; // トラック方向拡大倍率[倍] + long m_lTimeZoom; // 時間方向拡大倍率[倍] + long m_lTrackScrollPos; // トラック方向スクロール位置[pixel] + long m_lTimeScrollPos; // 時間方向スクロール位置[pixel] +public: + // 描画補助情報 + CPtrArray m_theTrackInfoArray; // トラックごとの情報 + CPtrArray m_theMeasureInfoArray; // 小節ごとの情報 + +public: + CFont m_theFont; // 譜面ウィンドウで使うフォント + CFont m_theTimeMeasureFont; // 拍子記号・調性記号用のフォント + CSekaijuToolBar m_wndToolBar1; // ツールバー1(上) + CColorfulComboBox m_wndTrackCombo; // ツールバー上のトラックコンボボックス + CComboBox m_wndChannelCombo; // ツールバー上のチャンネルコンボボックス + CComboBox m_wndSnapCombo; // ツールバー上のスナップコンボボックス + CComboBox m_wndVelocityCombo; // ツールバー上のベロシティコンボボックス + CComboBox m_wndDurationCombo; // ツールバー上の音長さコンボボックス + CComboBox m_wndResolutionCombo; // ツールバー上の表示精度コンボボックス + CView* m_pDummyView; // ダミービュー(Visible=FALSE)へのポインタ + CView* m_pPrintView; // 印刷用ビュー(Visible=FALSE)へのポインタ + CView* m_pScaleView; // 目盛りビューへのポインタ + CView* m_pTimeScaleView; // 時間目盛りビューへのポインタ + CView* m_pTrackScaleView; // トラック番号目盛りビューへのポインタ + CView* m_pTrackTimeView; // トラック番号-タイムビューへのポインタ + CCheckListBox* m_pTrackListBox; // トラックリストボックス + CScrollBar m_wndTimeScroll; // 時間方向スクロールバー + CScrollBar m_wndTrackScroll; // トラック方向スクロールバー + CScrollBar m_wndSizeScroll; // サイズ用スクロールバー + CBitmapButton m_wndTimeZoomUp; // 時間方向拡大ボタン + CBitmapButton m_wndTimeZoomDown; // 時間方向縮小ボタン + CBitmapButton m_wndTrackZoomUp; // トラック方向拡大ボタン + CBitmapButton m_wndTrackZoomDown; // トラック方向縮小ボタン + +protected: + CPoint m_ptMouseDown; // マウスが押されたときの座標(スプリッターを動かすのに使う) + CPoint m_ptMouseMoveOld; // マウスが動かされたときの前回の座標(スプリッターを動かすのに使う) + BOOL m_bSplitterMovingH; // 現在水平スプリッターを動かしているところか? + BOOL m_bSplitterMovingV; // 現在垂直スプリッターを動かしているところか? + +public: + BOOL m_bAutoPageUpdate; // 自動的にページを更新するか? + long m_lCurTool; // 現在の選択されているツール(0=描画,1=線画,2=消しゴム,3=選択,4=試聴) + +protected: + BOOL m_bOnlyCurTrack; // 現在のトラックのみを表示するか? + BOOL m_bShowAllTrack; // すべてのトラックを表示するか? + BOOL m_bTrackVisible[MAXMIDITRACKNUM]; // トラック[0〜65535]は可視か? + + //------------------------------------------------------------------------- + // 構築と破壊 + //------------------------------------------------------------------------- +public: + CMusicalScoreFrame (); // コンストラクタ + virtual ~CMusicalScoreFrame (); // デストラクタ + + //------------------------------------------------------------------------- + // オペレーション + //------------------------------------------------------------------------- +public: + virtual CSekaijuDoc* GetDocument (); + virtual long GetTimeZoom (); + virtual long GetTrackZoom (); + virtual long XtoTime (long x); + virtual long TimetoX (long lTime); + virtual long MeasuretoX (long lMeasure); + virtual long MeasuretoX2 (long lMeasure); + virtual long YtoTrackIndex (long y); + virtual long TrackIndexYtoKey (long lTrackIndex, long y, long lKeySignature); + virtual long KeytoLineNo (long lKey, long lKeySignature); + virtual long KeytoSF (long lKey, long lKeySignature); + virtual long TrackIndexLineNotoY (long lTrackIndex, long lLineNo); + virtual long TrackIndexKeytoY (long lTrackIndex, long lKey, long lKeySignature); + virtual long GetTimeScrollPos (); + virtual long GetTrackScrollPos (); + virtual long SetTimeScrollPos (long lTimeScrollPos); + virtual long SetTrackScrollPos (long lTrackScrollPos); + virtual long GetVisibleLeftTime (); + virtual long GetVisibleRightTime (); + virtual long GetVisibleTopTrack (); + virtual long GetVisibleBottomTrack (); + virtual void DrawSplitterCaptor (CDC* pDC, CPoint pt); + virtual long GetCurTrackIndex (); + virtual long GetCurChannel (); + virtual long GetCurSnap (); + virtual long GetCurVelocity (); + virtual long GetCurDuration (); + virtual long GetCurResolution (); + virtual BOOL SetCurTrackIndex (long lCurTrackIndex); + virtual BOOL SetCurChannel (long lCurChannel); + virtual BOOL SetCurSnap (long lCurSnap); + virtual BOOL SetCurVelocity (long lCurVelocity); + virtual BOOL SetCurDuration (long lCurDuration); + virtual BOOL SetCurResolution (long lCurResolution); + virtual BOOL IsTrackVisible (long lTrackIndex); + virtual BOOL SetTrackVisible (long lTrackIndex); + virtual BOOL UpdateTrackCombo (); + virtual BOOL UpdateTrackList (); + virtual BOOL UpdateSnapCombo (); + virtual BOOL UpdateVelocityCombo (); + virtual BOOL UpdateDurationCombo (); + virtual BOOL UpdateResolutionCombo (); + virtual void RecalcTrackScrollInfo (); + virtual void RecalcTimeScrollInfo (); + + + virtual BOOL DeleteTrackInfoArray (); + virtual BOOL DeleteMeasureInfoArray (); + virtual BOOL DeleteNoteInfoArray (long lTrackIndex); + virtual BOOL DeleteNoteGroupInfoArray (long lTrackIndex); + virtual BOOL DeleteTripletGroupInfoArray (long lTrackIndex); + virtual BOOL UpdateMeasureInfoArray (); + virtual BOOL UpdateTrackInfoArray (); + virtual BOOL UpdateNoteInfoArray (long lTrackIndex, MIDITrack* pMIDITrack); + virtual BOOL UpdateNoteGroupInfoArray (long lTrackIndex, MIDITrack* pMIDITrack); + virtual BOOL UpdateTripletGroupInfoArray (long lTrackIndex, MIDITrack* pMIDITrack); + virtual MusicalScoreNoteInfo* CreateNote + (MIDIEvent* pNoteEvent, long lNoteOnTime, long lNoteOnMeasure, long lNoteOnBeat, long lNoteOnTick, + long lNoteOffTime, long lNoteOffMeasure, long lNoteOffBeat, long lNoteOffTick, long lFlags); + virtual void DeleteNoteInfo (MusicalScoreNoteInfo* pNoteInfo); + virtual BOOL AddNoteInfo (MusicalScoreTrackInfo* pTrackInfo, MusicalScoreNoteInfo* pNoteInfo); + MusicalScoreNoteGroupInfo* CreateNoteGroupInfo (MusicalScoreNoteInfo* pNoteInfo); + void DeleteNoteGroupInfo (MusicalScoreNoteGroupInfo* pNoteGroupInfo); + BOOL AddNoteGroupInfo (MusicalScoreTrackInfo* pTrackInfo, MusicalScoreNoteGroupInfo* pNoteGroupInfo); + MusicalScoreTripletGroupInfo* CreateTripletGroupInfo (MusicalScoreNoteInfo* pNoteInfo); + void DeleteTripletGroupInfo (MusicalScoreTripletGroupInfo* pTripletGroupInfo); + BOOL AddTripletGroupInfo (MusicalScoreTrackInfo* pTrackInfo, MusicalScoreTripletGroupInfo* pNoteGroupInfo); + + virtual long GetTrackInfoCount () + {return m_theTrackInfoArray.GetSize ();} + virtual MusicalScoreTrackInfo* GetTrackInfo (long lTrackIndex) + {return lTrackIndex < m_theTrackInfoArray.GetSize () ? + ((MusicalScoreTrackInfo*)m_theTrackInfoArray.GetAt (lTrackIndex)) : NULL;} + + virtual long GetMeasureInfoCount () + {return m_theMeasureInfoArray.GetSize ();} + virtual MusicalScoreMeasureInfo* GetMeasureInfo (long lMeasureIndex) + {return lMeasureIndex < m_theMeasureInfoArray.GetSize () ? + ((MusicalScoreMeasureInfo*)m_theMeasureInfoArray.GetAt (lMeasureIndex)) : NULL;} + virtual long GetMeasureTime (long lMeasureIndex) + {return lMeasureIndex < m_theMeasureInfoArray.GetSize () ? + ((MusicalScoreMeasureInfo*)m_theMeasureInfoArray.GetAt (lMeasureIndex))->m_lTime : 0;} + virtual long GetMeasureLeft (long lMeasureIndex) + {return lMeasureIndex < m_theMeasureInfoArray.GetSize () ? + ((MusicalScoreMeasureInfo*)m_theMeasureInfoArray.GetAt (lMeasureIndex))->m_lLeft : 0;} + + + //------------------------------------------------------------------------- + // オーバーライド + //------------------------------------------------------------------------- +protected: + virtual BOOL PreCreateWindow (CREATESTRUCT& cs); + virtual void OnUpdateFrameTitle (BOOL bAddToTitle); + virtual void RecalcLayout (BOOL bNotify = TRUE); + virtual BOOL OnCreateClient (LPCREATESTRUCT lpcs, CCreateContext* pContext); + virtual BOOL OnCmdMsg (UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo); + + //------------------------------------------------------------------------- + // メッセージマップ + //------------------------------------------------------------------------- +protected: + afx_msg int OnCreate (LPCREATESTRUCT lpCreateStruct); + afx_msg void OnDestroy (); + afx_msg void OnSize (UINT nType, int cx, int cy); + afx_msg void OnTimer (UINT nIDEvent); + afx_msg BOOL OnEraseBkgnd (CDC* pDC); + + afx_msg void OnMDIActivate (BOOL bActivate, CWnd* pActivateWnd, CWnd* pDeactivateWnd); + afx_msg void OnPaint (); + afx_msg void OnKeyDown (UINT nChar, UINT nRepCnt, UINT nFlags); + afx_msg void OnLButtonDown (UINT nFlags, CPoint point); + afx_msg void OnRButtonDown (UINT nFlags, CPoint point); + afx_msg void OnLButtonUp (UINT nFlags, CPoint point); + afx_msg void OnRButtonUp (UINT nFlags, CPoint point); + afx_msg void OnMouseMove (UINT nFlags, CPoint point); + afx_msg void OnTimeZoomDown (); + afx_msg void OnTimeZoomUp (); + afx_msg void OnTrackZoomDown (); + afx_msg void OnTrackZoomUp (); + afx_msg void OnVScroll (UINT nSBCode, UINT nPos, CScrollBar* pScrollBar); + afx_msg void OnHScroll (UINT nSBCode, UINT nPos, CScrollBar* pScrollBar); + afx_msg void OnMusicalScorePen (); + afx_msg void OnUpdateMusicalScorePenUI (CCmdUI* pCmdUI); + afx_msg void OnMusicalScoreLine (); + afx_msg void OnUpdateMusicalScoreLineUI (CCmdUI* pCmdUI); + afx_msg void OnMusicalScoreEraser (); + afx_msg void OnUpdateMusicalScoreEraserUI (CCmdUI* pCmdUI); + afx_msg void OnMusicalScoreSelect (); + afx_msg void OnUpdateMusicalScoreSelectUI (CCmdUI* pCmdUI); + afx_msg void OnMusicalScoreSpeaker (); + afx_msg void OnUpdateMusicalScoreSpeakerUI (CCmdUI* pCmdUI); + afx_msg void OnMusicalScoreWholeNote (); + afx_msg void OnUpdateMusicalScoreWholeNoteUI (CCmdUI* pCmdUI); + afx_msg void OnMusicalScoreHalfNote (); + afx_msg void OnUpdateMusicalScoreHalfNoteUI (CCmdUI* pCmdUI); + afx_msg void OnMusicalScoreQuarterNote (); + afx_msg void OnUpdateMusicalScoreQuarterNoteUI (CCmdUI* pCmdUI); + afx_msg void OnMusicalScoreQuaverNote (); + afx_msg void OnUpdateMusicalScoreQuaverNoteUI (CCmdUI* pCmdUI); + afx_msg void OnMusicalScoreSemiQuaverNote (); + afx_msg void OnUpdateMusicalScoreSemiQuaverNoteUI (CCmdUI* pCmdUI); + afx_msg void OnMusicalScoreDemiSemiQuaverNote (); + afx_msg void OnUpdateMusicalScoreDemiSemiQuaverNoteUI (CCmdUI* pCmdUI); + afx_msg void OnMusicalScoreDotted (); + afx_msg void OnUpdateMusicalScoreDottedUI (CCmdUI* pCmdUI); + afx_msg void OnMusicalScoreTriplet (); + afx_msg void OnUpdateMusicalScoreTripletUI (CCmdUI* pCmdUI); + afx_msg void OnMusicalScoreOnlyCurTrack (); + afx_msg void OnUpdateMusicalScoreOnlyCurTrackUI (CCmdUI* pCmdUI); + afx_msg void OnMusicalScoreShowAllTrack (); + afx_msg void OnUpdateMusicalScoreShowAllTrackUI (CCmdUI* pCmdUI); + afx_msg void OnMusicalScoreAutoPageUpdate (); + afx_msg void OnUpdateMusicalScoreAutoPageUpdateUI (CCmdUI* pCmdUI); + + afx_msg void OnTrackComboSelEndOK (); + afx_msg void OnTrackListChkChange (); + afx_msg void OnTrackListSelChange (); + afx_msg void OnSnapComboSelEndOK (); + afx_msg void OnResolutionComboSelEndOK (); + + afx_msg void OnPopupTrackVisibleOn (); + afx_msg void OnUpdatePopupTrackVisibleOnUI (CCmdUI* pCmdUI); + afx_msg void OnPopupTrackVisibleOff (); + afx_msg void OnUpdatePopupTrackVisibleOffUI (CCmdUI* pCmdUI); + afx_msg void OnPopupTrackVisibleAll (); + afx_msg void OnUpdatePopupTrackVisibleAllUI (CCmdUI* pCmdUI); + afx_msg void OnPopupEventProperty (); + afx_msg void OnUpdatePopupEventPropertyUI (CCmdUI* pCmdUI); + + DECLARE_MESSAGE_MAP() +}; + + -- cgit v1.2.3