2 using System.Collections.Generic;
\r
3 using System.Diagnostics;
\r
5 using System.Windows.Forms;
\r
6 using System.Drawing;
\r
7 using DTXCreator.UndoRedo;
\r
8 using DTXCreator.Properties;
\r
10 namespace DTXCreator.譜面
\r
12 public class C選択モード管理
\r
14 public C選択モード管理( Cメインフォーム formメインフォーム )
\r
16 this._Form = formメインフォーム;
\r
17 this.mgr譜面管理者ref = formメインフォーム.mgr譜面管理者;
\r
21 this._Form.dlgチップパレット.t一時的に隠蔽する();
\r
23 this._Form.dlgチップパレット.t一時的な隠蔽を解除する();
\r
25 public void t個別選択解除( Cチップ cc )
\r
27 Cチップ位置用UndoRedo redo = new Cチップ位置用UndoRedo( this.mgr譜面管理者ref.pチップの存在する小節を返す( cc ).n小節番号0to3599, cc.nレーン番号0to, cc.n位置grid, cc.n値・整数1to1295 );
\r
28 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
29 this._Form.tUndoRedo用GUIの有効・無効を設定する();
\r
32 public void t全チップの選択を解除する()
\r
34 this._Form.mgrUndoRedo管理者.tトランザクション記録を開始する();
\r
35 foreach( KeyValuePair<int, C小節> pair in this.mgr譜面管理者ref.dic小節 )
\r
37 C小節 c小節 = pair.Value;
\r
38 for( int j = 0; j < c小節.listチップ.Count; j++ )
\r
40 Cチップ cチップ = c小節.listチップ[ j ];
\r
41 if( cチップ.n枠外レーン数 != 0 )
\r
43 Cチップ cc = new Cチップ();
\r
44 cc.tコピーfrom( cチップ );
\r
45 Cチップ配置用UndoRedo redo = new Cチップ配置用UndoRedo( c小節.n小節番号0to3599, cc );
\r
46 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
47 c小節.listチップ.Remove( cチップ );
\r
52 for( int i = 0; i < this.mgr譜面管理者ref.dic小節.Count; i++ )
\r
54 C小節 c小節2 = this.mgr譜面管理者ref.dic小節[ i ];
\r
55 for( int k = 0; k < c小節2.listチップ.Count; k++ )
\r
57 Cチップ cチップ3 = c小節2.listチップ[ k ];
\r
58 if( cチップ3.b確定選択中 || cチップ3.bドラッグで選択中 )
\r
60 this.mgr譜面管理者ref.bOPENチップである( cチップ3 );
\r
61 for( int m = 0; m < c小節2.listチップ.Count; m++ )
\r
63 Cチップ cチップ4 = c小節2.listチップ[ m ];
\r
64 if( ( ( k != m ) && ( cチップ3.nレーン番号0to == cチップ4.nレーン番号0to ) ) && ( ( cチップ3.n位置grid == cチップ4.n位置grid ) && !cチップ4.b確定選択中 ) )
\r
66 Cチップ cチップ5 = new Cチップ();
\r
67 cチップ5.tコピーfrom( cチップ4 );
\r
68 Cチップ配置用UndoRedo redo2 = new Cチップ配置用UndoRedo( c小節2.n小節番号0to3599, cチップ5 );
\r
69 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
70 c小節2.listチップ.RemoveAt( m );
\r
78 foreach( KeyValuePair<int, C小節> pair2 in this.mgr譜面管理者ref.dic小節 )
\r
80 C小節 c小節3 = pair2.Value;
\r
81 for( int n = 0; n < c小節3.listチップ.Count; n++ )
\r
83 Cチップ cチップ6 = c小節3.listチップ[ n ];
\r
86 Cチップ位置用UndoRedo redo3 = new Cチップ位置用UndoRedo( c小節3.n小節番号0to3599, cチップ6.nレーン番号0to, cチップ6.n位置grid, cチップ6.n値・整数1to1295 );
\r
87 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
89 cチップ6.bドラッグで選択中 = false;
\r
90 cチップ6.b確定選択中 = false;
\r
94 this._Form.mgrUndoRedo管理者.tトランザクション記録を終了する();
\r
95 this._Form.tUndoRedo用GUIの有効・無効を設定する();
\r
97 public void t全チップを選択する()
\r
99 this._Form.mgrUndoRedo管理者.tトランザクション記録を開始する();
\r
100 foreach( KeyValuePair<int, C小節> pair in this.mgr譜面管理者ref.dic小節 )
\r
102 C小節 c小節 = pair.Value;
\r
103 for( int i = 0; i < c小節.listチップ.Count; i++ )
\r
105 Cチップ cチップ = c小節.listチップ[ i ];
\r
108 Cチップ位置用UndoRedo redo = new Cチップ位置用UndoRedo( c小節.n小節番号0to3599, cチップ.nレーン番号0to, cチップ.n位置grid, cチップ.n値・整数1to1295 );
\r
109 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
110 cチップ.bドラッグで選択中 = false;
\r
111 cチップ.b確定選択中 = true;
\r
115 this._Form.mgrUndoRedo管理者.tトランザクション記録を終了する();
\r
116 this._Form.tUndoRedo用GUIの有効・無効を設定する();
\r
117 this._Form.t選択チップの有無に応じて編集用GUIの有効・無効を設定する();
\r
118 this._Form.pictureBox譜面パネル.Refresh();
\r
120 public void tレーン上の全チップを選択する( int lane ) // #32134 2013.9.29 suggested by beatme
\r
122 // Debug.WriteLine( "laneno=" + lane + " " + this.mgr譜面管理者ref.listレーン[ lane ].strレーン名 );
\r
124 this._Form.mgrUndoRedo管理者.tトランザクション記録を開始する();
\r
125 foreach ( KeyValuePair<int, C小節> pair in this.mgr譜面管理者ref.dic小節 )
\r
127 C小節 c小節 = pair.Value;
\r
128 for ( int i = 0; i < c小節.listチップ.Count; i++ )
\r
130 Cチップ cチップ = c小節.listチップ[ i ];
\r
131 if ( cチップ.nレーン番号0to == lane && !cチップ.b確定選択中 )
\r
133 Cチップ位置用UndoRedo redo = new Cチップ位置用UndoRedo( c小節.n小節番号0to3599, cチップ.nレーン番号0to, cチップ.n位置grid, cチップ.n値・整数1to1295 );
\r
134 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
135 cチップ.bドラッグで選択中 = false;
\r
136 cチップ.b確定選択中 = true;
\r
140 this._Form.mgrUndoRedo管理者.tトランザクション記録を終了する();
\r
141 this._Form.tUndoRedo用GUIの有効・無効を設定する();
\r
142 this._Form.t選択チップの有無に応じて編集用GUIの有効・無効を設定する();
\r
143 this._Form.pictureBox譜面パネル.Refresh();
\r
145 public void t小節上の全チップを選択する( int n小節番号 ) // #32134 2013.9.29 suggested by beatme
\r
147 this._Form.mgrUndoRedo管理者.tトランザクション記録を開始する();
\r
148 C小節 c小節 = this.mgr譜面管理者ref.dic小節[ n小節番号 ];
\r
149 for ( int i = 0; i < c小節.listチップ.Count; i++ )
\r
151 Cチップ cチップ = c小節.listチップ[ i ];
\r
152 if ( !cチップ.b確定選択中 )
\r
154 Cチップ位置用UndoRedo redo = new Cチップ位置用UndoRedo( c小節.n小節番号0to3599, cチップ.nレーン番号0to, cチップ.n位置grid, cチップ.n値・整数1to1295 );
\r
155 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
156 cチップ.bドラッグで選択中 = false;
\r
157 cチップ.b確定選択中 = true;
\r
160 this._Form.mgrUndoRedo管理者.tトランザクション記録を終了する();
\r
161 this._Form.tUndoRedo用GUIの有効・無効を設定する();
\r
162 this._Form.t選択チップの有無に応じて編集用GUIの有効・無効を設定する();
\r
163 this._Form.pictureBox譜面パネル.Refresh();
\r
165 public void t置換する()
\r
167 this._Form.dlgチップパレット.t一時的に隠蔽する();
\r
169 this._Form.dlgチップパレット.t一時的な隠蔽を解除する();
\r
171 internal void MouseClick( MouseEventArgs e )
\r
173 if( e.Button == MouseButtons.Right )
\r
175 this._Form.t選択モードのコンテクストメニューを表示する( e.X, e.Y );
\r
178 internal void MouseDown( MouseEventArgs e )
\r
180 if( e.Button == MouseButtons.Left )
\r
182 Cチップ cc = this.mgr譜面管理者ref.p指定された座標dotにあるチップを返す( e.X, e.Y );
\r
183 if( ( cc == null ) || !cc.b確定選択中 )
\r
185 this.t範囲選択開始処理( e );
\r
187 else if( ( Control.ModifierKeys & Keys.Control ) != Keys.Control )
\r
193 this.t個別選択解除( cc );
\r
197 internal void MouseMove( MouseEventArgs e )
\r
199 if( e.Button == MouseButtons.Left )
\r
201 if( this.b範囲選択のためにドラッグ中 )
\r
203 this.t範囲選択継続処理( e );
\r
205 if( this.b移動のためにドラッグ中 )
\r
212 if( this.b範囲選択のためにドラッグ中 )
\r
214 this.t範囲選択終了処理( e );
\r
216 if( this.b移動のためにドラッグ中 )
\r
221 this._Form.pictureBox譜面パネル.Refresh();
\r
223 internal void Paint( PaintEventArgs e )
\r
225 if( this.b範囲選択のためにドラッグ中 )
\r
227 this.t現在の選択範囲を描画する( e.Graphics );
\r
231 #region [ private ]
\r
232 //-----------------
\r
233 private Cメインフォーム _Form;
\r
234 private SolidBrush br選択領域ブラシ = new SolidBrush( Color.FromArgb( 80, 0x37, 0x37, 0xff ) );
\r
235 private bool b移動のためにドラッグ中;
\r
236 private bool b範囲選択のためにドラッグ中;
\r
237 private C譜面管理 mgr譜面管理者ref;
\r
238 private Point pt現在のドラッグ開始位置dot = new Point();
\r
239 private Point pt現在のドラッグ終了位置dot = new Point();
\r
240 private Point pt前回の位置LaneGrid = new Point();
\r
242 private void tチップを横に移動する( Cチップ cc, int n移動量lane )
\r
245 int count = this.mgr譜面管理者ref.listレーン.Count;
\r
246 if( cc.n枠外レーン数 < 0 )
\r
248 num2 = cc.n枠外レーン数 + n移動量lane;
\r
250 else if( cc.n枠外レーン数 > 0 )
\r
252 num2 = ( ( count - 1 ) + cc.n枠外レーン数 ) + n移動量lane;
\r
256 num2 = cc.nレーン番号0to + n移動量lane;
\r
262 else if( num2 >= count )
\r
264 cc.n枠外レーン数 = num2 - ( count - 1 );
\r
268 cc.nレーン番号0to = num2;
\r
272 this._Form.b未保存 = true;
\r
274 private void tチップを縦に移動する( Cチップ cc, int n移動量grid, C小節 csチップのある小節 )
\r
277 int num = cc.n位置grid + n移動量grid;
\r
280 int num2 = csチップのある小節.n小節番号0to3599;
\r
285 c小節 = this.mgr譜面管理者ref.p小節を返す( num2 );
\r
290 num += c小節.n小節長倍率を考慮した現在の小節の高さgrid;
\r
292 Cチップ item = new Cチップ();
\r
293 item.tコピーfrom( cc );
\r
294 item.n位置grid = num;
\r
295 csチップのある小節.listチップ.Remove( cc );
\r
296 c小節.listチップ.Add( item );
\r
298 else if( num >= csチップのある小節.n小節長倍率を考慮した現在の小節の高さgrid )
\r
300 int num3 = csチップのある小節.n小節番号0to3599;
\r
301 C小節 c小節2 = csチップのある小節;
\r
302 while( num >= c小節2.n小節長倍率を考慮した現在の小節の高さgrid )
\r
304 num -= c小節2.n小節長倍率を考慮した現在の小節の高さgrid;
\r
306 c小節2 = this.mgr譜面管理者ref.p小節を返す( num3 );
\r
309 c小節2 = new C小節( num3 );
\r
310 this.mgr譜面管理者ref.dic小節.Add( num3, c小節2 );
\r
313 Cチップ cチップ2 = new Cチップ();
\r
314 cチップ2.tコピーfrom( cc );
\r
315 cチップ2.n位置grid = num;
\r
316 csチップのある小節.listチップ.Remove( cc );
\r
317 c小節2.listチップ.Add( cチップ2 );
\r
323 this._Form.b未保存 = true;
\r
325 private void tチップ移動のRedo( Cチップ位置用UndoRedo ur変更前, Cチップ位置用UndoRedo ur変更後 )
\r
327 C小節 c小節 = this.mgr譜面管理者ref.p小節を返す( ur変更前.n小節番号0to );
\r
330 for( int i = 0; i < c小節.listチップ.Count; i++ )
\r
332 Cチップ item = c小節.listチップ[ i ];
\r
333 if( ( item.b確定選択中 && ( item.n位置grid == ur変更前.n位置grid ) ) && ( item.nレーン番号0to == ur変更前.nレーン番号0to ) )
\r
335 C小節 c小節2 = this.mgr譜面管理者ref.p小節を返す( ur変更後.n小節番号0to );
\r
338 c小節.listチップ.RemoveAt( i );
\r
339 item.nレーン番号0to = ur変更後.nレーン番号0to;
\r
340 item.n位置grid = ur変更後.n位置grid;
\r
341 c小節2.listチップ.Add( item );
\r
346 this._Form.pictureBox譜面パネル.Refresh();
\r
349 private void tチップ移動のUndo( Cチップ位置用UndoRedo ur変更前, Cチップ位置用UndoRedo ur変更後 )
\r
351 C小節 c小節 = this.mgr譜面管理者ref.p小節を返す( ur変更後.n小節番号0to );
\r
354 for( int i = 0; i < c小節.listチップ.Count; i++ )
\r
356 Cチップ item = c小節.listチップ[ i ];
\r
357 if( ( item.b確定選択中 && ( item.n位置grid == ur変更後.n位置grid ) ) && ( item.nレーン番号0to == ur変更後.nレーン番号0to ) )
\r
359 C小節 c小節2 = this.mgr譜面管理者ref.p小節を返す( ur変更前.n小節番号0to );
\r
362 c小節.listチップ.RemoveAt( i );
\r
363 item.nレーン番号0to = ur変更前.nレーン番号0to;
\r
364 item.n位置grid = ur変更前.n位置grid;
\r
365 c小節2.listチップ.Add( item );
\r
370 this._Form.pictureBox譜面パネル.Refresh();
\r
373 private void tドラッグ範囲中のチップを選択する()
\r
375 Rectangle rectangle = new Rectangle();
\r
376 rectangle.X = Math.Min( this.pt現在のドラッグ開始位置dot.X, this.pt現在のドラッグ終了位置dot.X );
\r
377 rectangle.Y = Math.Min( this.pt現在のドラッグ開始位置dot.Y, this.pt現在のドラッグ終了位置dot.Y );
\r
378 rectangle.Width = Math.Abs( (int) ( this.pt現在のドラッグ開始位置dot.X - this.pt現在のドラッグ終了位置dot.X ) );
\r
379 rectangle.Height = Math.Abs( (int) ( this.pt現在のドラッグ開始位置dot.Y - this.pt現在のドラッグ終了位置dot.Y ) );
\r
380 Rectangle rectangle2 = new Rectangle();
\r
381 rectangle2.X = this.mgr譜面管理者ref.nX座標dotが位置するレーン番号を返す( rectangle.X );
\r
382 rectangle2.Y = this.mgr譜面管理者ref.nY座標dotが位置するgridを返す・最高解像度( rectangle.Y );
\r
383 rectangle2.Width = this.mgr譜面管理者ref.nX座標dotが位置するレーン番号を返す( rectangle.Right ) - rectangle2.X;
\r
384 rectangle2.Height = this.mgr譜面管理者ref.nY座標dotが位置するgridを返す・最高解像度( rectangle.Bottom ) - rectangle2.Y;
\r
386 for( int i = 0; i < this.mgr譜面管理者ref.dic小節.Count; i++ )
\r
388 C小節 c小節 = this.mgr譜面管理者ref.dic小節[ i ];
\r
389 int num3 = c小節.n小節長倍率を考慮した現在の小節の高さgrid;
\r
390 for( int j = 0; j < c小節.listチップ.Count; j++ )
\r
393 Cチップ cc = c小節.listチップ[ j ];
\r
394 if( this.mgr譜面管理者ref.bOPENチップである( cc ) )
\r
396 if( ( ( cc.nレーン番号0to + 2 ) >= rectangle2.X ) && ( rectangle2.Right >= cc.nレーン番号0to ) )
\r
400 cc.bドラッグで選択中 = false;
\r
403 if( ( cc.nレーン番号0to < rectangle2.X ) || ( rectangle2.Right < cc.nレーン番号0to ) )
\r
405 cc.bドラッグで選択中 = false;
\r
409 num5 = num + cc.n位置grid;
\r
410 int num6 = num5 + C小節.n位置変換dot2grid( Cチップ.nチップの高さdot );
\r
411 if( ( num6 < rectangle2.Bottom ) || ( rectangle2.Top < num5 ) )
\r
413 cc.bドラッグで選択中 = false;
\r
417 cc.bドラッグで選択中 = true;
\r
423 private void t移動開始処理( MouseEventArgs e )
\r
425 this.b移動のためにドラッグ中 = true;
\r
426 this.pt現在のドラッグ開始位置dot.X = this.pt現在のドラッグ終了位置dot.X = e.X;
\r
427 this.pt現在のドラッグ開始位置dot.Y = this.pt現在のドラッグ終了位置dot.Y = e.Y;
\r
428 this.pt前回の位置LaneGrid.X = this.mgr譜面管理者ref.nX座標dotが位置するレーン番号を返す( e.X );
\r
429 this.pt前回の位置LaneGrid.Y = this.mgr譜面管理者ref.nY座標dotが位置するgridを返す・ガイド幅単位( e.Y );
\r
430 foreach( KeyValuePair<int, C小節> pair in this._Form.mgr譜面管理者.dic小節 )
\r
432 C小節 c小節 = pair.Value;
\r
433 for( int i = 0; i < c小節.listチップ.Count; i++ )
\r
435 Cチップ cチップ = c小節.listチップ[ i ];
\r
438 cチップ.n移動開始時の小節番号0to = c小節.n小節番号0to3599;
\r
439 cチップ.n移動開始時のレーン番号0to = cチップ.nレーン番号0to;
\r
440 cチップ.n移動開始時の小節内の位置grid = cチップ.n位置grid;
\r
445 private void t移動継続処理( MouseEventArgs e )
\r
447 this.pt現在のドラッグ終了位置dot.X = e.X;
\r
448 this.pt現在のドラッグ終了位置dot.Y = e.Y;
\r
449 this.t画面上下にマウスカーソルがあるなら譜面を縦スクロールする( e );
\r
450 this.t確定選択中のチップを移動する();
\r
452 private void t移動終了処理( MouseEventArgs e )
\r
454 this.b移動のためにドラッグ中 = false;
\r
455 foreach( KeyValuePair<int, C小節> pair in this.mgr譜面管理者ref.dic小節 )
\r
457 for( int i = 0; i < pair.Value.listチップ.Count; i++ )
\r
459 Cチップ cチップ = pair.Value.listチップ[ i ];
\r
460 if( cチップ.b確定選択中 && ( cチップ.n枠外レーン数 == 0 ) )
\r
462 Cレーン cレーン = this.mgr譜面管理者ref.listレーン[ cチップ.nレーン番号0to ];
\r
463 cチップ.nチャンネル番号00toFF = cチップ.b裏 ? cレーン.nチャンネル番号・裏00toFF : cレーン.nチャンネル番号・表00toFF;
\r
464 if( ( cレーン.bパターンレーンである() && ( cチップ.n値・整数1to1295 != 1 ) ) && ( cチップ.n値・整数1to1295 != 2 ) )
\r
466 cチップ.n値・整数1to1295 = 1;
\r
471 this._Form.mgrUndoRedo管理者.tトランザクション記録を開始する();
\r
472 foreach( KeyValuePair<int, C小節> pair2 in this.mgr譜面管理者ref.dic小節 )
\r
474 C小節 c小節 = pair2.Value;
\r
475 for( int j = 0; j < pair2.Value.listチップ.Count; j++ )
\r
477 Cチップ cチップ2 = c小節.listチップ[ j ];
\r
478 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
480 Cチップ位置用UndoRedo redo = new Cチップ位置用UndoRedo( cチップ2.n移動開始時の小節番号0to, cチップ2.n移動開始時のレーン番号0to, cチップ2.n移動開始時の小節内の位置grid, cチップ2.n値・整数1to1295 );
\r
481 Cチップ位置用UndoRedo redo2 = new Cチップ位置用UndoRedo( c小節.n小節番号0to3599, cチップ2.nレーン番号0to, cチップ2.n位置grid, cチップ2.n値・整数1to1295 );
\r
482 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
486 this._Form.tUndoRedo用GUIの有効・無効を設定する();
\r
487 this._Form.mgrUndoRedo管理者.tトランザクション記録を終了する();
\r
489 private void t画面上下にマウスカーソルがあるなら譜面を縦スクロールする( MouseEventArgs e )
\r
493 int nGrid = -( 70 - e.Y ) / 2;
\r
494 int num2 = this._Form.vScrollBar譜面用垂直スクロールバー.Value;
\r
495 int num3 = this._Form.vScrollBar譜面用垂直スクロールバー.Value + nGrid;
\r
496 int minimum = this._Form.vScrollBar譜面用垂直スクロールバー.Minimum;
\r
497 int num5 = ( this._Form.vScrollBar譜面用垂直スクロールバー.Maximum + 1 ) - this._Form.vScrollBar譜面用垂直スクロールバー.LargeChange;
\r
498 if( num3 < minimum )
\r
502 else if( num3 > num5 )
\r
506 this._Form.vScrollBar譜面用垂直スクロールバー.Value = num3;
\r
507 nGrid = num3 - num2;
\r
508 this.pt現在のドラッグ開始位置dot.Y -= C小節.n位置変換grid2dot( nGrid );
\r
510 else if( e.Y > ( this._Form.pictureBox譜面パネル.Height - 50 ) )
\r
512 int num6 = ( ( e.Y - this._Form.pictureBox譜面パネル.Height ) + 50 ) / 2;
\r
513 int num7 = this._Form.vScrollBar譜面用垂直スクロールバー.Value;
\r
514 int num8 = this._Form.vScrollBar譜面用垂直スクロールバー.Value + num6;
\r
515 int num9 = this._Form.vScrollBar譜面用垂直スクロールバー.Minimum;
\r
516 int num10 = ( this._Form.vScrollBar譜面用垂直スクロールバー.Maximum + 1 ) - this._Form.vScrollBar譜面用垂直スクロールバー.LargeChange;
\r
521 else if( num8 > num10 )
\r
525 this._Form.vScrollBar譜面用垂直スクロールバー.Value = num8;
\r
526 num6 = num8 - num7;
\r
527 this.pt現在のドラッグ開始位置dot.Y -= C小節.n位置変換grid2dot( num6 );
\r
530 private void t確定選択中のチップを移動する()
\r
532 Point point = new Point();
\r
533 point.X = this.mgr譜面管理者ref.nX座標dotが位置するレーン番号を返す( this.pt現在のドラッグ終了位置dot.X );
\r
534 point.Y = this.mgr譜面管理者ref.nY座標dotが位置するgridを返す・ガイド幅単位( this.pt現在のドラッグ終了位置dot.Y );
\r
535 Point point2 = new Point();
\r
536 point2.X = point.X - this.pt前回の位置LaneGrid.X;
\r
537 point2.Y = point.Y - this.pt前回の位置LaneGrid.Y;
\r
538 if( ( point2.X != 0 ) || ( point2.Y != 0 ) )
\r
540 foreach( KeyValuePair<int, C小節> pair in this.mgr譜面管理者ref.dic小節 )
\r
542 pair.Value.t小節内の全チップの移動済フラグをリセットする();
\r
544 for( int i = 0; i < this.mgr譜面管理者ref.dic小節.Count; i++ )
\r
546 C小節 c小節 = this.mgr譜面管理者ref.dic小節[ i ];
\r
547 for( int j = 0; j < c小節.listチップ.Count; j++ )
\r
549 Cチップ cc = c小節.listチップ[ j ];
\r
550 if( cc.b確定選択中 && !cc.b移動済 )
\r
552 if( point2.X != 0 )
\r
554 this.tチップを横に移動する( cc, point2.X );
\r
556 if( point2.Y != 0 )
\r
558 this.tチップを縦に移動する( cc, point2.Y, c小節 );
\r
565 this.pt前回の位置LaneGrid.X = point.X;
\r
566 this.pt前回の位置LaneGrid.Y = point.Y;
\r
569 private void t検索する・メイン()
\r
571 C検索ダイアログ c検索ダイアログ = new C検索ダイアログ();
\r
572 if( !c検索ダイアログ.bレーンリストの内訳が生成済みである )
\r
574 int count = this._Form.mgr譜面管理者.listレーン.Count;
\r
575 string[] strArray = new string[ count ];
\r
576 for( int i = 0; i < count; i++ )
\r
578 strArray[ i ] = this._Form.mgr譜面管理者.listレーン[ i ].strレーン名;
\r
580 c検索ダイアログ.tレーンリストの内訳を生成する( strArray );
\r
582 if( c検索ダイアログ.ShowDialog() == DialogResult.OK )
\r
584 int num3 = c検索ダイアログ.bチップ範囲指定CheckBoxがチェックされている ? c検索ダイアログ.nチップ範囲開始番号 : 0;
\r
585 int num4 = c検索ダイアログ.bチップ範囲指定CheckBoxがチェックされている ? c検索ダイアログ.nチップ範囲終了番号 : 36 * 36 - 1;
\r
586 if( ( c検索ダイアログ.bチップ範囲指定CheckBoxがチェックされている && ( num3 < 0 ) ) && ( num4 < 0 ) )
\r
589 num4 = 36 * 36 - 1;
\r
591 int num5 = c検索ダイアログ.b小節範囲指定CheckBoxがチェックされている ? c検索ダイアログ.n小節範囲開始番号 : 0;
\r
592 int num6 = c検索ダイアログ.b小節範囲指定CheckBoxがチェックされている ? c検索ダイアログ.n小節範囲終了番号 : this._Form.mgr譜面管理者.n現在の最大の小節番号を返す();
\r
593 if( ( c検索ダイアログ.b小節範囲指定CheckBoxがチェックされている && ( num5 < 0 ) ) && ( num6 < 0 ) )
\r
596 num6 = this._Form.mgr譜面管理者.n現在の最大の小節番号を返す();
\r
598 if( ( ( num5 >= 0 ) && ( num6 >= 0 ) ) && ( ( num3 >= 0 ) && ( num4 >= 0 ) ) )
\r
600 this._Form.mgrUndoRedo管理者.tトランザクション記録を開始する();
\r
602 for( int j = num5; j <= num6; j++ )
\r
604 C小節 c小節 = this._Form.mgr譜面管理者.p小節を返す( j );
\r
607 for( int k = 0; k < c小節.listチップ.Count; k++ )
\r
609 Cチップ cチップ = c小節.listチップ[ k ];
\r
610 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
612 Cチップ位置用UndoRedo redo = new Cチップ位置用UndoRedo( c小節.n小節番号0to3599, cチップ.nレーン番号0to, cチップ.n位置grid, cチップ.n値・整数1to1295 );
\r
613 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
614 cチップ.b確定選択中 = true;
\r
620 this._Form.mgrUndoRedo管理者.tトランザクション記録を終了する();
\r
621 this._Form.tUndoRedo用GUIの有効・無効を設定する();
\r
622 this._Form.pictureBox譜面パネル.Refresh();
\r
625 this._Form.t選択チップの有無に応じて編集用GUIの有効・無効を設定する();
\r
626 MessageBox.Show( num7 + Resources.str個のチップが選択されましたMSG, Resources.str検索結果ダイアログのタイトル, MessageBoxButtons.OK, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1 );
\r
630 MessageBox.Show( Resources.str該当するチップはありませんでしたMSG, Resources.str検索結果ダイアログのタイトル, MessageBoxButtons.OK, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1 );
\r
635 private void t現在の選択範囲を描画する( Graphics g )
\r
637 Rectangle rect = new Rectangle();
\r
638 rect.X = Math.Min( this.pt現在のドラッグ開始位置dot.X, this.pt現在のドラッグ終了位置dot.X );
\r
639 rect.Y = Math.Min( this.pt現在のドラッグ開始位置dot.Y, this.pt現在のドラッグ終了位置dot.Y );
\r
640 rect.Width = Math.Abs( (int) ( this.pt現在のドラッグ開始位置dot.X - this.pt現在のドラッグ終了位置dot.X ) );
\r
641 rect.Height = Math.Abs( (int) ( this.pt現在のドラッグ開始位置dot.Y - this.pt現在のドラッグ終了位置dot.Y ) );
\r
642 if( rect.Width < 0 )
\r
644 rect.X = this.pt現在のドラッグ開始位置dot.X;
\r
645 rect.Width = this.pt現在のドラッグ開始位置dot.X - rect.X;
\r
647 if( rect.Height < 0 )
\r
649 rect.Y = this.pt現在のドラッグ開始位置dot.Y;
\r
650 rect.Height = this.pt現在のドラッグ開始位置dot.Y - rect.Y;
\r
652 if( ( rect.Width != 0 ) && ( rect.Height != 0 ) )
\r
654 g.FillRectangle( this.br選択領域ブラシ, rect );
\r
655 g.DrawRectangle( Pens.LightBlue, rect );
\r
658 private void t選択チップを単純置換する( int n元番号, int n先番号 )
\r
660 if( ( n元番号 < 0 ) || ( n先番号 < 0 ) )
\r
662 MessageBox.Show( Resources.strチップ番号に誤りがありますMSG, Resources.str置換結果ダイアログのタイトル, MessageBoxButtons.OK, MessageBoxIcon.Hand, MessageBoxDefaultButton.Button1 );
\r
667 this._Form.mgrUndoRedo管理者.tトランザクション記録を開始する();
\r
668 foreach( KeyValuePair<int, C小節> pair in this._Form.mgr譜面管理者.dic小節 )
\r
670 C小節 c小節 = pair.Value;
\r
671 for( int i = 0; i < c小節.listチップ.Count; i++ )
\r
673 Cチップ cチップ = c小節.listチップ[ i ];
\r
674 if( cチップ.b確定選択中 && ( cチップ.n値・整数1to1295 == n元番号 ) )
\r
676 Cチップ位置用UndoRedo redo = new Cチップ位置用UndoRedo( c小節.n小節番号0to3599, cチップ.nレーン番号0to, cチップ.n位置grid, cチップ.n値・整数1to1295 );
\r
677 Cチップ位置用UndoRedo redo2 = new Cチップ位置用UndoRedo( c小節.n小節番号0to3599, cチップ.nレーン番号0to, cチップ.n位置grid, n先番号 );
\r
678 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
679 cチップ.n値・整数1to1295 = n先番号;
\r
684 this._Form.mgrUndoRedo管理者.tトランザクション記録を終了する();
\r
685 this._Form.tUndoRedo用GUIの有効・無効を設定する();
\r
688 this._Form.b未保存 = true;
\r
689 this._Form.pictureBox譜面パネル.Refresh();
\r
690 MessageBox.Show( num + Resources.str個のチップを置換しましたMSG, Resources.str置換結果ダイアログのタイトル, MessageBoxButtons.OK, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1 );
\r
694 MessageBox.Show( Resources.str該当するチップはありませんでしたMSG, Resources.str置換結果ダイアログのタイトル, MessageBoxButtons.OK, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1 );
\r
698 private void t選択チップを表裏反転置換する()
\r
701 this._Form.mgrUndoRedo管理者.tトランザクション記録を開始する();
\r
702 foreach( KeyValuePair<int, C小節> pair in this._Form.mgr譜面管理者.dic小節 )
\r
704 C小節 c小節 = pair.Value;
\r
705 for( int i = 0; i < c小節.listチップ.Count; i++ )
\r
707 Cチップ cチップ = c小節.listチップ[ i ];
\r
710 Cチップ位置用UndoRedo redo = new Cチップ位置用UndoRedo( c小節.n小節番号0to3599, cチップ.nレーン番号0to, cチップ.n位置grid, cチップ.n値・整数1to1295 );
\r
711 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
714 cチップ.nチャンネル番号00toFF = this._Form.mgr譜面管理者.listレーン[ cチップ.nレーン番号0to ].nチャンネル番号・表00toFF;
\r
719 cチップ.nチャンネル番号00toFF = this._Form.mgr譜面管理者.listレーン[ cチップ.nレーン番号0to ].nチャンネル番号・裏00toFF;
\r
726 this._Form.mgrUndoRedo管理者.tトランザクション記録を終了する();
\r
727 this._Form.tUndoRedo用GUIの有効・無効を設定する();
\r
730 this._Form.b未保存 = true;
\r
731 this._Form.pictureBox譜面パネル.Refresh();
\r
732 MessageBox.Show( num + Resources.str個のチップを置換しましたMSG, Resources.str置換結果ダイアログのタイトル, MessageBoxButtons.OK, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1 );
\r
735 private void t置換する・メイン()
\r
737 C置換ダイアログ c置換ダイアログ = new C置換ダイアログ();
\r
739 if( !this._Form.mgr譜面管理者.b確定選択中のチップがある() )
\r
746 foreach( KeyValuePair<int, C小節> pair in this._Form.mgr譜面管理者.dic小節 )
\r
748 foreach( Cチップ cチップ in pair.Value.listチップ )
\r
754 num = cチップ.n値・整数1to1295;
\r
756 else if( num != cチップ.n値・整数1to1295 )
\r
770 c置換ダイアログ.n元番号 = num;
\r
772 if( c置換ダイアログ.ShowDialog() == DialogResult.OK )
\r
774 if( c置換ダイアログ.b表裏反転RadioButtonがチェックされている )
\r
776 this.t選択チップを表裏反転置換する();
\r
778 else if( c置換ダイアログ.b単純置換RadioButtonがチェックされている )
\r
780 this.t選択チップを単純置換する( c置換ダイアログ.n元番号, c置換ダイアログ.n先番号 );
\r
785 this.t全チップの選択を解除する();
\r
788 private void t範囲選択開始処理( MouseEventArgs e )
\r
790 this.b範囲選択のためにドラッグ中 = true;
\r
791 this.pt現在のドラッグ開始位置dot.X = this.pt現在のドラッグ終了位置dot.X = e.X;
\r
792 this.pt現在のドラッグ開始位置dot.Y = this.pt現在のドラッグ終了位置dot.Y = e.Y;
\r
793 if( ( Control.ModifierKeys & Keys.Control ) != Keys.Control )
\r
795 this.t全チップの選択を解除する();
\r
797 this.tドラッグ範囲中のチップを選択する();
\r
799 private void t範囲選択継続処理( MouseEventArgs e )
\r
801 this.pt現在のドラッグ終了位置dot.X = e.X;
\r
802 this.pt現在のドラッグ終了位置dot.Y = e.Y;
\r
803 this.t画面上下にマウスカーソルがあるなら譜面を縦スクロールする( e );
\r
804 this.tドラッグ範囲中のチップを選択する();
\r
806 private void t範囲選択終了処理( MouseEventArgs e )
\r
808 this.b範囲選択のためにドラッグ中 = false;
\r
809 this._Form.mgrUndoRedo管理者.tトランザクション記録を開始する();
\r
810 foreach( KeyValuePair<int, C小節> pair in this.mgr譜面管理者ref.dic小節 )
\r
812 C小節 c小節 = pair.Value;
\r
813 for( int i = 0; i < c小節.listチップ.Count; i++ )
\r
815 Cチップ cチップ = c小節.listチップ[ i ];
\r
816 if( cチップ.bドラッグで選択中 && !cチップ.b確定選択中 )
\r
818 Cチップ位置用UndoRedo redo = new Cチップ位置用UndoRedo( c小節.n小節番号0to3599, cチップ.nレーン番号0to, cチップ.n位置grid, cチップ.n値・整数1to1295 );
\r
819 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
823 this._Form.mgrUndoRedo管理者.tトランザクション記録を終了する();
\r
824 this._Form.tUndoRedo用GUIの有効・無効を設定する();
\r
825 foreach( KeyValuePair<int, C小節> pair2 in this.mgr譜面管理者ref.dic小節 )
\r
827 C小節 c小節2 = pair2.Value;
\r
828 for( int j = 0; j < c小節2.listチップ.Count; j++ )
\r
830 Cチップ cチップ2 = c小節2.listチップ[ j ];
\r
831 if( cチップ2.bドラッグで選択中 )
\r
833 cチップ2.bドラッグで選択中 = false;
\r
834 cチップ2.b確定選択中 = true;
\r
838 this._Form.t選択チップの有無に応じて編集用GUIの有効・無効を設定する();
\r
840 //-----------------
\r