summaryrefslogtreecommitdiffstats
path: root/src/PianoRollFrame.h
blob: 72bdac98d00dda3ca538de1a72dfd1d82b71c2fa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
//******************************************************************************
// 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 */

#ifndef _PIANOROLLFRAME_H_
#define _PIANOROLLFRAME_H_

class CPianoRollFrame : public CChildFrame {
	DECLARE_DYNCREATE (CPianoRollFrame)

	//--------------------------------------------------------------------------
	// アトリビュート
	//--------------------------------------------------------------------------
protected:
	long m_lToolBar1Height;             // ツールバー1の高さ[pixel]
	long m_lKeyHeight;                  // キービュー(上ペイン)の高さ[pixel]
	long m_lScaleHeight;                // 上部目盛りビューの高さ[pixel]
	long m_lVelHeight;                  // ベロシティビュー(下ペイン)の高さ[pixel]
	long m_lScaleWidth;                 // 左部目盛りビューの幅[pixel]
	long m_lTimeWidth;                  // 時間ビュー(左ペイン)の幅[pixel]
	long m_lHScrollBarHeight;           // 水平スクロールバーの高さ[pixel]
	long m_lVScrollBarWidth;            // 垂直スクロールバーの幅[pixel]
	long m_lTrackListWidth;             // トラックリスト(右ペイン)の幅[pixel]
	long m_lKeyZoom;                    // キー方向拡大倍率[倍]
	long m_lTimeZoom;                   // タイム方向拡大倍率[倍]
	long m_lVelZoom;                    // ベロシティ方向ズーム倍率[倍]
	long m_lKeyScrollPos;               // キー方向スクロール位置[pixel]
	long m_lVelScrollPos;               // ベロシティ方向スクロール位置[pixel]
	long m_lTimeScrollPos;              // 時間方向スクロール位置[pixel]
public:
	CFont m_theFont;                    // ピアノロールウィンドウで使うフォント
public:
	CSekaijuToolBar m_wndToolBar1;      // ツールバー1
	CColorfulComboBox m_wndTrackCombo;  // トラックコンボボックス
	CComboBox m_wndChannelCombo;        // チャンネルコンボボックス
	CComboBox m_wndSnapCombo;           // スナップコンボボックス
	CComboBox m_wndVelocityCombo;       // ベロシティコンボボックス
	CComboBox m_wndDurationCombo;       // 音長さコンボボックス
	CComboBox m_wndGraphKindCombo;      // グラフの種類コンボボックス
	CComboBox m_wndGraphSnapCombo;      // グラフスナップコンボボックス
	CView* m_pDummyView;                // ダミービュー(Visible=FALSE)へのポインタ
	CView* m_pPrintView;                // 印刷用ビュー(Visible=FALSE)へのポインタ
	CView* m_pScaleView;                // 目盛りビューへのポインタ
	CView* m_pTimeScaleView;            // 時間目盛りビューへのポインタ
	CView* m_pKeyScaleView;             // 音階目盛りビューへのポインタ
	CView* m_pKeyTimeView;              // 音階-時間ビューへのポインタ
	CView* m_pVelScaleView;             // ベロシティ目盛りビューへのポインタ
	CView* m_pVelTimeView;              // ベロシティ-時間ビューへのポインタ
	CCheckListBox* m_pTrackListBox;     // トラックリストボックスへのポインタ
	CCheckListBox* m_pGraphKindListBox; // グラフの種類リストボックス
	CScrollBar m_wndTimeScroll;         // 時間方向スクロールバー
	CScrollBar m_wndKeyScroll;          // 音階方向スクロールバー
	CScrollBar m_wndVelScroll;          // ベロシティ方向スクロールバー
	CScrollBar m_wndSizeScroll;         // サイズ変更スクロールバー
	CBitmapButton m_wndTimeZoomUp;      // 時間方向拡大ボタン
	CBitmapButton m_wndTimeZoomDown;    // 時間方向縮小ボタン
	CBitmapButton m_wndVelZoomUp;       // ベロシティ方向拡大ボタン
	CBitmapButton m_wndVelZoomDown;     // ベロシティ方向縮小ボタン
	CBitmapButton m_wndKeyZoomUp;       // キー方向拡大ボタン
	CBitmapButton m_wndKeyZoomDown;     // キー方向縮小ボタン
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]は可視か?
	BOOL m_bOnlyCurGraph;               // 現在のグラフのみを表示するか?
	BOOL m_bShowAllGraph;               // すべてのグラフを表示するか?
	BOOL m_bGraphVisible[256];          // グラフ[0〜255]は可視か?

	//--------------------------------------------------------------------------
	// 構築と破壊
	//--------------------------------------------------------------------------
public:
	CPianoRollFrame ();                 // コンストラクタ
	virtual ~CPianoRollFrame();         // デストラクタ

	//--------------------------------------------------------------------------
	// オペレーション
	//--------------------------------------------------------------------------
public:
	virtual CSekaijuDoc* GetDocument ();
	virtual long GetTimeZoom ();
	virtual long GetKeyZoom ();
	virtual long GetVelZoom ();
	virtual long XtoTime (long x);
	virtual long TimetoX (long lTime);
	virtual long YtoKey (long y);
	virtual long KeytoY (long lKey);
	virtual long YtoPitchBend (long y);
	virtual long YtoVel (long y);
	virtual long YtoTempoBPM (long y);
	virtual long VeltoY (long lVel);
	virtual long PitchBendtoY (long lPitchBend);
	virtual long TempoBPMtoY (long lTempo);
	virtual long GetTimeScrollPos ();
	virtual long GetKeyScrollPos ();
	virtual long GetVelScrollPos ();
	virtual long SetTimeScrollPos (long lTimeScrollPos);
	virtual long SetKeyScrollPos (long lKeyScrollPos);
	virtual long SetVelScrollPos (long lVelScrollPos);
	virtual long GetVisibleLeftTime ();
	virtual long GetVisibleRightTime ();
	virtual long GetVisibleTopKey ();
	virtual long GetVisibleBottomKey ();
	virtual long GetVisibleTopVel ();
	virtual long GetVisibleBottomVel ();
	virtual void DrawSplitterCaptor (CDC* pDC, CPoint pt);
	virtual long GetCurTrackIndex ();
	virtual long GetCurChannel ();
	virtual long GetCurSnap ();
	virtual long GetCurVelocity ();
	virtual long GetCurDuration ();
	virtual long GetCurGraphKind ();
	virtual long GetCurGraphSnap ();
	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 SetCurGraphKind (long lCurGraphKind);
	virtual BOOL SetCurGraphSnap (long lCurGraphKind);
	virtual BOOL IsTrackVisible (long lTrackIndex);
	virtual BOOL SetTrackVisible (long lTrackIndex);
	virtual BOOL IsGraphVisible (long lGraphKind);
	virtual BOOL SetGraphVisible (long lGraphKind);
	virtual BOOL UpdateTrackCombo ();
	virtual BOOL UpdateGraphKindCombo ();
	virtual BOOL UpdateTrackList ();
	virtual BOOL UpdateGraphKindList ();
	virtual BOOL UpdateSnapCombo ();
	virtual BOOL UpdateVelocityCombo ();
	virtual BOOL UpdateDurationCombo ();
	virtual BOOL UpdateGraphSnapCombo ();
	virtual void RecalcKeyScrollInfo ();
	virtual void RecalcVelScrollInfo ();
	virtual void RecalcTimeScrollInfo ();


	//--------------------------------------------------------------------------
	// オーバーライド
	//--------------------------------------------------------------------------
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 OnKeyZoomDown ();
	afx_msg void OnKeyZoomUp ();
	afx_msg void OnVelZoomDown ();
	afx_msg void OnVelZoomUp ();
	afx_msg void OnVScroll (UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
	afx_msg void OnHScroll (UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
	afx_msg void OnPianoRollPen ();
	afx_msg void OnUpdatePianoRollPenUI (CCmdUI* pCmdUI);
	afx_msg void OnPianoRollLine ();
	afx_msg void OnUpdatePianoRollLineUI (CCmdUI* pCmdUI);
	afx_msg void OnPianoRollEraser ();
	afx_msg void OnUpdatePianoRollEraserUI (CCmdUI* pCmdUI);
	afx_msg void OnPianoRollSelect ();
	afx_msg void OnUpdatePianoRollSelectUI (CCmdUI* pCmdUI);
	afx_msg void OnPianoRollSpeaker ();
	afx_msg void OnUpdatePianoRollSpeakerUI (CCmdUI* pCmdUI);
	afx_msg void OnPianoRollOnlyCurTrack ();
	afx_msg void OnUpdatePianoRollOnlyCurTrackUI (CCmdUI* pCmdUI);
	afx_msg void OnPianoRollShowAllTrack ();
	afx_msg void OnUpdatePianoRollShowAllTrackUI (CCmdUI* pCmdUI);
	afx_msg void OnPianoRollOnlyCurGraph ();
	afx_msg void OnUpdatePianoRollOnlyCurGraphUI (CCmdUI* pCmdUI);
	afx_msg void OnPianoRollShowAllGraph ();
	afx_msg void OnUpdatePianoRollShowAllGraphUI (CCmdUI* pCmdUI);
	afx_msg void OnPianoRollAutoPageUpdate ();
	afx_msg void OnUpdatePianoRollAutoPageUpdateUI (CCmdUI* pCmdUI);

	afx_msg void OnTrackComboSelEndOK ();	
	afx_msg void OnTrackListChkChange ();
	afx_msg void OnTrackListSelChange ();
	afx_msg void OnGraphKindComboSelEndOK ();	
	afx_msg void OnGraphKindListChkChange ();
	afx_msg void OnGraphKindListSelChange ();

	afx_msg void OnPopupEventProperty ();
	afx_msg void OnUpdatePopupEventPropertyUI (CCmdUI* pCmdUI);
	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 OnPopupGraphKindVisibleOn ();
	afx_msg void OnUpdatePopupGraphKindVisibleOnUI (CCmdUI* pCmdUI);
	afx_msg void OnPopupGraphKindVisibleOff ();
	afx_msg void OnUpdatePopupGraphKindVisibleOffUI (CCmdUI* pCmdUI);
	afx_msg void OnPopupGraphKindVisibleAll ();
	afx_msg void OnUpdatePopupGraphKindVisibleAllUI (CCmdUI* pCmdUI);

	DECLARE_MESSAGE_MAP()
};


#endif