2 using System.Collections.Generic;
\r
4 using System.Windows.Forms;
\r
5 using System.Drawing;
\r
6 using DTXCreator.UndoRedo;
\r
7 using DTXCreator.Properties;
\r
9 namespace DTXCreator.譜面
\r
11 public class C選択モード管理
\r
13 public C選択モード管理( Cメインフォーム formメインフォーム )
\r
15 this._Form = formメインフォーム;
\r
16 this.mgr譜面管理者ref = formメインフォーム.mgr譜面管理者;
\r
20 this._Form.dlgチップパレット.t一時的に隠蔽する();
\r
22 this._Form.dlgチップパレット.t一時的な隠蔽を解除する();
\r
24 public void t個別選択解除( Cチップ cc )
\r
26 Cチップ位置用UndoRedo redo = new Cチップ位置用UndoRedo( this.mgr譜面管理者ref.pチップの存在する小節を返す( cc ).n小節番号0to3599, cc.nレーン番号0to, cc.n位置grid, cc.n値・整数1to1295 );
\r
27 this._Form.mgrUndoRedo管理者.tノードを追加する( new CUndoRedoセル<Cチップ位置用UndoRedo>( null, new DGUndoを実行する<Cチップ位置用UndoRedo>( this.mgr譜面管理者ref.tチップ選択解除のUndo ), new DGRedoを実行する<Cチップ位置用UndoRedo>( this.mgr譜面管理者ref.tチップ選択解除のRedo ), redo, redo ) );
\r
28 this._Form.tUndoRedo用GUIの有効・無効を設定する();
\r
31 public void t全チップの選択を解除する()
\r
33 this._Form.mgrUndoRedo管理者.tトランザクション記録を開始する();
\r
34 foreach( KeyValuePair<int, C小節> pair in this.mgr譜面管理者ref.dic小節 )
\r
36 C小節 c小節 = pair.Value;
\r
37 for( int j = 0; j < c小節.listチップ.Count; j++ )
\r
39 Cチップ cチップ = c小節.listチップ[ j ];
\r
40 if( cチップ.n枠外レーン数 != 0 )
\r
42 Cチップ cc = new Cチップ();
\r
43 cc.tコピーfrom( cチップ );
\r
44 Cチップ配置用UndoRedo redo = new Cチップ配置用UndoRedo( c小節.n小節番号0to3599, cc );
\r
45 this._Form.mgrUndoRedo管理者.tノードを追加する( new CUndoRedoセル<Cチップ配置用UndoRedo>( null, new DGUndoを実行する<Cチップ配置用UndoRedo>( this.mgr譜面管理者ref.tチップ削除のUndo ), new DGRedoを実行する<Cチップ配置用UndoRedo>( this.mgr譜面管理者ref.tチップ削除のRedo ), redo, redo ) );
\r
46 c小節.listチップ.Remove( cチップ );
\r
51 for( int i = 0; i < this.mgr譜面管理者ref.dic小節.Count; i++ )
\r
53 C小節 c小節2 = this.mgr譜面管理者ref.dic小節[ i ];
\r
54 for( int k = 0; k < c小節2.listチップ.Count; k++ )
\r
56 Cチップ cチップ3 = c小節2.listチップ[ k ];
\r
57 if( cチップ3.b確定選択中 || cチップ3.bドラッグで選択中 )
\r
59 this.mgr譜面管理者ref.bOPENチップである( cチップ3 );
\r
60 for( int m = 0; m < c小節2.listチップ.Count; m++ )
\r
62 Cチップ cチップ4 = c小節2.listチップ[ m ];
\r
63 if( ( ( k != m ) && ( cチップ3.nレーン番号0to == cチップ4.nレーン番号0to ) ) && ( ( cチップ3.n位置grid == cチップ4.n位置grid ) && !cチップ4.b確定選択中 ) )
\r
65 Cチップ cチップ5 = new Cチップ();
\r
66 cチップ5.tコピーfrom( cチップ4 );
\r
67 Cチップ配置用UndoRedo redo2 = new Cチップ配置用UndoRedo( c小節2.n小節番号0to3599, cチップ5 );
\r
68 this._Form.mgrUndoRedo管理者.tノードを追加する( new CUndoRedoセル<Cチップ配置用UndoRedo>( null, new DGUndoを実行する<Cチップ配置用UndoRedo>( this.mgr譜面管理者ref.tチップ削除のUndo ), new DGRedoを実行する<Cチップ配置用UndoRedo>( this.mgr譜面管理者ref.tチップ削除のRedo ), redo2, redo2 ) );
\r
69 c小節2.listチップ.RemoveAt( m );
\r
77 foreach( KeyValuePair<int, C小節> pair2 in this.mgr譜面管理者ref.dic小節 )
\r
79 C小節 c小節3 = pair2.Value;
\r
80 for( int n = 0; n < c小節3.listチップ.Count; n++ )
\r
82 Cチップ cチップ6 = c小節3.listチップ[ n ];
\r
85 Cチップ位置用UndoRedo redo3 = new Cチップ位置用UndoRedo( c小節3.n小節番号0to3599, cチップ6.nレーン番号0to, cチップ6.n位置grid, cチップ6.n値・整数1to1295 );
\r
86 this._Form.mgrUndoRedo管理者.tノードを追加する( new CUndoRedoセル<Cチップ位置用UndoRedo>( null, new DGUndoを実行する<Cチップ位置用UndoRedo>( this.mgr譜面管理者ref.tチップ選択解除のUndo ), new DGRedoを実行する<Cチップ位置用UndoRedo>( this.mgr譜面管理者ref.tチップ選択解除のRedo ), redo3, redo3 ) );
\r
88 cチップ6.bドラッグで選択中 = false;
\r
89 cチップ6.b確定選択中 = false;
\r
93 this._Form.mgrUndoRedo管理者.tトランザクション記録を終了する();
\r
94 this._Form.tUndoRedo用GUIの有効・無効を設定する();
\r
96 public void t全チップを選択する()
\r
98 this._Form.mgrUndoRedo管理者.tトランザクション記録を開始する();
\r
99 foreach( KeyValuePair<int, C小節> pair in this.mgr譜面管理者ref.dic小節 )
\r
101 C小節 c小節 = pair.Value;
\r
102 for( int i = 0; i < c小節.listチップ.Count; i++ )
\r
104 Cチップ cチップ = c小節.listチップ[ i ];
\r
107 Cチップ位置用UndoRedo redo = new Cチップ位置用UndoRedo( c小節.n小節番号0to3599, cチップ.nレーン番号0to, cチップ.n位置grid, cチップ.n値・整数1to1295 );
\r
108 this._Form.mgrUndoRedo管理者.tノードを追加する( new CUndoRedoセル<Cチップ位置用UndoRedo>( null, new DGUndoを実行する<Cチップ位置用UndoRedo>( this.mgr譜面管理者ref.tチップ選択のUndo ), new DGRedoを実行する<Cチップ位置用UndoRedo>( this.mgr譜面管理者ref.tチップ選択のRedo ), redo, redo ) );
\r
109 cチップ.bドラッグで選択中 = false;
\r
110 cチップ.b確定選択中 = true;
\r
114 this._Form.mgrUndoRedo管理者.tトランザクション記録を終了する();
\r
115 this._Form.tUndoRedo用GUIの有効・無効を設定する();
\r
116 this._Form.t選択チップの有無に応じて編集用GUIの有効・無効を設定する();
\r
117 this._Form.pictureBox譜面パネル.Refresh();
\r
119 public void t置換する()
\r
121 this._Form.dlgチップパレット.t一時的に隠蔽する();
\r
123 this._Form.dlgチップパレット.t一時的な隠蔽を解除する();
\r
125 internal void MouseClick( MouseEventArgs e )
\r
127 if( e.Button == MouseButtons.Right )
\r
129 this._Form.t選択モードのコンテクストメニューを表示する( e.X, e.Y );
\r
132 internal void MouseDown( MouseEventArgs e )
\r
134 if( e.Button == MouseButtons.Left )
\r
136 Cチップ cc = this.mgr譜面管理者ref.p指定された座標dotにあるチップを返す( e.X, e.Y );
\r
137 if( ( cc == null ) || !cc.b確定選択中 )
\r
139 this.t範囲選択開始処理( e );
\r
141 else if( ( Control.ModifierKeys & Keys.Control ) != Keys.Control )
\r
147 this.t個別選択解除( cc );
\r
151 internal void MouseMove( MouseEventArgs e )
\r
153 if( e.Button == MouseButtons.Left )
\r
155 if( this.b範囲選択のためにドラッグ中 )
\r
157 this.t範囲選択継続処理( e );
\r
159 if( this.b移動のためにドラッグ中 )
\r
166 if( this.b範囲選択のためにドラッグ中 )
\r
168 this.t範囲選択終了処理( e );
\r
170 if( this.b移動のためにドラッグ中 )
\r
175 this._Form.pictureBox譜面パネル.Refresh();
\r
177 internal void Paint( PaintEventArgs e )
\r
179 if( this.b範囲選択のためにドラッグ中 )
\r
181 this.t現在の選択範囲を描画する( e.Graphics );
\r
185 #region [ private ]
\r
186 //-----------------
\r
187 private Cメインフォーム _Form;
\r
188 private SolidBrush br選択領域ブラシ = new SolidBrush( Color.FromArgb( 80, 0x37, 0x37, 0xff ) );
\r
189 private bool b移動のためにドラッグ中;
\r
190 private bool b範囲選択のためにドラッグ中;
\r
191 private C譜面管理 mgr譜面管理者ref;
\r
192 private Point pt現在のドラッグ開始位置dot = new Point();
\r
193 private Point pt現在のドラッグ終了位置dot = new Point();
\r
194 private Point pt前回の位置LaneGrid = new Point();
\r
196 private void tチップを横に移動する( Cチップ cc, int n移動量lane )
\r
199 int count = this.mgr譜面管理者ref.listレーン.Count;
\r
200 if( cc.n枠外レーン数 < 0 )
\r
202 num2 = cc.n枠外レーン数 + n移動量lane;
\r
204 else if( cc.n枠外レーン数 > 0 )
\r
206 num2 = ( ( count - 1 ) + cc.n枠外レーン数 ) + n移動量lane;
\r
210 num2 = cc.nレーン番号0to + n移動量lane;
\r
216 else if( num2 >= count )
\r
218 cc.n枠外レーン数 = num2 - ( count - 1 );
\r
222 cc.nレーン番号0to = num2;
\r
226 this._Form.b未保存 = true;
\r
228 private void tチップを縦に移動する( Cチップ cc, int n移動量grid, C小節 csチップのある小節 )
\r
231 int num = cc.n位置grid + n移動量grid;
\r
234 int num2 = csチップのある小節.n小節番号0to3599;
\r
239 c小節 = this.mgr譜面管理者ref.p小節を返す( num2 );
\r
244 num += c小節.n小節長倍率を考慮した現在の小節の高さgrid;
\r
246 Cチップ item = new Cチップ();
\r
247 item.tコピーfrom( cc );
\r
248 item.n位置grid = num;
\r
249 csチップのある小節.listチップ.Remove( cc );
\r
250 c小節.listチップ.Add( item );
\r
252 else if( num >= csチップのある小節.n小節長倍率を考慮した現在の小節の高さgrid )
\r
254 int num3 = csチップのある小節.n小節番号0to3599;
\r
255 C小節 c小節2 = csチップのある小節;
\r
256 while( num >= c小節2.n小節長倍率を考慮した現在の小節の高さgrid )
\r
258 num -= c小節2.n小節長倍率を考慮した現在の小節の高さgrid;
\r
260 c小節2 = this.mgr譜面管理者ref.p小節を返す( num3 );
\r
263 c小節2 = new C小節( num3 );
\r
264 this.mgr譜面管理者ref.dic小節.Add( num3, c小節2 );
\r
267 Cチップ cチップ2 = new Cチップ();
\r
268 cチップ2.tコピーfrom( cc );
\r
269 cチップ2.n位置grid = num;
\r
270 csチップのある小節.listチップ.Remove( cc );
\r
271 c小節2.listチップ.Add( cチップ2 );
\r
277 this._Form.b未保存 = true;
\r
279 private void tチップ移動のRedo( Cチップ位置用UndoRedo ur変更前, Cチップ位置用UndoRedo ur変更後 )
\r
281 C小節 c小節 = this.mgr譜面管理者ref.p小節を返す( ur変更前.n小節番号0to );
\r
284 for( int i = 0; i < c小節.listチップ.Count; i++ )
\r
286 Cチップ item = c小節.listチップ[ i ];
\r
287 if( ( item.b確定選択中 && ( item.n位置grid == ur変更前.n位置grid ) ) && ( item.nレーン番号0to == ur変更前.nレーン番号0to ) )
\r
289 C小節 c小節2 = this.mgr譜面管理者ref.p小節を返す( ur変更後.n小節番号0to );
\r
292 c小節.listチップ.RemoveAt( i );
\r
293 item.nレーン番号0to = ur変更後.nレーン番号0to;
\r
294 item.n位置grid = ur変更後.n位置grid;
\r
295 c小節2.listチップ.Add( item );
\r
300 this._Form.pictureBox譜面パネル.Refresh();
\r
303 private void tチップ移動のUndo( Cチップ位置用UndoRedo ur変更前, Cチップ位置用UndoRedo ur変更後 )
\r
305 C小節 c小節 = this.mgr譜面管理者ref.p小節を返す( ur変更後.n小節番号0to );
\r
308 for( int i = 0; i < c小節.listチップ.Count; i++ )
\r
310 Cチップ item = c小節.listチップ[ i ];
\r
311 if( ( item.b確定選択中 && ( item.n位置grid == ur変更後.n位置grid ) ) && ( item.nレーン番号0to == ur変更後.nレーン番号0to ) )
\r
313 C小節 c小節2 = this.mgr譜面管理者ref.p小節を返す( ur変更前.n小節番号0to );
\r
316 c小節.listチップ.RemoveAt( i );
\r
317 item.nレーン番号0to = ur変更前.nレーン番号0to;
\r
318 item.n位置grid = ur変更前.n位置grid;
\r
319 c小節2.listチップ.Add( item );
\r
324 this._Form.pictureBox譜面パネル.Refresh();
\r
327 private void tドラッグ範囲中のチップを選択する()
\r
329 Rectangle rectangle = new Rectangle();
\r
330 rectangle.X = Math.Min( this.pt現在のドラッグ開始位置dot.X, this.pt現在のドラッグ終了位置dot.X );
\r
331 rectangle.Y = Math.Min( this.pt現在のドラッグ開始位置dot.Y, this.pt現在のドラッグ終了位置dot.Y );
\r
332 rectangle.Width = Math.Abs( (int) ( this.pt現在のドラッグ開始位置dot.X - this.pt現在のドラッグ終了位置dot.X ) );
\r
333 rectangle.Height = Math.Abs( (int) ( this.pt現在のドラッグ開始位置dot.Y - this.pt現在のドラッグ終了位置dot.Y ) );
\r
334 Rectangle rectangle2 = new Rectangle();
\r
335 rectangle2.X = this.mgr譜面管理者ref.nX座標dotが位置するレーン番号を返す( rectangle.X );
\r
336 rectangle2.Y = this.mgr譜面管理者ref.nY座標dotが位置するgridを返す・最高解像度( rectangle.Y );
\r
337 rectangle2.Width = this.mgr譜面管理者ref.nX座標dotが位置するレーン番号を返す( rectangle.Right ) - rectangle2.X;
\r
338 rectangle2.Height = this.mgr譜面管理者ref.nY座標dotが位置するgridを返す・最高解像度( rectangle.Bottom ) - rectangle2.Y;
\r
340 for( int i = 0; i < this.mgr譜面管理者ref.dic小節.Count; i++ )
\r
342 C小節 c小節 = this.mgr譜面管理者ref.dic小節[ i ];
\r
343 int num3 = c小節.n小節長倍率を考慮した現在の小節の高さgrid;
\r
344 for( int j = 0; j < c小節.listチップ.Count; j++ )
\r
347 Cチップ cc = c小節.listチップ[ j ];
\r
348 if( this.mgr譜面管理者ref.bOPENチップである( cc ) )
\r
350 if( ( ( cc.nレーン番号0to + 2 ) >= rectangle2.X ) && ( rectangle2.Right >= cc.nレーン番号0to ) )
\r
354 cc.bドラッグで選択中 = false;
\r
357 if( ( cc.nレーン番号0to < rectangle2.X ) || ( rectangle2.Right < cc.nレーン番号0to ) )
\r
359 cc.bドラッグで選択中 = false;
\r
363 num5 = num + cc.n位置grid;
\r
364 int num6 = num5 + C小節.n位置変換dot2grid( Cチップ.nチップの高さdot );
\r
365 if( ( num6 < rectangle2.Bottom ) || ( rectangle2.Top < num5 ) )
\r
367 cc.bドラッグで選択中 = false;
\r
371 cc.bドラッグで選択中 = true;
\r
377 private void t移動開始処理( MouseEventArgs e )
\r
379 this.b移動のためにドラッグ中 = true;
\r
380 this.pt現在のドラッグ開始位置dot.X = this.pt現在のドラッグ終了位置dot.X = e.X;
\r
381 this.pt現在のドラッグ開始位置dot.Y = this.pt現在のドラッグ終了位置dot.Y = e.Y;
\r
382 this.pt前回の位置LaneGrid.X = this.mgr譜面管理者ref.nX座標dotが位置するレーン番号を返す( e.X );
\r
383 this.pt前回の位置LaneGrid.Y = this.mgr譜面管理者ref.nY座標dotが位置するgridを返す・ガイド幅単位( e.Y );
\r
384 foreach( KeyValuePair<int, C小節> pair in this._Form.mgr譜面管理者.dic小節 )
\r
386 C小節 c小節 = pair.Value;
\r
387 for( int i = 0; i < c小節.listチップ.Count; i++ )
\r
389 Cチップ cチップ = c小節.listチップ[ i ];
\r
392 cチップ.n移動開始時の小節番号0to = c小節.n小節番号0to3599;
\r
393 cチップ.n移動開始時のレーン番号0to = cチップ.nレーン番号0to;
\r
394 cチップ.n移動開始時の小節内の位置grid = cチップ.n位置grid;
\r
399 private void t移動継続処理( MouseEventArgs e )
\r
401 this.pt現在のドラッグ終了位置dot.X = e.X;
\r
402 this.pt現在のドラッグ終了位置dot.Y = e.Y;
\r
403 this.t画面上下にマウスカーソルがあるなら譜面を縦スクロールする( e );
\r
404 this.t確定選択中のチップを移動する();
\r
406 private void t移動終了処理( MouseEventArgs e )
\r
408 this.b移動のためにドラッグ中 = false;
\r
409 foreach( KeyValuePair<int, C小節> pair in this.mgr譜面管理者ref.dic小節 )
\r
411 for( int i = 0; i < pair.Value.listチップ.Count; i++ )
\r
413 Cチップ cチップ = pair.Value.listチップ[ i ];
\r
414 if( cチップ.b確定選択中 && ( cチップ.n枠外レーン数 == 0 ) )
\r
416 Cレーン cレーン = this.mgr譜面管理者ref.listレーン[ cチップ.nレーン番号0to ];
\r
417 cチップ.nチャンネル番号00toFF = cチップ.b裏 ? cレーン.nチャンネル番号・裏00toFF : cレーン.nチャンネル番号・表00toFF;
\r
418 if( ( cレーン.bパターンレーンである() && ( cチップ.n値・整数1to1295 != 1 ) ) && ( cチップ.n値・整数1to1295 != 2 ) )
\r
420 cチップ.n値・整数1to1295 = 1;
\r
425 this._Form.mgrUndoRedo管理者.tトランザクション記録を開始する();
\r
426 foreach( KeyValuePair<int, C小節> pair2 in this.mgr譜面管理者ref.dic小節 )
\r
428 C小節 c小節 = pair2.Value;
\r
429 for( int j = 0; j < pair2.Value.listチップ.Count; j++ )
\r
431 Cチップ cチップ2 = c小節.listチップ[ j ];
\r
432 if( cチップ2.b確定選択中 && ( ( ( cチップ2.n移動開始時の小節番号0to != c小節.n小節番号0to3599 ) || ( cチップ2.n移動開始時のレーン番号0to != cチップ2.nレーン番号0to ) ) || ( cチップ2.n移動開始時の小節内の位置grid != cチップ2.n位置grid ) ) )
\r
434 Cチップ位置用UndoRedo redo = new Cチップ位置用UndoRedo( cチップ2.n移動開始時の小節番号0to, cチップ2.n移動開始時のレーン番号0to, cチップ2.n移動開始時の小節内の位置grid, cチップ2.n値・整数1to1295 );
\r
435 Cチップ位置用UndoRedo redo2 = new Cチップ位置用UndoRedo( c小節.n小節番号0to3599, cチップ2.nレーン番号0to, cチップ2.n位置grid, cチップ2.n値・整数1to1295 );
\r
436 this._Form.mgrUndoRedo管理者.tノードを追加する( new CUndoRedoセル<Cチップ位置用UndoRedo>( null, new DGUndoを実行する<Cチップ位置用UndoRedo>( this.tチップ移動のUndo ), new DGRedoを実行する<Cチップ位置用UndoRedo>( this.tチップ移動のRedo ), redo, redo2 ) );
\r
440 this._Form.tUndoRedo用GUIの有効・無効を設定する();
\r
441 this._Form.mgrUndoRedo管理者.tトランザクション記録を終了する();
\r
443 private void t画面上下にマウスカーソルがあるなら譜面を縦スクロールする( MouseEventArgs e )
\r
447 int nGrid = -( 70 - e.Y ) / 2;
\r
448 int num2 = this._Form.vScrollBar譜面用垂直スクロールバー.Value;
\r
449 int num3 = this._Form.vScrollBar譜面用垂直スクロールバー.Value + nGrid;
\r
450 int minimum = this._Form.vScrollBar譜面用垂直スクロールバー.Minimum;
\r
451 int num5 = ( this._Form.vScrollBar譜面用垂直スクロールバー.Maximum + 1 ) - this._Form.vScrollBar譜面用垂直スクロールバー.LargeChange;
\r
452 if( num3 < minimum )
\r
456 else if( num3 > num5 )
\r
460 this._Form.vScrollBar譜面用垂直スクロールバー.Value = num3;
\r
461 nGrid = num3 - num2;
\r
462 this.pt現在のドラッグ開始位置dot.Y -= C小節.n位置変換grid2dot( nGrid );
\r
464 else if( e.Y > ( this._Form.pictureBox譜面パネル.Height - 50 ) )
\r
466 int num6 = ( ( e.Y - this._Form.pictureBox譜面パネル.Height ) + 50 ) / 2;
\r
467 int num7 = this._Form.vScrollBar譜面用垂直スクロールバー.Value;
\r
468 int num8 = this._Form.vScrollBar譜面用垂直スクロールバー.Value + num6;
\r
469 int num9 = this._Form.vScrollBar譜面用垂直スクロールバー.Minimum;
\r
470 int num10 = ( this._Form.vScrollBar譜面用垂直スクロールバー.Maximum + 1 ) - this._Form.vScrollBar譜面用垂直スクロールバー.LargeChange;
\r
475 else if( num8 > num10 )
\r
479 this._Form.vScrollBar譜面用垂直スクロールバー.Value = num8;
\r
480 num6 = num8 - num7;
\r
481 this.pt現在のドラッグ開始位置dot.Y -= C小節.n位置変換grid2dot( num6 );
\r
484 private void t確定選択中のチップを移動する()
\r
486 Point point = new Point();
\r
487 point.X = this.mgr譜面管理者ref.nX座標dotが位置するレーン番号を返す( this.pt現在のドラッグ終了位置dot.X );
\r
488 point.Y = this.mgr譜面管理者ref.nY座標dotが位置するgridを返す・ガイド幅単位( this.pt現在のドラッグ終了位置dot.Y );
\r
489 Point point2 = new Point();
\r
490 point2.X = point.X - this.pt前回の位置LaneGrid.X;
\r
491 point2.Y = point.Y - this.pt前回の位置LaneGrid.Y;
\r
492 if( ( point2.X != 0 ) || ( point2.Y != 0 ) )
\r
494 foreach( KeyValuePair<int, C小節> pair in this.mgr譜面管理者ref.dic小節 )
\r
496 pair.Value.t小節内の全チップの移動済フラグをリセットする();
\r
498 for( int i = 0; i < this.mgr譜面管理者ref.dic小節.Count; i++ )
\r
500 C小節 c小節 = this.mgr譜面管理者ref.dic小節[ i ];
\r
501 for( int j = 0; j < c小節.listチップ.Count; j++ )
\r
503 Cチップ cc = c小節.listチップ[ j ];
\r
504 if( cc.b確定選択中 && !cc.b移動済 )
\r
506 if( point2.X != 0 )
\r
508 this.tチップを横に移動する( cc, point2.X );
\r
510 if( point2.Y != 0 )
\r
512 this.tチップを縦に移動する( cc, point2.Y, c小節 );
\r
519 this.pt前回の位置LaneGrid.X = point.X;
\r
520 this.pt前回の位置LaneGrid.Y = point.Y;
\r
523 private void t検索する・メイン()
\r
525 C検索ダイアログ c検索ダイアログ = new C検索ダイアログ();
\r
526 if( !c検索ダイアログ.bレーンリストの内訳が生成済みである )
\r
528 int count = this._Form.mgr譜面管理者.listレーン.Count;
\r
529 string[] strArray = new string[ count ];
\r
530 for( int i = 0; i < count; i++ )
\r
532 strArray[ i ] = this._Form.mgr譜面管理者.listレーン[ i ].strレーン名;
\r
534 c検索ダイアログ.tレーンリストの内訳を生成する( strArray );
\r
536 if( c検索ダイアログ.ShowDialog() == DialogResult.OK )
\r
538 int num3 = c検索ダイアログ.bチップ範囲指定CheckBoxがチェックされている ? c検索ダイアログ.nチップ範囲開始番号 : 0;
\r
539 int num4 = c検索ダイアログ.bチップ範囲指定CheckBoxがチェックされている ? c検索ダイアログ.nチップ範囲終了番号 : 0x50f;
\r
540 if( ( c検索ダイアログ.bチップ範囲指定CheckBoxがチェックされている && ( num3 < 0 ) ) && ( num4 < 0 ) )
\r
545 int num5 = c検索ダイアログ.b小節範囲指定CheckBoxがチェックされている ? c検索ダイアログ.n小節範囲開始番号 : 0;
\r
546 int num6 = c検索ダイアログ.b小節範囲指定CheckBoxがチェックされている ? c検索ダイアログ.n小節範囲終了番号 : this._Form.mgr譜面管理者.n現在の最大の小節番号を返す();
\r
547 if( ( c検索ダイアログ.b小節範囲指定CheckBoxがチェックされている && ( num5 < 0 ) ) && ( num6 < 0 ) )
\r
550 num6 = this._Form.mgr譜面管理者.n現在の最大の小節番号を返す();
\r
552 if( ( ( num5 >= 0 ) && ( num6 >= 0 ) ) && ( ( num3 >= 0 ) && ( num4 >= 0 ) ) )
\r
554 this._Form.mgrUndoRedo管理者.tトランザクション記録を開始する();
\r
556 for( int j = num5; j <= num6; j++ )
\r
558 C小節 c小節 = this._Form.mgr譜面管理者.p小節を返す( j );
\r
561 for( int k = 0; k < c小節.listチップ.Count; k++ )
\r
563 Cチップ cチップ = c小節.listチップ[ k ];
\r
564 if( ( ( !c検索ダイアログ.bレーン指定CheckBoxがチェックされている || c検索ダイアログ.bレーンが検索対象である( cチップ.nレーン番号0to ) ) && ( ( cチップ.n値・整数1to1295 >= num3 ) && ( cチップ.n値・整数1to1295 <= num4 ) ) ) && ( ( c検索ダイアログ.b表チップCheckBoxがチェックされている && !cチップ.b裏 ) || ( c検索ダイアログ.b裏チップCheckBoxがチェックされている && cチップ.b裏 ) ) )
\r
566 Cチップ位置用UndoRedo redo = new Cチップ位置用UndoRedo( c小節.n小節番号0to3599, cチップ.nレーン番号0to, cチップ.n位置grid, cチップ.n値・整数1to1295 );
\r
567 this._Form.mgrUndoRedo管理者.tノードを追加する( new CUndoRedoセル<Cチップ位置用UndoRedo>( null, new DGUndoを実行する<Cチップ位置用UndoRedo>( this.mgr譜面管理者ref.tチップ選択のUndo ), new DGRedoを実行する<Cチップ位置用UndoRedo>( this.mgr譜面管理者ref.tチップ選択のRedo ), redo, redo ) );
\r
568 cチップ.b確定選択中 = true;
\r
574 this._Form.mgrUndoRedo管理者.tトランザクション記録を終了する();
\r
575 this._Form.tUndoRedo用GUIの有効・無効を設定する();
\r
576 this._Form.pictureBox譜面パネル.Refresh();
\r
579 this._Form.t選択チップの有無に応じて編集用GUIの有効・無効を設定する();
\r
580 MessageBox.Show( num7 + Resources.str個のチップが選択されましたMSG, Resources.str検索結果ダイアログのタイトル, MessageBoxButtons.OK, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1 );
\r
584 MessageBox.Show( Resources.str該当するチップはありませんでしたMSG, Resources.str検索結果ダイアログのタイトル, MessageBoxButtons.OK, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1 );
\r
589 private void t現在の選択範囲を描画する( Graphics g )
\r
591 Rectangle rect = new Rectangle();
\r
592 rect.X = Math.Min( this.pt現在のドラッグ開始位置dot.X, this.pt現在のドラッグ終了位置dot.X );
\r
593 rect.Y = Math.Min( this.pt現在のドラッグ開始位置dot.Y, this.pt現在のドラッグ終了位置dot.Y );
\r
594 rect.Width = Math.Abs( (int) ( this.pt現在のドラッグ開始位置dot.X - this.pt現在のドラッグ終了位置dot.X ) );
\r
595 rect.Height = Math.Abs( (int) ( this.pt現在のドラッグ開始位置dot.Y - this.pt現在のドラッグ終了位置dot.Y ) );
\r
596 if( rect.Width < 0 )
\r
598 rect.X = this.pt現在のドラッグ開始位置dot.X;
\r
599 rect.Width = this.pt現在のドラッグ開始位置dot.X - rect.X;
\r
601 if( rect.Height < 0 )
\r
603 rect.Y = this.pt現在のドラッグ開始位置dot.Y;
\r
604 rect.Height = this.pt現在のドラッグ開始位置dot.Y - rect.Y;
\r
606 if( ( rect.Width != 0 ) && ( rect.Height != 0 ) )
\r
608 g.FillRectangle( this.br選択領域ブラシ, rect );
\r
609 g.DrawRectangle( Pens.LightBlue, rect );
\r
612 private void t選択チップを単純置換する( int n元番号, int n先番号 )
\r
614 if( ( n元番号 < 0 ) || ( n先番号 < 0 ) )
\r
616 MessageBox.Show( Resources.strチップ番号に誤りがありますMSG, Resources.str置換結果ダイアログのタイトル, MessageBoxButtons.OK, MessageBoxIcon.Hand, MessageBoxDefaultButton.Button1 );
\r
621 this._Form.mgrUndoRedo管理者.tトランザクション記録を開始する();
\r
622 foreach( KeyValuePair<int, C小節> pair in this._Form.mgr譜面管理者.dic小節 )
\r
624 C小節 c小節 = pair.Value;
\r
625 for( int i = 0; i < c小節.listチップ.Count; i++ )
\r
627 Cチップ cチップ = c小節.listチップ[ i ];
\r
628 if( cチップ.b確定選択中 && ( cチップ.n値・整数1to1295 == n元番号 ) )
\r
630 Cチップ位置用UndoRedo redo = new Cチップ位置用UndoRedo( c小節.n小節番号0to3599, cチップ.nレーン番号0to, cチップ.n位置grid, cチップ.n値・整数1to1295 );
\r
631 Cチップ位置用UndoRedo redo2 = new Cチップ位置用UndoRedo( c小節.n小節番号0to3599, cチップ.nレーン番号0to, cチップ.n位置grid, n先番号 );
\r
632 this._Form.mgrUndoRedo管理者.tノードを追加する( new CUndoRedoセル<Cチップ位置用UndoRedo>( null, new DGUndoを実行する<Cチップ位置用UndoRedo>( this.mgr譜面管理者ref.tチップ番号置換のUndo ), new DGRedoを実行する<Cチップ位置用UndoRedo>( this.mgr譜面管理者ref.tチップ番号置換のRedo ), redo, redo2 ) );
\r
633 cチップ.n値・整数1to1295 = n先番号;
\r
638 this._Form.mgrUndoRedo管理者.tトランザクション記録を終了する();
\r
639 this._Form.tUndoRedo用GUIの有効・無効を設定する();
\r
642 this._Form.b未保存 = true;
\r
643 this._Form.pictureBox譜面パネル.Refresh();
\r
644 MessageBox.Show( num + Resources.str個のチップを置換しましたMSG, Resources.str置換結果ダイアログのタイトル, MessageBoxButtons.OK, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1 );
\r
648 MessageBox.Show( Resources.str該当するチップはありませんでしたMSG, Resources.str置換結果ダイアログのタイトル, MessageBoxButtons.OK, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1 );
\r
652 private void t選択チップを表裏反転置換する()
\r
655 this._Form.mgrUndoRedo管理者.tトランザクション記録を開始する();
\r
656 foreach( KeyValuePair<int, C小節> pair in this._Form.mgr譜面管理者.dic小節 )
\r
658 C小節 c小節 = pair.Value;
\r
659 for( int i = 0; i < c小節.listチップ.Count; i++ )
\r
661 Cチップ cチップ = c小節.listチップ[ i ];
\r
664 Cチップ位置用UndoRedo redo = new Cチップ位置用UndoRedo( c小節.n小節番号0to3599, cチップ.nレーン番号0to, cチップ.n位置grid, cチップ.n値・整数1to1295 );
\r
665 this._Form.mgrUndoRedo管理者.tノードを追加する( new CUndoRedoセル<Cチップ位置用UndoRedo>( null, new DGUndoを実行する<Cチップ位置用UndoRedo>( this.mgr譜面管理者ref.tチップ表裏反転のUndo ), new DGRedoを実行する<Cチップ位置用UndoRedo>( this.mgr譜面管理者ref.tチップ表裏反転のRedo ), redo, redo ) );
\r
668 cチップ.nチャンネル番号00toFF = this._Form.mgr譜面管理者.listレーン[ cチップ.nレーン番号0to ].nチャンネル番号・表00toFF;
\r
673 cチップ.nチャンネル番号00toFF = this._Form.mgr譜面管理者.listレーン[ cチップ.nレーン番号0to ].nチャンネル番号・裏00toFF;
\r
680 this._Form.mgrUndoRedo管理者.tトランザクション記録を終了する();
\r
681 this._Form.tUndoRedo用GUIの有効・無効を設定する();
\r
684 this._Form.b未保存 = true;
\r
685 this._Form.pictureBox譜面パネル.Refresh();
\r
686 MessageBox.Show( num + Resources.str個のチップを置換しましたMSG, Resources.str置換結果ダイアログのタイトル, MessageBoxButtons.OK, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1 );
\r
689 private void t置換する・メイン()
\r
691 C置換ダイアログ c置換ダイアログ = new C置換ダイアログ();
\r
693 if( !this._Form.mgr譜面管理者.b確定選択中のチップがある() )
\r
700 foreach( KeyValuePair<int, C小節> pair in this._Form.mgr譜面管理者.dic小節 )
\r
702 foreach( Cチップ cチップ in pair.Value.listチップ )
\r
708 num = cチップ.n値・整数1to1295;
\r
710 else if( num != cチップ.n値・整数1to1295 )
\r
724 c置換ダイアログ.n元番号 = num;
\r
726 if( c置換ダイアログ.ShowDialog() == DialogResult.OK )
\r
728 if( c置換ダイアログ.b表裏反転RadioButtonがチェックされている )
\r
730 this.t選択チップを表裏反転置換する();
\r
732 else if( c置換ダイアログ.b単純置換RadioButtonがチェックされている )
\r
734 this.t選択チップを単純置換する( c置換ダイアログ.n元番号, c置換ダイアログ.n先番号 );
\r
739 this.t全チップの選択を解除する();
\r
742 private void t範囲選択開始処理( MouseEventArgs e )
\r
744 this.b範囲選択のためにドラッグ中 = true;
\r
745 this.pt現在のドラッグ開始位置dot.X = this.pt現在のドラッグ終了位置dot.X = e.X;
\r
746 this.pt現在のドラッグ開始位置dot.Y = this.pt現在のドラッグ終了位置dot.Y = e.Y;
\r
747 if( ( Control.ModifierKeys & Keys.Control ) != Keys.Control )
\r
749 this.t全チップの選択を解除する();
\r
751 this.tドラッグ範囲中のチップを選択する();
\r
753 private void t範囲選択継続処理( MouseEventArgs e )
\r
755 this.pt現在のドラッグ終了位置dot.X = e.X;
\r
756 this.pt現在のドラッグ終了位置dot.Y = e.Y;
\r
757 this.t画面上下にマウスカーソルがあるなら譜面を縦スクロールする( e );
\r
758 this.tドラッグ範囲中のチップを選択する();
\r
760 private void t範囲選択終了処理( MouseEventArgs e )
\r
762 this.b範囲選択のためにドラッグ中 = false;
\r
763 this._Form.mgrUndoRedo管理者.tトランザクション記録を開始する();
\r
764 foreach( KeyValuePair<int, C小節> pair in this.mgr譜面管理者ref.dic小節 )
\r
766 C小節 c小節 = pair.Value;
\r
767 for( int i = 0; i < c小節.listチップ.Count; i++ )
\r
769 Cチップ cチップ = c小節.listチップ[ i ];
\r
770 if( cチップ.bドラッグで選択中 && !cチップ.b確定選択中 )
\r
772 Cチップ位置用UndoRedo redo = new Cチップ位置用UndoRedo( c小節.n小節番号0to3599, cチップ.nレーン番号0to, cチップ.n位置grid, cチップ.n値・整数1to1295 );
\r
773 this._Form.mgrUndoRedo管理者.tノードを追加する( new CUndoRedoセル<Cチップ位置用UndoRedo>( null, new DGUndoを実行する<Cチップ位置用UndoRedo>( this.mgr譜面管理者ref.tチップ選択のUndo ), new DGRedoを実行する<Cチップ位置用UndoRedo>( this.mgr譜面管理者ref.tチップ選択のRedo ), redo, redo ) );
\r
777 this._Form.mgrUndoRedo管理者.tトランザクション記録を終了する();
\r
778 this._Form.tUndoRedo用GUIの有効・無効を設定する();
\r
779 foreach( KeyValuePair<int, C小節> pair2 in this.mgr譜面管理者ref.dic小節 )
\r
781 C小節 c小節2 = pair2.Value;
\r
782 for( int j = 0; j < c小節2.listチップ.Count; j++ )
\r
784 Cチップ cチップ2 = c小節2.listチップ[ j ];
\r
785 if( cチップ2.bドラッグで選択中 )
\r
787 cチップ2.bドラッグで選択中 = false;
\r
788 cチップ2.b確定選択中 = true;
\r
792 this._Form.t選択チップの有無に応じて編集用GUIの有効・無効を設定する();
\r
794 //-----------------
\r