OSDN Git Service

#none some refactors: To change names for local variables, and replaced from "0x50f...
[dtxmania/dtxmania.git] / DTXCreatorプロジェクト / コード / 05.譜面 / C譜面管理.cs
1 using System;\r
2 using System.Collections.Generic;\r
3 using System.Text;\r
4 using System.Drawing;\r
5 using System.Drawing.Drawing2D;\r
6 using System.Windows.Forms;\r
7 using DTXCreator.UndoRedo;\r
8 using FDK;\r
9 \r
10 namespace DTXCreator.譜面\r
11 {\r
12         internal class C譜面管理\r
13         {\r
14                 public Bitmap bmp背景画像;\r
15                 public Dictionary<int, float> dicBPx = new Dictionary<int, float>();\r
16                 public Dictionary<int, C小節> dic小節 = new Dictionary<int, C小節>();\r
17                 public List<Cレーン> listレーン = new List<Cレーン>();\r
18                 public static readonly int nレーン割付チップ番号表示高さdot = 10;\r
19                 public static readonly int nレーン番号表示高さdot = 0x20;\r
20                 public int n現在のガイド幅grid = ( C小節.n基準の高さgrid / 0x10 );\r
21                 public int n現在の譜面表示下辺の譜面先頭からの位置grid;\r
22                 public string strPATH_WAV = "";\r
23 \r
24                 public C譜面管理( Cメインフォーム cm )\r
25                 {\r
26                         this._Form = cm;\r
27                 }\r
28                 public bool bOPENチップである( Cチップ cc )\r
29                 {\r
30                         Cレーン cレーン = this.listレーン[ cc.nレーン番号0to ];\r
31                         return ( ( cc.n値・整数1to1295 == 2 ) && ( ( cレーン.eレーン種別 == Cレーン.E種別.GtR ) || ( cレーン.eレーン種別 == Cレーン.E種別.BsR ) ) );\r
32                 }\r
33                 public bool b確定選択中のチップがある()\r
34                 {\r
35                         foreach( KeyValuePair<int, C小節> pair in this.dic小節 )\r
36                         {\r
37                                 foreach( Cチップ cチップ in pair.Value.listチップ )\r
38                                 {\r
39                                         if( cチップ.b確定選択中 || cチップ.bドラッグで選択中 )\r
40                                         {\r
41                                                 return true;\r
42                                         }\r
43                                 }\r
44                         }\r
45                         return false;\r
46                 }\r
47                 public decimal dc譜面先頭からの位置gridにおけるBPMを返す( int n譜面先頭からの位置grid )\r
48                 {\r
49                         decimal num = this._Form.dc現在のBPM;\r
50                         C小節 c小節 = this.p譜面先頭からの位置gridを含む小節を返す( n譜面先頭からの位置grid );\r
51                         if( c小節 != null )\r
52                         {\r
53                                 for( int i = 0; i <= c小節.n小節番号0to3599; i++ )\r
54                                 {\r
55                                         C小節 c小節2 = this.p小節を返す( i );\r
56                                         if( c小節2 != null )\r
57                                         {\r
58                                                 int num3 = this.n譜面先頭からみた小節先頭の位置gridを返す( i );\r
59                                                 foreach( Cチップ cチップ in c小節2.listチップ )\r
60                                                 {\r
61                                                         if( ( cチップ.nチャンネル番号00toFF == 8 ) && ( ( num3 + cチップ.n位置grid ) <= n譜面先頭からの位置grid ) )\r
62                                                         {\r
63                                                                 num = (decimal) cチップ.f値・浮動小数;\r
64                                                         }\r
65                                                 }\r
66                                         }\r
67                                 }\r
68                         }\r
69                         return num;\r
70                 }\r
71                 public int nX座標dotが位置するレーン番号を返す( int nXdot )\r
72                 {\r
73                         if( nXdot >= 0 )\r
74                         {\r
75                                 int num = 0;\r
76                                 int num2 = 0;\r
77                                 foreach( Cレーン cレーン in this.listレーン )\r
78                                 {\r
79                                         num += cレーン.n幅dot;\r
80                                         if( nXdot < num )\r
81                                         {\r
82                                                 return num2;\r
83                                         }\r
84                                         num2++;\r
85                                 }\r
86                         }\r
87                         return -1;\r
88                 }\r
89                 public int nY座標dotが位置するgridを返す・ガイド幅単位( int nY )\r
90                 {\r
91                         int num = this.nY座標dotが位置するgridを返す・最高解像度( nY );\r
92                         C小節 c小節 = this.p譜面先頭からの位置gridを含む小節を返す( num );\r
93                         if( c小節 == null )\r
94                         {\r
95                                 c小節 = this.p小節を返す( this.n現在の最大の小節番号を返す() );\r
96                         }\r
97                         int num2 = this.n譜面先頭からみた小節先頭の位置gridを返す( c小節.n小節番号0to3599 );\r
98                         int num3 = ( ( num - num2 ) / this.n現在のガイド幅grid ) * this.n現在のガイド幅grid;\r
99                         return ( num2 + num3 );\r
100                 }\r
101                 public int nY座標dotが位置するgridを返す・最高解像度( int nY )\r
102                 {\r
103                         int num = this._Form.pictureBox譜面パネル.ClientSize.Height - nY;\r
104                         return ( ( num / C小節.n1グリッドの高さdot ) + this.n現在の譜面表示下辺の譜面先頭からの位置grid );\r
105                 }\r
106                 public int nレーンの左端X座標dotを返す( int nレーン番号0to )\r
107                 {\r
108                         if( ( nレーン番号0to >= 0 ) && ( nレーン番号0to < this.listレーン.Count ) )\r
109                         {\r
110                                 return this.listレーン[ nレーン番号0to ].n位置Xdot;\r
111                         }\r
112                         return -1;\r
113                 }\r
114                 public int nレーン名に対応するレーン番号を返す( string strレーン名 )\r
115                 {\r
116                         int nLaneNo = 0;\r
117                         foreach( Cレーン cレーン in this.listレーン )\r
118                         {\r
119                                 if( cレーン.strレーン名.Equals( strレーン名 ) )\r
120                                 {\r
121                                         return nLaneNo;\r
122                                 }\r
123                                 nLaneNo++;\r
124                         }\r
125                         return -1;\r
126                 }\r
127                 public int n現在の最大の小節番号を返す()\r
128                 {\r
129                         int nBar = -1;\r
130                         foreach( KeyValuePair<int, C小節> pair in this.dic小節 )\r
131                         {\r
132                                 C小節 c小節 = pair.Value;\r
133                                 if( c小節.n小節番号0to3599 > nBar )\r
134                                 {\r
135                                         nBar = c小節.n小節番号0to3599;\r
136                                 }\r
137                         }\r
138                         return nBar;\r
139                 }\r
140                 public int n全小節の高さdotの合計を返す()\r
141                 {\r
142                         int nHeights = 0;\r
143                         foreach( KeyValuePair<int, C小節> pair in this.dic小節 )\r
144                         {\r
145                                 nHeights += pair.Value.n小節長倍率を考慮した現在の小節の高さdot;\r
146                         }\r
147                         return nHeights;\r
148                 }\r
149                 public int n全小節の高さgridの合計を返す()\r
150                 {\r
151                         int num = 0;\r
152                         foreach( KeyValuePair<int, C小節> pair in this.dic小節 )\r
153                         {\r
154                                 num += pair.Value.n小節長倍率を考慮した現在の小節の高さgrid;\r
155                         }\r
156                         return num;\r
157                 }\r
158                 public int n譜面先頭からの位置gridから描画領域内のY座標dotを返す( int n譜面先頭からの位置grid, Size sz描画領域dot )\r
159                 {\r
160                         int num = n譜面先頭からの位置grid - this.n現在の譜面表示下辺の譜面先頭からの位置grid;\r
161                         return ( sz描画領域dot.Height - ( num * C小節.n1グリッドの高さdot ) );\r
162                 }\r
163                 public int n譜面先頭からみた小節先頭の位置gridを返す( int n小節番号0to3599 )\r
164                 {\r
165                         if( ( n小節番号0to3599 < 0 ) || ( n小節番号0to3599 > this.n現在の最大の小節番号を返す() ) )\r
166                         {\r
167                                 return -1;\r
168                         }\r
169                         int num = 0;\r
170                         for( int i = 0; i < n小節番号0to3599; i++ )\r
171                         {\r
172                                 C小節 c小節 = this.p小節を返す( i );\r
173                                 if( c小節 != null )\r
174                                 {\r
175                                         num += c小節.n小節長倍率を考慮した現在の小節の高さgrid;\r
176                                 }\r
177                         }\r
178                         return num;\r
179                 }\r
180                 public C小節 pチップの存在する小節を返す( Cチップ cc )\r
181                 {\r
182                         foreach( KeyValuePair<int, C小節> pair in this.dic小節 )\r
183                         {\r
184                                 C小節 c小節 = pair.Value;\r
185                                 if( c小節.listチップ.Contains( cc ) )\r
186                                 {\r
187                                         return c小節;\r
188                                 }\r
189                         }\r
190                         return null;\r
191                 }\r
192                 public Cチップ p指定された座標dotにあるチップを返す( int x, int y )\r
193                 {\r
194                         int num = this.nX座標dotが位置するレーン番号を返す( x );\r
195                         if( num >= 0 )\r
196                         {\r
197                                 int num2 = this.nY座標dotが位置するgridを返す・最高解像度( y );\r
198                                 C小節 c小節 = this.p譜面先頭からの位置gridを含む小節を返す( num2 );\r
199                                 if( c小節 == null )\r
200                                 {\r
201                                         return null;\r
202                                 }\r
203                                 int num3 = this.n譜面先頭からみた小節先頭の位置gridを返す( c小節.n小節番号0to3599 );\r
204                                 foreach( Cチップ cチップ in c小節.listチップ )\r
205                                 {\r
206                                         int num4 = num3 + cチップ.n位置grid;\r
207                                         int num5 = C小節.n位置変換dot2grid( Cチップ.nチップの高さdot );\r
208                                         if( ( ( cチップ.nレーン番号0to == num ) && ( num4 <= num2 ) ) && ( num2 <= ( num4 + num5 ) ) )\r
209                                         {\r
210                                                 return cチップ;\r
211                                         }\r
212                                 }\r
213                         }\r
214                         return null;\r
215                 }\r
216                 public Cチップ p指定位置にあるチップを返す( int n小節番号0to, int nレーン番号0to, int n小節内の位置grid )\r
217                 {\r
218                         C小節 c小節 = this.p小節を返す( n小節番号0to );\r
219                         if( c小節 != null )\r
220                         {\r
221                                 for( int i = 0; i < c小節.listチップ.Count; i++ )\r
222                                 {\r
223                                         Cチップ cチップ = c小節.listチップ[ i ];\r
224                                         if( ( cチップ.n位置grid == n小節内の位置grid ) && ( cチップ.nレーン番号0to == nレーン番号0to ) )\r
225                                         {\r
226                                                 return cチップ;\r
227                                         }\r
228                                 }\r
229                         }\r
230                         return null;\r
231                 }\r
232                 public C小節 p小節を返す( int n小節番号0to3599 )\r
233                 {\r
234                         C小節 c小節 = null;\r
235                         if( this.dic小節.TryGetValue( n小節番号0to3599, out c小節 ) )\r
236                         {\r
237                                 return c小節;\r
238                         }\r
239                         return null;\r
240                 }\r
241                 public C小節 p譜面先頭からの位置gridを含む小節を返す( int n譜面先頭からの位置grid )\r
242                 {\r
243                         int num = 0;\r
244                         int num2 = this.n現在の最大の小節番号を返す();\r
245                         for( int i = 0; i <= num2; i++ )\r
246                         {\r
247                                 C小節 c小節 = this.p小節を返す( i );\r
248                                 if( c小節 != null )\r
249                                 {\r
250                                         num += c小節.n小節長倍率を考慮した現在の小節の高さgrid;\r
251                                         if( n譜面先頭からの位置grid < num )\r
252                                         {\r
253                                                 return c小節;\r
254                                         }\r
255                                 }\r
256                         }\r
257                         return null;\r
258                 }\r
259                 public void tチップを削除する( int nレーン番号0to, int n譜面先頭からの位置grid )\r
260                 {\r
261                         C小節 c小節 = this.p譜面先頭からの位置gridを含む小節を返す( n譜面先頭からの位置grid );\r
262                         if( c小節 != null )\r
263                         {\r
264                                 bool flag3;\r
265                                 int num = n譜面先頭からの位置grid - this.n譜面先頭からみた小節先頭の位置gridを返す( c小節.n小節番号0to3599 );\r
266                                 this._Form.mgrUndoRedo管理者.tトランザクション記録を開始する();\r
267                                 do\r
268                                 {\r
269                                         Cレーン cレーン = this.listレーン[ nレーン番号0to ];\r
270                                         bool flag = ( ( cレーン.eレーン種別 == Cレーン.E種別.GtR ) || ( cレーン.eレーン種別 == Cレーン.E種別.GtG ) ) || ( cレーン.eレーン種別 == Cレーン.E種別.GtB );\r
271                                         bool flag2 = ( ( cレーン.eレーン種別 == Cレーン.E種別.BsR ) || ( cレーン.eレーン種別 == Cレーン.E種別.BsG ) ) || ( cレーン.eレーン種別 == Cレーン.E種別.BsB );\r
272                                         flag3 = true;\r
273                                         foreach( Cチップ cチップ in c小節.listチップ )\r
274                                         {\r
275                                                 if( cチップ.n位置grid == num )\r
276                                                 {\r
277                                                         if( cチップ.nレーン番号0to == nレーン番号0to )\r
278                                                         {\r
279                                                                 Cチップ cc = new Cチップ();\r
280                                                                 cc.tコピーfrom( cチップ );\r
281                                                                 Cチップ配置用UndoRedo redo = new Cチップ配置用UndoRedo( c小節.n小節番号0to3599, cc );\r
282                                                                 this._Form.mgrUndoRedo管理者.tノードを追加する( new CUndoRedoセル<Cチップ配置用UndoRedo>( null, new DGUndoを実行する<Cチップ配置用UndoRedo>( this.tチップ削除のUndo ), new DGRedoを実行する<Cチップ配置用UndoRedo>( this.tチップ削除のRedo ), redo, redo ) );\r
283                                                                 c小節.listチップ.Remove( cチップ );\r
284                                                                 flag3 = false;\r
285                                                                 this._Form.b未保存 = true;\r
286                                                                 break;\r
287                                                         }\r
288                                                         if( ( flag && ( this.listレーン[ cチップ.nレーン番号0to ].eレーン種別 == Cレーン.E種別.GtR ) ) && ( cチップ.n値・整数1to1295 == 2 ) )\r
289                                                         {\r
290                                                                 Cチップ cチップ3 = new Cチップ();\r
291                                                                 cチップ3.tコピーfrom( cチップ );\r
292                                                                 Cチップ配置用UndoRedo redo2 = new Cチップ配置用UndoRedo( c小節.n小節番号0to3599, cチップ3 );\r
293                                                                 this._Form.mgrUndoRedo管理者.tノードを追加する( new CUndoRedoセル<Cチップ配置用UndoRedo>( null, new DGUndoを実行する<Cチップ配置用UndoRedo>( this.tチップ削除のUndo ), new DGRedoを実行する<Cチップ配置用UndoRedo>( this.tチップ削除のRedo ), redo2, redo2 ) );\r
294                                                                 c小節.listチップ.Remove( cチップ );\r
295                                                                 flag3 = false;\r
296                                                                 this._Form.b未保存 = true;\r
297                                                                 break;\r
298                                                         }\r
299                                                         if( ( flag2 && ( this.listレーン[ cチップ.nレーン番号0to ].eレーン種別 == Cレーン.E種別.BsR ) ) && ( cチップ.n値・整数1to1295 == 2 ) )\r
300                                                         {\r
301                                                                 Cチップ cチップ4 = new Cチップ();\r
302                                                                 cチップ4.tコピーfrom( cチップ );\r
303                                                                 Cチップ配置用UndoRedo redo3 = new Cチップ配置用UndoRedo( c小節.n小節番号0to3599, cチップ4 );\r
304                                                                 this._Form.mgrUndoRedo管理者.tノードを追加する( new CUndoRedoセル<Cチップ配置用UndoRedo>( null, new DGUndoを実行する<Cチップ配置用UndoRedo>( this.tチップ削除のUndo ), new DGRedoを実行する<Cチップ配置用UndoRedo>( this.tチップ削除のRedo ), redo3, redo3 ) );\r
305                                                                 c小節.listチップ.Remove( cチップ );\r
306                                                                 flag3 = false;\r
307                                                                 this._Form.b未保存 = true;\r
308                                                                 break;\r
309                                                         }\r
310                                                 }\r
311                                         }\r
312                                 }\r
313                                 while( !flag3 );\r
314                                 this._Form.tUndoRedo用GUIの有効・無効を設定する();\r
315                                 this._Form.mgrUndoRedo管理者.tトランザクション記録を終了する();\r
316                         }\r
317                 }\r
318                 public void tチップを配置または置換する( int nレーン番号0to, int n譜面先頭からの位置grid, int nチップ値・整数, float fチップ値・浮動小数, bool b裏として配置 )\r
319                 {\r
320                         C小節 c小節 = this.p譜面先頭からの位置gridを含む小節を返す( n譜面先頭からの位置grid );\r
321                         if( c小節 != null )\r
322                         {\r
323                                 this._Form.mgrUndoRedo管理者.tトランザクション記録を開始する();\r
324                                 this.tチップを削除する( nレーン番号0to, n譜面先頭からの位置grid );\r
325                                 if( ( ( this.listレーン[ nレーン番号0to ].eレーン種別 == Cレーン.E種別.GtR ) || ( this.listレーン[ nレーン番号0to ].eレーン種別 == Cレーン.E種別.BsR ) ) && ( nチップ値・整数 == 2 ) )\r
326                                 {\r
327                                         this.tチップを削除する( nレーン番号0to + 1, n譜面先頭からの位置grid );\r
328                                         this.tチップを削除する( nレーン番号0to + 2, n譜面先頭からの位置grid );\r
329                                 }\r
330                                 Cレーン cレーン = this.listレーン[ nレーン番号0to ];\r
331                                 Cチップ item = new Cチップ();\r
332                                 item.nチャンネル番号00toFF = b裏として配置 ? cレーン.nチャンネル番号・裏00toFF : cレーン.nチャンネル番号・表00toFF;\r
333                                 item.nレーン番号0to = nレーン番号0to;\r
334                                 item.n位置grid = n譜面先頭からの位置grid - this.n譜面先頭からみた小節先頭の位置gridを返す( c小節.n小節番号0to3599 );\r
335                                 item.n値・整数1to1295 = nチップ値・整数;\r
336                                 item.f値・浮動小数 = fチップ値・浮動小数;\r
337                                 item.b裏 = b裏として配置;\r
338                                 c小節.listチップ.Add( item );\r
339                                 Cチップ cc = new Cチップ();\r
340                                 cc.tコピーfrom( item );\r
341                                 Cチップ配置用UndoRedo redo = new Cチップ配置用UndoRedo( c小節.n小節番号0to3599, cc );\r
342                                 this._Form.mgrUndoRedo管理者.tノードを追加する( new CUndoRedoセル<Cチップ配置用UndoRedo>( null, new DGUndoを実行する<Cチップ配置用UndoRedo>( this.tチップ配置のUndo ), new DGRedoを実行する<Cチップ配置用UndoRedo>( this.tチップ配置のRedo ), redo, redo ) );\r
343                                 int num = this.n現在の最大の小節番号を返す();\r
344                                 if( c小節.n小節番号0to3599 == num )\r
345                                 {\r
346                                         for( int i = num + 1; i <= ( num + 4 ); i++ )\r
347                                         {\r
348                                                 this.dic小節.Add( i, new C小節( i ) );\r
349                                                 this._Form.mgrUndoRedo管理者.tノードを追加する( new CUndoRedoセル<int>( null, new DGUndoを実行する<int>( this.t小節挿入のUndo ), new DGRedoを実行する<int>( this.t小節挿入のRedo ), i, i ) );\r
350                                         }\r
351                                 }\r
352                                 this._Form.mgrUndoRedo管理者.tトランザクション記録を終了する();\r
353                                 this._Form.tUndoRedo用GUIの有効・無効を設定する();\r
354                                 this._Form.b未保存 = true;\r
355                         }\r
356                 }\r
357                 public void tチップ削除のRedo( Cチップ配置用UndoRedo ur変更前, Cチップ配置用UndoRedo ur変更後 )\r
358                 {\r
359                         C小節 c小節 = this.p小節を返す( ur変更前.n小節番号0to );\r
360                         if( c小節 != null )\r
361                         {\r
362                                 for( int i = 0; i < c小節.listチップ.Count; i++ )\r
363                                 {\r
364                                         Cチップ cチップ = c小節.listチップ[ i ];\r
365                                         if( ( cチップ.n位置grid == ur変更前.cc.n位置grid ) && ( cチップ.nレーン番号0to == ur変更前.cc.nレーン番号0to ) )\r
366                                         {\r
367                                                 c小節.listチップ.RemoveAt( i );\r
368                                                 this._Form.b未保存 = true;\r
369                                                 return;\r
370                                         }\r
371                                 }\r
372                         }\r
373                 }\r
374                 public void tチップ削除のUndo( Cチップ配置用UndoRedo ur変更前, Cチップ配置用UndoRedo ur変更後 )\r
375                 {\r
376                         C小節 c小節 = this.p小節を返す( ur変更前.n小節番号0to );\r
377                         if( c小節 != null )\r
378                         {\r
379                                 Cチップ item = new Cチップ();\r
380                                 item.tコピーfrom( ur変更前.cc );\r
381                                 c小節.listチップ.Add( item );\r
382                                 this._Form.b未保存 = true;\r
383                         }\r
384                 }\r
385                 public void tチップ選択のRedo( Cチップ位置用UndoRedo ur変更前, Cチップ位置用UndoRedo ur変更後 )\r
386                 {\r
387                         Cチップ cチップ = this.p指定位置にあるチップを返す( ur変更前.n小節番号0to, ur変更前.nレーン番号0to, ur変更前.n位置grid );\r
388                         if( cチップ != null )\r
389                         {\r
390                                 cチップ.b確定選択中 = true;\r
391                         }\r
392                 }\r
393                 public void tチップ選択のUndo( Cチップ位置用UndoRedo ur変更前, Cチップ位置用UndoRedo ur変更後 )\r
394                 {\r
395                         Cチップ cチップ = this.p指定位置にあるチップを返す( ur変更前.n小節番号0to, ur変更前.nレーン番号0to, ur変更前.n位置grid );\r
396                         if( cチップ != null )\r
397                         {\r
398                                 cチップ.b確定選択中 = false;\r
399                         }\r
400                 }\r
401                 public void tチップ選択解除のRedo( Cチップ位置用UndoRedo ur変更前, Cチップ位置用UndoRedo ur変更後 )\r
402                 {\r
403                         Cチップ cチップ = this.p指定位置にあるチップを返す( ur変更前.n小節番号0to, ur変更前.nレーン番号0to, ur変更前.n位置grid );\r
404                         if( cチップ != null )\r
405                         {\r
406                                 cチップ.b確定選択中 = false;\r
407                         }\r
408                 }\r
409                 public void tチップ選択解除のUndo( Cチップ位置用UndoRedo ur変更前, Cチップ位置用UndoRedo ur変更後 )\r
410                 {\r
411                         Cチップ cチップ = this.p指定位置にあるチップを返す( ur変更前.n小節番号0to, ur変更前.nレーン番号0to, ur変更前.n位置grid );\r
412                         if( cチップ != null )\r
413                         {\r
414                                 cチップ.b確定選択中 = true;\r
415                         }\r
416                 }\r
417                 public void tチップ配置のRedo( Cチップ配置用UndoRedo ur変更前, Cチップ配置用UndoRedo ur変更後 )\r
418                 {\r
419                         C小節 c小節 = this.p小節を返す( ur変更前.n小節番号0to );\r
420                         if( c小節 != null )\r
421                         {\r
422                                 Cチップ item = new Cチップ();\r
423                                 item.tコピーfrom( ur変更前.cc );\r
424                                 c小節.listチップ.Add( item );\r
425                                 this._Form.b未保存 = true;\r
426                         }\r
427                 }\r
428                 public void tチップ配置のUndo( Cチップ配置用UndoRedo ur変更前, Cチップ配置用UndoRedo ur変更後 )\r
429                 {\r
430                         C小節 c小節 = this.p小節を返す( ur変更前.n小節番号0to );\r
431                         if( c小節 != null )\r
432                         {\r
433                                 for( int i = 0; i < c小節.listチップ.Count; i++ )\r
434                                 {\r
435                                         Cチップ cチップ = c小節.listチップ[ i ];\r
436                                         if( ( cチップ.n位置grid == ur変更前.cc.n位置grid ) && ( cチップ.nレーン番号0to == ur変更前.cc.nレーン番号0to ) )\r
437                                         {\r
438                                                 c小節.listチップ.RemoveAt( i );\r
439                                                 this._Form.b未保存 = true;\r
440                                                 return;\r
441                                         }\r
442                                 }\r
443                         }\r
444                 }\r
445                 public void tチップ番号置換のRedo( Cチップ位置用UndoRedo ur変更前, Cチップ位置用UndoRedo ur変更後 )\r
446                 {\r
447                         Cチップ cチップ = this.p指定位置にあるチップを返す( ur変更前.n小節番号0to, ur変更前.nレーン番号0to, ur変更前.n位置grid );\r
448                         if( cチップ != null )\r
449                         {\r
450                                 cチップ.n値・整数1to1295 = ur変更後.n値・整数1to1295;\r
451                                 this._Form.b未保存 = true;\r
452                         }\r
453                 }\r
454                 public void tチップ番号置換のUndo( Cチップ位置用UndoRedo ur変更前, Cチップ位置用UndoRedo ur変更後 )\r
455                 {\r
456                         Cチップ cチップ = this.p指定位置にあるチップを返す( ur変更後.n小節番号0to, ur変更後.nレーン番号0to, ur変更後.n位置grid );\r
457                         if( cチップ != null )\r
458                         {\r
459                                 cチップ.n値・整数1to1295 = ur変更前.n値・整数1to1295;\r
460                                 this._Form.b未保存 = true;\r
461                         }\r
462                 }\r
463                 public void tチップ表裏反転のRedo( Cチップ位置用UndoRedo ur変更前, Cチップ位置用UndoRedo ur変更後 )\r
464                 {\r
465                         Cチップ cチップ = this.p指定位置にあるチップを返す( ur変更前.n小節番号0to, ur変更前.nレーン番号0to, ur変更前.n位置grid );\r
466                         if( cチップ != null )\r
467                         {\r
468                                 if( cチップ.b裏 )\r
469                                 {\r
470                                         cチップ.nチャンネル番号00toFF = this.listレーン[ cチップ.nレーン番号0to ].nチャンネル番号・表00toFF;\r
471                                         cチップ.b裏 = false;\r
472                                 }\r
473                                 else\r
474                                 {\r
475                                         cチップ.nチャンネル番号00toFF = this.listレーン[ cチップ.nレーン番号0to ].nチャンネル番号・裏00toFF;\r
476                                         cチップ.b裏 = true;\r
477                                 }\r
478                                 this._Form.b未保存 = true;\r
479                         }\r
480                 }\r
481                 public void tチップ表裏反転のUndo( Cチップ位置用UndoRedo ur変更前, Cチップ位置用UndoRedo ur変更後 )\r
482                 {\r
483                         Cチップ cチップ = this.p指定位置にあるチップを返す( ur変更前.n小節番号0to, ur変更前.nレーン番号0to, ur変更前.n位置grid );\r
484                         if( cチップ != null )\r
485                         {\r
486                                 if( cチップ.b裏 )\r
487                                 {\r
488                                         cチップ.nチャンネル番号00toFF = this.listレーン[ cチップ.nレーン番号0to ].nチャンネル番号・表00toFF;\r
489                                         cチップ.b裏 = false;\r
490                                 }\r
491                                 else\r
492                                 {\r
493                                         cチップ.nチャンネル番号00toFF = this.listレーン[ cチップ.nレーン番号0to ].nチャンネル番号・裏00toFF;\r
494                                         cチップ.b裏 = true;\r
495                                 }\r
496                                 this._Form.b未保存 = true;\r
497                         }\r
498                 }\r
499                 public void t初期化()\r
500                 {\r
501                         this.t初期化・listレーンの生成();\r
502                         this.t初期化・小節を10個まで作成する();\r
503                         this.t初期化・背景画像を生成する();\r
504                         this.t初期化・スクロールバーを初期設定する();\r
505                 }\r
506                 public void t小節削除のRedo( int nダミー, int n削除する小節番号0to )\r
507                 {\r
508                         this.dic小節.Remove( n削除する小節番号0to );\r
509                         int num = this.n現在の最大の小節番号を返す();\r
510                         for( int i = n削除する小節番号0to + 1; i <= num; i++ )\r
511                         {\r
512                                 C小節 c小節 = this.p小節を返す( i );\r
513                                 if( c小節 != null )\r
514                                 {\r
515                                         this.dic小節.Remove( i );\r
516                                         c小節.n小節番号0to3599 = i - 1;\r
517                                         this.dic小節.Add( c小節.n小節番号0to3599, c小節 );\r
518                                 }\r
519                         }\r
520                         this._Form.b未保存 = true;\r
521                 }\r
522                 public void t小節削除のUndo( int n削除された小節番号0to, int nダミー )\r
523                 {\r
524                         for( int i = this.n現在の最大の小節番号を返す(); i >= n削除された小節番号0to; i-- )\r
525                         {\r
526                                 C小節 c小節 = this.p小節を返す( i );\r
527                                 if( c小節 != null )\r
528                                 {\r
529                                         this.dic小節.Remove( i );\r
530                                         c小節.n小節番号0to3599 = i + 1;\r
531                                         this.dic小節.Add( c小節.n小節番号0to3599, c小節 );\r
532                                 }\r
533                         }\r
534                         this.dic小節.Add( n削除された小節番号0to, new C小節( n削除された小節番号0to ) );\r
535                         this._Form.b未保存 = true;\r
536                 }\r
537                 public void t小節挿入のRedo( int nダミー, int n挿入する小節番号0to )\r
538                 {\r
539                         for( int i = this.n現在の最大の小節番号を返す(); i >= n挿入する小節番号0to; i-- )\r
540                         {\r
541                                 C小節 c小節 = this.p小節を返す( i );\r
542                                 if( c小節 != null )\r
543                                 {\r
544                                         this.dic小節.Remove( i );\r
545                                         c小節.n小節番号0to3599 = i + 1;\r
546                                         this.dic小節.Add( c小節.n小節番号0to3599, c小節 );\r
547                                 }\r
548                         }\r
549                         this.dic小節.Add( n挿入する小節番号0to, new C小節( n挿入する小節番号0to ) );\r
550                         this._Form.b未保存 = true;\r
551                 }\r
552                 public void t小節挿入のUndo( int n挿入された小節番号0to, int nダミー )\r
553                 {\r
554                         this.dic小節.Remove( n挿入された小節番号0to );\r
555                         int num = this.n現在の最大の小節番号を返す();\r
556                         for( int i = n挿入された小節番号0to + 1; i <= num; i++ )\r
557                         {\r
558                                 C小節 c小節 = this.p小節を返す( i );\r
559                                 if( c小節 != null )\r
560                                 {\r
561                                         this.dic小節.Remove( i );\r
562                                         c小節.n小節番号0to3599 = i - 1;\r
563                                         this.dic小節.Add( c小節.n小節番号0to3599, c小節 );\r
564                                 }\r
565                         }\r
566                         this._Form.b未保存 = true;\r
567                 }\r
568                 public void t小節長変更のRedo( C小節用UndoRedo ur変更前, C小節用UndoRedo ur変更後 )\r
569                 {\r
570                         C小節 c小節 = this.p小節を返す( ur変更後.n小節番号0to );\r
571                         if( c小節 != null )\r
572                         {\r
573                                 c小節.f小節長倍率 = ur変更後.f倍率;\r
574                                 this._Form.b未保存 = true;\r
575                         }\r
576                 }\r
577                 public void t小節長変更のUndo( C小節用UndoRedo ur変更前, C小節用UndoRedo ur変更後 )\r
578                 {\r
579                         C小節 c小節 = this.p小節を返す( ur変更前.n小節番号0to );\r
580                         if( c小節 != null )\r
581                         {\r
582                                 c小節.f小節長倍率 = ur変更前.f倍率;\r
583                                 this._Form.b未保存 = true;\r
584                         }\r
585                 }\r
586                 public void t垂直スクロールバーと譜面可視領域の上下位置の調整()\r
587                 {\r
588                         VScrollBar bar = this._Form.vScrollBar譜面用垂直スクロールバー;\r
589                         PictureBox box = this._Form.pictureBox譜面パネル;\r
590                         bar.Minimum = 0;\r
591                         bar.Maximum = this.n全小節の高さgridの合計を返す() - 1;\r
592                         bar.SmallChange = C小節.n基準の高さgrid / 0x10;\r
593                         bar.LargeChange = C小節.n基準の高さgrid;\r
594                         bar.Enabled = bar.Maximum > bar.LargeChange;\r
595                         if( bar.Enabled )\r
596                         {\r
597                                 this.n現在の譜面表示下辺の譜面先頭からの位置grid = ( ( bar.Maximum + 1 ) - bar.LargeChange ) - bar.Value;\r
598                                 box.Refresh();\r
599                         }\r
600                 }\r
601                 public void t水平スクロールバーと譜面パネル左右位置の調整()\r
602                 {\r
603                         HScrollBar bar = this._Form.hScrollBar譜面用水平スクロールバー;\r
604                         SplitContainer container = this._Form.splitContainerタブと譜面を分割;\r
605                         PictureBox box = this._Form.pictureBox譜面パネル;\r
606                         bar.Minimum = 0;\r
607                         bar.Maximum = box.Width - 1;\r
608                         bar.SmallChange = 5;\r
609                         bar.LargeChange = container.Panel2.Width;\r
610                         bar.Enabled = bar.Maximum > bar.LargeChange;\r
611                         if( bar.Enabled )\r
612                         {\r
613                                 int num = bar.Value;\r
614                                 if( ( num + bar.LargeChange ) > bar.Maximum )\r
615                                 {\r
616                                         num = ( bar.Maximum - bar.LargeChange ) + 1;\r
617                                 }\r
618                                 bar.Value = num;\r
619                                 box.Location = new Point( -num, 0 );\r
620                                 box.Refresh();\r
621                         }\r
622                 }\r
623                 public void t譜面を描画する( Graphics g, Size sz描画対象サイズdot, Rectangle rc可視領域dot )\r
624                 {\r
625                         this.strfmt小節番号文字フォーマット.LineAlignment = StringAlignment.Center;\r
626                         this.strfmt小節番号文字フォーマット.Alignment = StringAlignment.Center;\r
627                         this.strfmtレーン名文字フォーマット.LineAlignment = StringAlignment.Near;\r
628                         this.strfmtレーン名文字フォーマット.Alignment = StringAlignment.Center;\r
629                         this.strfmtレーン割付チップ番号文字フォーマット.LineAlignment = StringAlignment.Near;\r
630                         this.strfmtレーン割付チップ番号文字フォーマット.Alignment = StringAlignment.Near;\r
631                         int num = 0;\r
632                         int num2 = 0;\r
633                         int num3 = this.n現在の譜面表示下辺の譜面先頭からの位置grid * C小節.n1グリッドの高さdot;\r
634                         int num4 = num3 + rc可視領域dot.Height;\r
635                         int num5 = this.n現在の最大の小節番号を返す();\r
636                         int num6 = 0;\r
637                         while( num6 <= num5 )\r
638                         {\r
639                                 C小節 cs = this.p小節を返す( num6 );\r
640                                 if( cs != null )\r
641                                 {\r
642                                         num2 = num + cs.n小節長倍率を考慮した現在の小節の高さdot;\r
643                                         if( num >= num4 )\r
644                                         {\r
645                                                 break;\r
646                                         }\r
647                                         if( num2 > num3 )\r
648                                         {\r
649                                                 Rectangle rectangle = new Rectangle();\r
650                                                 rectangle.X = 0;\r
651                                                 rectangle.Y = sz描画対象サイズdot.Height - ( num2 - num3 );\r
652                                                 rectangle.Width = sz描画対象サイズdot.Width;\r
653                                                 rectangle.Height = num2 - num;\r
654                                                 Rectangle rectangle2 = new Rectangle();\r
655                                                 rectangle2.X = rc可視領域dot.X;\r
656                                                 rectangle2.Y = rectangle.Y;\r
657                                                 rectangle2.Width = rc可視領域dot.Width;\r
658                                                 rectangle2.Height = rectangle.Height;\r
659                                                 this.t譜面を描画する・1小節を描画する( g, cs, rectangle, rectangle2 );\r
660                                         }\r
661                                 }\r
662                                 num6++;\r
663                                 num = num2;\r
664                         }\r
665                         Rectangle rectangle3 = new Rectangle();\r
666                         rectangle3.X = 0;\r
667                         rectangle3.Y = 0;\r
668                         rectangle3.Width = sz描画対象サイズdot.Width;\r
669                         rectangle3.Height = nレーン割付チップ番号表示高さdot;\r
670                         this.t譜面を描画する・レーン割付チップを描画する( g, rectangle3 );\r
671                         rectangle3.X = 0;\r
672                         rectangle3.Y = 10;\r
673                         rectangle3.Width = sz描画対象サイズdot.Width;\r
674                         rectangle3.Height = nレーン番号表示高さdot;\r
675                         this.t譜面を描画する・レーン名を描画する( g, rectangle3 );\r
676                 }\r
677 \r
678                 #region [ private ]\r
679                 //-----------------\r
680                 private Cメインフォーム _Form;\r
681                 private Brush brレーン割付番号文字ブラシ = new SolidBrush( Color.White );\r
682                 private Brush brレーン割付番号文字ブラシ影 = new SolidBrush( Color.Black );\r
683                 private Brush brレーン名文字ブラシ = new SolidBrush( Color.FromArgb( 0xff, 220, 220, 220 ) );\r
684                 private Brush brレーン名文字ブラシ影 = new SolidBrush( Color.Black );\r
685                 private Brush br小節番号文字ブラシ = new SolidBrush( Color.FromArgb( 80, 0xff, 0xff, 0xff ) );\r
686                 private Font ftレーン割付チップ番号文字フォント = new Font( "MS UI Gothic", 7f, FontStyle.Regular );\r
687                 private Font ftレーン番号文字フォント = new Font( "MS US Gothic", 8f, FontStyle.Regular );\r
688                 private Font ft小節番号文字フォント = new Font( "MS UI Gothic", 50f, FontStyle.Regular );\r
689                 private Pen penガイド線ペン = new Pen( Color.FromArgb( 50, 50, 50 ) );\r
690                 private Pen penレーン区分線ペン細 = new Pen( Color.Gray );\r
691                 private Pen penレーン区分線ペン太 = new Pen( Color.White, 2f );\r
692                 private Pen pen小節線ペン = new Pen( Color.White, 2f );\r
693                 private Pen pen拍線ペン = new Pen( Color.Gray );\r
694                 private StringFormat strfmtレーン割付チップ番号文字フォーマット = new StringFormat();\r
695                 private StringFormat strfmtレーン名文字フォーマット = new StringFormat();\r
696                 private StringFormat strfmt小節番号文字フォーマット = new StringFormat();\r
697 \r
698                 private void t初期化・listレーンの生成()\r
699                 {\r
700                         this.listレーン.Clear();\r
701                         int num = 0;\r
702                         int num2 = 30;\r
703                         int alpha = 0x19;\r
704                         Cレーン item = new Cレーン();\r
705                         item.eレーン種別 = Cレーン.E種別.BPM;\r
706                         item.strレーン名 = "BPM";\r
707                         item.nチャンネル番号・表00toFF = 8;\r
708                         item.nチャンネル番号・裏00toFF = 3;\r
709                         item.b右側の線が太線 = true;\r
710                         item.col背景色 = Color.FromArgb( alpha, 160, 160, 160 );\r
711                         item.n位置Xdot = num;\r
712                         item.n幅dot = num2;\r
713                         this.listレーン.Add( item );\r
714                         num += item.n幅dot;\r
715                         item = new Cレーン();\r
716                         item.eレーン種別 = Cレーン.E種別.WAV;\r
717                         item.strレーン名 = "LC";\r
718                         item.nチャンネル番号・表00toFF = 0x1a;\r
719                         item.nチャンネル番号・裏00toFF = 0x1a;\r
720                         item.b右側の線が太線 = true;\r
721                         item.col背景色 = Color.FromArgb( alpha, 0, 0xff, 0xff );\r
722                         item.n位置Xdot = num;\r
723                         item.n幅dot = num2;\r
724                         this.listレーン.Add( item );\r
725                         num += item.n幅dot;\r
726                         item = new Cレーン();\r
727                         item.eレーン種別 = Cレーン.E種別.WAV;\r
728                         item.strレーン名 = "HH";\r
729                         item.nチャンネル番号・表00toFF = 0x11;\r
730                         item.nチャンネル番号・裏00toFF = 0x18;\r
731                         item.b右側の線が太線 = false;\r
732                         item.col背景色 = Color.FromArgb( alpha, 0, 0xff, 0xff );\r
733                         item.n位置Xdot = num;\r
734                         item.n幅dot = num2;\r
735                         this.listレーン.Add( item );\r
736                         num += item.n幅dot;\r
737                         item = new Cレーン();\r
738                         item.eレーン種別 = Cレーン.E種別.WAV;\r
739                         item.strレーン名 = "SD";\r
740                         item.nチャンネル番号・表00toFF = 0x12;\r
741                         item.nチャンネル番号・裏00toFF = 0x12;\r
742                         item.b右側の線が太線 = false;\r
743                         item.col背景色 = Color.FromArgb( alpha, 0xff, 0xff, 0 );\r
744                         item.n位置Xdot = num;\r
745                         item.n幅dot = num2;\r
746                         this.listレーン.Add( item );\r
747                         num += item.n幅dot;\r
748                         item = new Cレーン();\r
749                         item.eレーン種別 = Cレーン.E種別.WAV;\r
750                         item.strレーン名 = "BD";\r
751                         item.nチャンネル番号・表00toFF = 0x13;\r
752                         item.nチャンネル番号・裏00toFF = 0x13;\r
753                         item.b右側の線が太線 = false;\r
754                         item.col背景色 = Color.FromArgb( alpha, 0xff, 0x7f, 0x7f );\r
755                         item.n位置Xdot = num;\r
756                         item.n幅dot = num2;\r
757                         this.listレーン.Add( item );\r
758                         num += item.n幅dot;\r
759                         item = new Cレーン();\r
760                         item.eレーン種別 = Cレーン.E種別.WAV;\r
761                         item.strレーン名 = "HT";\r
762                         item.nチャンネル番号・表00toFF = 20;\r
763                         item.nチャンネル番号・裏00toFF = 20;\r
764                         item.b右側の線が太線 = false;\r
765                         item.col背景色 = Color.FromArgb( alpha, 0, 0xff, 0 );\r
766                         item.n位置Xdot = num;\r
767                         item.n幅dot = num2;\r
768                         this.listレーン.Add( item );\r
769                         num += item.n幅dot;\r
770                         item = new Cレーン();\r
771                         item.eレーン種別 = Cレーン.E種別.WAV;\r
772                         item.strレーン名 = "LT";\r
773                         item.nチャンネル番号・表00toFF = 0x15;\r
774                         item.nチャンネル番号・裏00toFF = 0x15;\r
775                         item.b右側の線が太線 = false;\r
776                         item.col背景色 = Color.FromArgb( alpha, 0xff, 0, 0 );\r
777                         item.n位置Xdot = num;\r
778                         item.n幅dot = num2;\r
779                         this.listレーン.Add( item );\r
780                         num += item.n幅dot;\r
781                         item = new Cレーン();\r
782                         item.eレーン種別 = Cレーン.E種別.WAV;\r
783                         item.strレーン名 = "FT";\r
784                         item.nチャンネル番号・表00toFF = 0x17;\r
785                         item.nチャンネル番号・裏00toFF = 0x17;\r
786                         item.b右側の線が太線 = false;\r
787                         item.col背景色 = Color.FromArgb( alpha, 0xff, 0, 0xff );\r
788                         item.n位置Xdot = num;\r
789                         item.n幅dot = num2;\r
790                         this.listレーン.Add( item );\r
791                         num += item.n幅dot;\r
792                         item = new Cレーン();\r
793                         item.eレーン種別 = Cレーン.E種別.WAV;\r
794                         item.strレーン名 = "CY";\r
795                         item.nチャンネル番号・表00toFF = 0x16;\r
796                         item.nチャンネル番号・裏00toFF = 0x19;\r
797                         item.b右側の線が太線 = false;\r
798                         item.col背景色 = Color.FromArgb( alpha, 0, 0xff, 0xff );\r
799                         item.n位置Xdot = num;\r
800                         item.n幅dot = num2;\r
801                         this.listレーン.Add( item );\r
802                         num += item.n幅dot;\r
803                         item = new Cレーン();\r
804                         item.eレーン種別 = Cレーン.E種別.FI;\r
805                         item.strレーン名 = "FI";\r
806                         item.nチャンネル番号・表00toFF = 0x53;\r
807                         item.nチャンネル番号・裏00toFF = 0x53;\r
808                         item.b右側の線が太線 = true;\r
809                         item.col背景色 = Color.FromArgb( alpha, 0xff, 0xff, 0 );\r
810                         item.n位置Xdot = num;\r
811                         item.n幅dot = num2;\r
812                         this.listレーン.Add( item );\r
813                         num += item.n幅dot;\r
814                         item = new Cレーン();\r
815                         item.eレーン種別 = Cレーン.E種別.WAV;\r
816                         item.strレーン名 = "BGM";\r
817                         item.nチャンネル番号・表00toFF = 1;\r
818                         item.nチャンネル番号・裏00toFF = 1;\r
819                         item.b右側の線が太線 = true;\r
820                         item.col背景色 = Color.FromArgb( alpha, 160, 160, 160 );\r
821                         item.n位置Xdot = num;\r
822                         item.n幅dot = num2;\r
823                         this.listレーン.Add( item );\r
824                         num += item.n幅dot;\r
825                         item = new Cレーン();\r
826                         item.eレーン種別 = Cレーン.E種別.WAV;\r
827                         item.strレーン名 = "SE1";\r
828                         item.nチャンネル番号・表00toFF = 0x61;\r
829                         item.nチャンネル番号・裏00toFF = 0x61;\r
830                         item.b右側の線が太線 = false;\r
831                         item.col背景色 = Color.FromArgb( alpha, 160, 160, 160 );\r
832                         item.n位置Xdot = num;\r
833                         item.n幅dot = num2;\r
834                         this.listレーン.Add( item );\r
835                         num += item.n幅dot;\r
836                         item = new Cレーン();\r
837                         item.eレーン種別 = Cレーン.E種別.WAV;\r
838                         item.strレーン名 = "SE2";\r
839                         item.nチャンネル番号・表00toFF = 0x62;\r
840                         item.nチャンネル番号・裏00toFF = 0x62;\r
841                         item.b右側の線が太線 = false;\r
842                         item.col背景色 = Color.FromArgb( alpha, 160, 160, 160 );\r
843                         item.n位置Xdot = num;\r
844                         item.n幅dot = num2;\r
845                         this.listレーン.Add( item );\r
846                         num += item.n幅dot;\r
847                         item = new Cレーン();\r
848                         item.eレーン種別 = Cレーン.E種別.WAV;\r
849                         item.strレーン名 = "SE3";\r
850                         item.nチャンネル番号・表00toFF = 0x63;\r
851                         item.nチャンネル番号・裏00toFF = 0x63;\r
852                         item.b右側の線が太線 = false;\r
853                         item.col背景色 = Color.FromArgb( alpha, 160, 160, 160 );\r
854                         item.n位置Xdot = num;\r
855                         item.n幅dot = num2;\r
856                         this.listレーン.Add( item );\r
857                         num += item.n幅dot;\r
858                         item = new Cレーン();\r
859                         item.eレーン種別 = Cレーン.E種別.WAV;\r
860                         item.strレーン名 = "SE4";\r
861                         item.nチャンネル番号・表00toFF = 100;\r
862                         item.nチャンネル番号・裏00toFF = 100;\r
863                         item.b右側の線が太線 = false;\r
864                         item.col背景色 = Color.FromArgb( alpha, 160, 160, 160 );\r
865                         item.n位置Xdot = num;\r
866                         item.n幅dot = num2;\r
867                         this.listレーン.Add( item );\r
868                         num += item.n幅dot;\r
869                         item = new Cレーン();\r
870                         item.eレーン種別 = Cレーン.E種別.WAV;\r
871                         item.strレーン名 = "SE5";\r
872                         item.nチャンネル番号・表00toFF = 0x65;\r
873                         item.nチャンネル番号・裏00toFF = 0x65;\r
874                         item.b右側の線が太線 = false;\r
875                         item.col背景色 = Color.FromArgb( alpha, 160, 160, 160 );\r
876                         item.n位置Xdot = num;\r
877                         item.n幅dot = num2;\r
878                         this.listレーン.Add( item );\r
879                         num += item.n幅dot;\r
880                         item = new Cレーン();\r
881                         item.eレーン種別 = Cレーン.E種別.GtV;\r
882                         item.strレーン名 = "GtV";\r
883                         item.nチャンネル番号・表00toFF = 0;\r
884                         item.nチャンネル番号・裏00toFF = 0;\r
885                         item.b右側の線が太線 = true;\r
886                         item.col背景色 = Color.FromArgb( alpha, 160, 160, 160 );\r
887                         item.n位置Xdot = num;\r
888                         item.n幅dot = num2;\r
889                         this.listレーン.Add( item );\r
890                         num += item.n幅dot;\r
891                         item = new Cレーン();\r
892                         item.eレーン種別 = Cレーン.E種別.GtR;\r
893                         item.strレーン名 = "GtR";\r
894                         item.nチャンネル番号・表00toFF = 0;\r
895                         item.nチャンネル番号・裏00toFF = 0;\r
896                         item.b右側の線が太線 = false;\r
897                         item.col背景色 = Color.FromArgb( alpha, 0xff, 0, 0 );\r
898                         item.n位置Xdot = num;\r
899                         item.n幅dot = num2;\r
900                         this.listレーン.Add( item );\r
901                         num += item.n幅dot;\r
902                         item = new Cレーン();\r
903                         item.eレーン種別 = Cレーン.E種別.GtG;\r
904                         item.strレーン名 = "GtG";\r
905                         item.nチャンネル番号・表00toFF = 0;\r
906                         item.nチャンネル番号・裏00toFF = 0;\r
907                         item.b右側の線が太線 = false;\r
908                         item.col背景色 = Color.FromArgb( alpha, 0, 0xff, 0 );\r
909                         item.n位置Xdot = num;\r
910                         item.n幅dot = num2;\r
911                         this.listレーン.Add( item );\r
912                         num += item.n幅dot;\r
913                         item = new Cレーン();\r
914                         item.eレーン種別 = Cレーン.E種別.GtB;\r
915                         item.strレーン名 = "GtB";\r
916                         item.nチャンネル番号・表00toFF = 0;\r
917                         item.nチャンネル番号・裏00toFF = 0;\r
918                         item.b右側の線が太線 = false;\r
919                         item.col背景色 = Color.FromArgb( alpha, 0, 0x80, 0xff );\r
920                         item.n位置Xdot = num;\r
921                         item.n幅dot = num2;\r
922                         this.listレーン.Add( item );\r
923                         num += item.n幅dot;\r
924                         item = new Cレーン();\r
925                         item.eレーン種別 = Cレーン.E種別.GtW;\r
926                         item.strレーン名 = "GtW";\r
927                         item.nチャンネル番号・表00toFF = 40;\r
928                         item.nチャンネル番号・裏00toFF = 40;\r
929                         item.b右側の線が太線 = true;\r
930                         item.col背景色 = Color.FromArgb( alpha, 160, 160, 160 );\r
931                         item.n位置Xdot = num;\r
932                         item.n幅dot = num2;\r
933                         this.listレーン.Add( item );\r
934                         num += item.n幅dot;\r
935                         item = new Cレーン();\r
936                         item.eレーン種別 = Cレーン.E種別.BsV;\r
937                         item.strレーン名 = "BsV";\r
938                         item.nチャンネル番号・表00toFF = 0;\r
939                         item.nチャンネル番号・裏00toFF = 0;\r
940                         item.b右側の線が太線 = true;\r
941                         item.col背景色 = Color.FromArgb( alpha, 160, 160, 160 );\r
942                         item.n位置Xdot = num;\r
943                         item.n幅dot = num2;\r
944                         this.listレーン.Add( item );\r
945                         num += item.n幅dot;\r
946                         item = new Cレーン();\r
947                         item.eレーン種別 = Cレーン.E種別.BsR;\r
948                         item.strレーン名 = "BsR";\r
949                         item.nチャンネル番号・表00toFF = 0;\r
950                         item.nチャンネル番号・裏00toFF = 0;\r
951                         item.b右側の線が太線 = false;\r
952                         item.col背景色 = Color.FromArgb( alpha, 0xff, 0, 0 );\r
953                         item.n位置Xdot = num;\r
954                         item.n幅dot = num2;\r
955                         this.listレーン.Add( item );\r
956                         num += item.n幅dot;\r
957                         item = new Cレーン();\r
958                         item.eレーン種別 = Cレーン.E種別.BsG;\r
959                         item.strレーン名 = "BsG";\r
960                         item.nチャンネル番号・表00toFF = 0;\r
961                         item.nチャンネル番号・裏00toFF = 0;\r
962                         item.b右側の線が太線 = false;\r
963                         item.col背景色 = Color.FromArgb( alpha, 0, 0xff, 0 );\r
964                         item.n位置Xdot = num;\r
965                         item.n幅dot = num2;\r
966                         this.listレーン.Add( item );\r
967                         num += item.n幅dot;\r
968                         item = new Cレーン();\r
969                         item.eレーン種別 = Cレーン.E種別.BsB;\r
970                         item.strレーン名 = "BsB";\r
971                         item.nチャンネル番号・表00toFF = 0;\r
972                         item.nチャンネル番号・裏00toFF = 0;\r
973                         item.b右側の線が太線 = false;\r
974                         item.col背景色 = Color.FromArgb( alpha, 0, 0x80, 0xff );\r
975                         item.n位置Xdot = num;\r
976                         item.n幅dot = num2;\r
977                         this.listレーン.Add( item );\r
978                         num += item.n幅dot;\r
979                         item = new Cレーン();\r
980                         item.eレーン種別 = Cレーン.E種別.BsW;\r
981                         item.strレーン名 = "BsW";\r
982                         item.nチャンネル番号・表00toFF = 0xa8;\r
983                         item.nチャンネル番号・裏00toFF = 0xa8;\r
984                         item.b右側の線が太線 = true;\r
985                         item.col背景色 = Color.FromArgb( alpha, 160, 160, 160 );\r
986                         item.n位置Xdot = num;\r
987                         item.n幅dot = num2;\r
988                         this.listレーン.Add( item );\r
989                         num += item.n幅dot;\r
990                         item = new Cレーン();\r
991                         item.eレーン種別 = Cレーン.E種別.AVI;\r
992                         item.strレーン名 = "AVI";\r
993                         item.nチャンネル番号・表00toFF = 0x54;\r
994                         item.nチャンネル番号・裏00toFF = 0x54;\r
995                         item.b右側の線が太線 = true;\r
996                         item.col背景色 = Color.FromArgb( alpha, 160, 160, 160 );\r
997                         item.n位置Xdot = num;\r
998                         item.n幅dot = num2;\r
999                         this.listレーン.Add( item );\r
1000                         num += item.n幅dot;\r
1001                         item = new Cレーン();\r
1002                         item.eレーン種別 = Cレーン.E種別.BMP;\r
1003                         item.strレーン名 = "BG1";\r
1004                         item.nチャンネル番号・表00toFF = 4;\r
1005                         item.nチャンネル番号・裏00toFF = 0xc4;\r
1006                         item.b右側の線が太線 = true;\r
1007                         item.col背景色 = Color.FromArgb( alpha, 160, 160, 160 );\r
1008                         item.n位置Xdot = num;\r
1009                         item.n幅dot = num2;\r
1010                         this.listレーン.Add( item );\r
1011                         num += item.n幅dot;\r
1012                         item = new Cレーン();\r
1013                         item.eレーン種別 = Cレーン.E種別.BMP;\r
1014                         item.strレーン名 = "BG2";\r
1015                         item.nチャンネル番号・表00toFF = 7;\r
1016                         item.nチャンネル番号・裏00toFF = 0xc7;\r
1017                         item.b右側の線が太線 = false;\r
1018                         item.col背景色 = Color.FromArgb( alpha, 160, 160, 160 );\r
1019                         item.n位置Xdot = num;\r
1020                         item.n幅dot = num2;\r
1021                         this.listレーン.Add( item );\r
1022                         num += item.n幅dot;\r
1023                         item = new Cレーン();\r
1024                         item.eレーン種別 = Cレーン.E種別.BMP;\r
1025                         item.strレーン名 = "BG3";\r
1026                         item.nチャンネル番号・表00toFF = 0x55;\r
1027                         item.nチャンネル番号・裏00toFF = 0xd5;\r
1028                         item.b右側の線が太線 = false;\r
1029                         item.col背景色 = Color.FromArgb( alpha, 160, 160, 160 );\r
1030                         item.n位置Xdot = num;\r
1031                         item.n幅dot = num2;\r
1032                         this.listレーン.Add( item );\r
1033                         num += item.n幅dot;\r
1034                         item = new Cレーン();\r
1035                         item.eレーン種別 = Cレーン.E種別.BMP;\r
1036                         item.strレーン名 = "BG4";\r
1037                         item.nチャンネル番号・表00toFF = 0x56;\r
1038                         item.nチャンネル番号・裏00toFF = 0xd6;\r
1039                         item.b右側の線が太線 = false;\r
1040                         item.col背景色 = Color.FromArgb( alpha, 160, 160, 160 );\r
1041                         item.n位置Xdot = num;\r
1042                         item.n幅dot = num2;\r
1043                         this.listレーン.Add( item );\r
1044                         num += item.n幅dot;\r
1045                         item = new Cレーン();\r
1046                         item.eレーン種別 = Cレーン.E種別.BMP;\r
1047                         item.strレーン名 = "BG5";\r
1048                         item.nチャンネル番号・表00toFF = 0x57;\r
1049                         item.nチャンネル番号・裏00toFF = 0xd7;\r
1050                         item.b右側の線が太線 = false;\r
1051                         item.col背景色 = Color.FromArgb( alpha, 160, 160, 160 );\r
1052                         item.n位置Xdot = num;\r
1053                         item.n幅dot = num2;\r
1054                         this.listレーン.Add( item );\r
1055                         num += item.n幅dot;\r
1056                 }\r
1057                 private void t初期化・スクロールバーを初期設定する()\r
1058                 {\r
1059                         this._Form.hScrollBar譜面用水平スクロールバー.Value = 0;\r
1060                         this._Form.vScrollBar譜面用垂直スクロールバー.Value = 0;\r
1061                         this.t水平スクロールバーと譜面パネル左右位置の調整();\r
1062                         this.t垂直スクロールバーと譜面可視領域の上下位置の調整();\r
1063                         this._Form.vScrollBar譜面用垂直スクロールバー.Value = ( this._Form.vScrollBar譜面用垂直スクロールバー.Maximum + 1 ) - this._Form.vScrollBar譜面用垂直スクロールバー.LargeChange;\r
1064                 }\r
1065                 private void t初期化・小節を10個まで作成する()\r
1066                 {\r
1067                         for( int i = 0; i < 10; i++ )\r
1068                         {\r
1069                                 this.dic小節.Add( i, new C小節( i ) );\r
1070                         }\r
1071                 }\r
1072                 private void t初期化・背景画像を生成する()\r
1073                 {\r
1074                         int width = 0;\r
1075                         foreach( Cレーン cレーン in this.listレーン )\r
1076                         {\r
1077                                 width += cレーン.n幅dot;\r
1078                         }\r
1079                         this.bmp背景画像 = new Bitmap( width, 1 );\r
1080                         Graphics graphics = Graphics.FromImage( this.bmp背景画像 );\r
1081                         int x = 0;\r
1082                         foreach( Cレーン cレーン2 in this.listレーン )\r
1083                         {\r
1084                                 graphics.FillRectangle( new SolidBrush( cレーン2.col背景色 ), x, 0, cレーン2.n幅dot, this.bmp背景画像.Height );\r
1085                                 x += cレーン2.n幅dot;\r
1086                         }\r
1087                         graphics.Dispose();\r
1088                         this._Form.pictureBox譜面パネル.Width = this.bmp背景画像.Width;\r
1089                         this._Form.pictureBox譜面パネル.BackgroundImage = this.bmp背景画像;\r
1090                         this._Form.pictureBox譜面パネル.BackgroundImageLayout = ImageLayout.Tile;\r
1091                 }\r
1092                 private void t譜面を描画する・1小節を描画する( Graphics g, C小節 cs, Rectangle rc小節のPicBox内描画領域, Rectangle rc小節のPicBox内可視領域 )\r
1093                 {\r
1094                         this.t譜面を描画する・1小節を描画する・小節番号を描画する( g, cs, rc小節のPicBox内可視領域 );\r
1095                         this.t譜面を描画する・1小節を描画する・ガイド線を描画する( g, cs, rc小節のPicBox内描画領域 );\r
1096                         this.t譜面を描画する・1小節を描画する・拍線を描画する( g, cs, rc小節のPicBox内描画領域 );\r
1097                         this.t譜面を描画する・1小節を描画する・レーン区分線を描画する( g, cs, rc小節のPicBox内描画領域 );\r
1098                         this.t譜面を描画する・1小節を描画する・小節線を描画する( g, cs, rc小節のPicBox内描画領域 );\r
1099                         this.t譜面を描画する・1小節を描画する・チップを描画する( g, cs, rc小節のPicBox内描画領域 );\r
1100                 }\r
1101                 private void t譜面を描画する・1小節を描画する・ガイド線を描画する( Graphics g, C小節 cs, Rectangle rc小節のPicBox内描画領域 )\r
1102                 {\r
1103                         if( this.n現在のガイド幅grid > 1 )\r
1104                         {\r
1105                                 int num = cs.n小節長倍率を考慮した現在の小節の高さgrid;\r
1106                                 for( int i = 0; i < num; i += this.n現在のガイド幅grid )\r
1107                                 {\r
1108                                         int num3 = rc小節のPicBox内描画領域.Bottom - ( i * C小節.n1グリッドの高さdot );\r
1109                                         g.DrawLine( this.penガイド線ペン, rc小節のPicBox内描画領域.X, num3, rc小節のPicBox内描画領域.Right, num3 );\r
1110                                 }\r
1111                         }\r
1112                 }\r
1113                 private void t譜面を描画する・1小節を描画する・チップを描画する( Graphics g, C小節 cs, Rectangle rc小節のPicBox内描画領域 )\r
1114                 {\r
1115                         cs.listチップ.Sort();\r
1116                         Rectangle rectangle = new Rectangle( 0, 0, 0, 0 );\r
1117                         foreach( Cチップ cチップ in cs.listチップ )\r
1118                         {\r
1119                                 if( cチップ.n枠外レーン数 != 0 )\r
1120                                 {\r
1121                                         continue;\r
1122                                 }\r
1123                                 int num = cチップ.n位置grid;\r
1124                                 Cレーン cレーン = this.listレーン[ cチップ.nレーン番号0to ];\r
1125                                 rectangle.X = cレーン.n位置Xdot;\r
1126                                 rectangle.Y = ( rc小節のPicBox内描画領域.Bottom - ( num * C小節.n1グリッドの高さdot ) ) - Cチップ.nチップの高さdot;\r
1127                                 rectangle.Width = cレーン.n幅dot;\r
1128                                 rectangle.Height = Cチップ.nチップの高さdot;\r
1129                                 if( !cチップ.b裏 )\r
1130                                 {\r
1131                                         switch( cレーン.eレーン種別 )\r
1132                                         {\r
1133                                                 case Cレーン.E種別.GtR:\r
1134                                                 case Cレーン.E種別.GtG:\r
1135                                                 case Cレーン.E種別.GtB:\r
1136                                                 case Cレーン.E種別.BsR:\r
1137                                                 case Cレーン.E種別.BsG:\r
1138                                                 case Cレーン.E種別.BsB:\r
1139                                                         if( ( ( cレーン.eレーン種別 != Cレーン.E種別.GtR ) || ( cチップ.n値・整数1to1295 != 2 ) ) && ( ( cレーン.eレーン種別 != Cレーン.E種別.BsR ) || ( cチップ.n値・整数1to1295 != 2 ) ) )\r
1140                                                         {\r
1141                                                                 break;\r
1142                                                         }\r
1143                                                         rectangle.Width = cレーン.n幅dot * 3;\r
1144                                                         Cチップ.tOPENチップを描画する( g, rectangle );\r
1145                                                         goto Label_0188;\r
1146 \r
1147                                                 case Cレーン.E種別.BPM:\r
1148                                                         Cチップ.t表チップを描画する( g, rectangle, cチップ.f値・浮動小数, cレーン.col背景色 );\r
1149                                                         goto Label_0188;\r
1150 \r
1151                                                 default:\r
1152                                                         Cチップ.t表チップを描画する( g, rectangle, cチップ.n値・整数1to1295, cレーン.col背景色 );\r
1153                                                         goto Label_0188;\r
1154                                         }\r
1155                                         Cチップ.t表チップを描画する( g, rectangle, -1, cレーン.col背景色 );\r
1156                                 }\r
1157                                 else if( cレーン.eレーン種別 == Cレーン.E種別.BPM )\r
1158                                 {\r
1159                                         Cチップ.t裏チップを描画する( g, rectangle, cチップ.f値・浮動小数, cレーン.col背景色 );\r
1160                                 }\r
1161                                 else\r
1162                                 {\r
1163                                         Cチップ.t裏チップを描画する( g, rectangle, cチップ.n値・整数1to1295, cレーン.col背景色 );\r
1164                                 }\r
1165                         Label_0188:\r
1166                                 if( cチップ.bドラッグで選択中 || cチップ.b確定選択中 )\r
1167                                 {\r
1168                                         Cチップ.tチップの周囲の太枠を描画する( g, rectangle );\r
1169                                 }\r
1170                         }\r
1171                 }\r
1172                 private void t譜面を描画する・1小節を描画する・レーン区分線を描画する( Graphics g, C小節 cs, Rectangle rc小節のPicBox内描画領域 )\r
1173                 {\r
1174                         int num = 0;\r
1175                         foreach( Cレーン cレーン in this.listレーン )\r
1176                         {\r
1177                                 Pen pen = cレーン.b右側の線が太線 ? this.penレーン区分線ペン太 : this.penレーン区分線ペン細;\r
1178                                 g.DrawLine( pen, num, rc小節のPicBox内描画領域.Top, num, rc小節のPicBox内描画領域.Bottom );\r
1179                                 num += cレーン.n幅dot;\r
1180                         }\r
1181                 }\r
1182                 private void t譜面を描画する・1小節を描画する・小節線を描画する( Graphics g, C小節 cs, Rectangle rc小節のPicBox内描画領域 )\r
1183                 {\r
1184                         Rectangle rectangle = rc小節のPicBox内描画領域;\r
1185                         g.DrawLine( this.pen小節線ペン, rectangle.X, rectangle.Bottom, rectangle.Right, rectangle.Bottom );\r
1186                         g.DrawLine( this.pen小節線ペン, rectangle.X, rectangle.Top, rectangle.Right, rectangle.Top );\r
1187                 }\r
1188                 private void t譜面を描画する・1小節を描画する・小節番号を描画する( Graphics g, C小節 cs, Rectangle rc小節のPicBox内可視領域 )\r
1189                 {\r
1190                         g.DrawString( C変換.str小節番号を文字列3桁に変換して返す( cs.n小節番号0to3599 ), this.ft小節番号文字フォント, this.br小節番号文字ブラシ, rc小節のPicBox内可視領域, this.strfmt小節番号文字フォーマット );\r
1191                 }\r
1192                 private void t譜面を描画する・1小節を描画する・拍線を描画する( Graphics g, C小節 cs, Rectangle rc小節のPicBox内描画領域 )\r
1193                 {\r
1194                         int num = cs.n小節長倍率を考慮した現在の小節の高さgrid;\r
1195                         for( int i = 0; i < num; i += C小節.n基準の高さgrid / 4 )\r
1196                         {\r
1197                                 int num3 = rc小節のPicBox内描画領域.Bottom - ( i * C小節.n1グリッドの高さdot );\r
1198                                 g.DrawLine( this.pen拍線ペン, rc小節のPicBox内描画領域.X, num3, rc小節のPicBox内描画領域.Right, num3 );\r
1199                         }\r
1200                 }\r
1201                 private void t譜面を描画する・レーン割付チップを描画する( Graphics g, Rectangle rc小節のPicBox内描画領域 )\r
1202                 {\r
1203                         LinearGradientBrush brush = new LinearGradientBrush( rc小節のPicBox内描画領域, Color.FromArgb( 0xff, 0, 0, 100 ), Color.FromArgb( 0xff, 100, 100, 0xff ), LinearGradientMode.Vertical );\r
1204                         g.FillRectangle( brush, rc小節のPicBox内描画領域 );\r
1205                         brush.Dispose();\r
1206                         Rectangle layoutRectangle = new Rectangle( 0, 0, 0, 0 );\r
1207                         foreach( Cレーン cレーン in this.listレーン )\r
1208                         {\r
1209                                 layoutRectangle.X = ( rc小節のPicBox内描画領域.X + cレーン.n位置Xdot ) + 1;\r
1210                                 layoutRectangle.Y = rc小節のPicBox内描画領域.Y + 1;\r
1211                                 layoutRectangle.Width = cレーン.n幅dot;\r
1212                                 layoutRectangle.Height = rc小節のPicBox内描画領域.Height;\r
1213                                 if( cレーン.nレーン割付チップ・表0or1to1295 > 0 )\r
1214                                 {\r
1215                                         string s = C変換.str数値を36進数2桁に変換して返す( cレーン.nレーン割付チップ・表0or1to1295 );\r
1216                                         g.DrawString( s, this.ftレーン割付チップ番号文字フォント, this.brレーン割付番号文字ブラシ影, layoutRectangle, this.strfmtレーン割付チップ番号文字フォーマット );\r
1217                                         layoutRectangle.X--;\r
1218                                         layoutRectangle.Y--;\r
1219                                         g.DrawString( s, this.ftレーン割付チップ番号文字フォント, this.brレーン割付番号文字ブラシ, layoutRectangle, this.strfmtレーン割付チップ番号文字フォーマット );\r
1220                                         layoutRectangle.X++;\r
1221                                         layoutRectangle.Y++;\r
1222                                 }\r
1223                                 layoutRectangle.X += cレーン.n幅dot / 2;\r
1224                                 if( cレーン.nレーン割付チップ・裏0or1to1295 > 0 )\r
1225                                 {\r
1226                                         string str2 = C変換.str数値を36進数2桁に変換して返す( cレーン.nレーン割付チップ・裏0or1to1295 );\r
1227                                         g.DrawString( str2, this.ftレーン割付チップ番号文字フォント, this.brレーン割付番号文字ブラシ影, layoutRectangle, this.strfmtレーン割付チップ番号文字フォーマット );\r
1228                                         layoutRectangle.X--;\r
1229                                         layoutRectangle.Y--;\r
1230                                         g.DrawString( str2, this.ftレーン割付チップ番号文字フォント, this.brレーン割付番号文字ブラシ, layoutRectangle, this.strfmtレーン割付チップ番号文字フォーマット );\r
1231                                 }\r
1232                         }\r
1233                 }\r
1234                 private void t譜面を描画する・レーン名を描画する( Graphics g, Rectangle rcレーン名のPicBox内描画領域 )\r
1235                 {\r
1236                         LinearGradientBrush brush = new LinearGradientBrush( rcレーン名のPicBox内描画領域, Color.FromArgb( 0xff, 100, 100, 0xff ), Color.FromArgb( 0, 0, 0, 0xff ), LinearGradientMode.Vertical );\r
1237                         g.FillRectangle( brush, rcレーン名のPicBox内描画領域 );\r
1238                         brush.Dispose();\r
1239                         Rectangle layoutRectangle = new Rectangle( 0, 0, 0, 0 );\r
1240                         foreach( Cレーン cレーン in this.listレーン )\r
1241                         {\r
1242                                 layoutRectangle.X = ( rcレーン名のPicBox内描画領域.X + cレーン.n位置Xdot ) + 2;\r
1243                                 layoutRectangle.Y = rcレーン名のPicBox内描画領域.Y + 2;\r
1244                                 layoutRectangle.Width = cレーン.n幅dot;\r
1245                                 layoutRectangle.Height = 0x18;\r
1246                                 g.DrawString( cレーン.strレーン名, this.ftレーン番号文字フォント, this.brレーン名文字ブラシ影, layoutRectangle, this.strfmtレーン名文字フォーマット );\r
1247                                 layoutRectangle.X -= 2;\r
1248                                 layoutRectangle.Y -= 2;\r
1249                                 g.DrawString( cレーン.strレーン名, this.ftレーン番号文字フォント, this.brレーン名文字ブラシ, layoutRectangle, this.strfmtレーン名文字フォーマット );\r
1250                         }\r
1251                 }\r
1252                 //-----------------\r
1253                 #endregion\r
1254         }\r
1255 }\r