OSDN Git Service

19aaacb06d7c05529beaf089c1e78788e47d1962
[dtxmania/dtxmania.git] / DTXCreatorプロジェクト / コード / 05.譜面 / C選択モード管理.cs
1 using System;\r
2 using System.Collections.Generic;\r
3 using System.Diagnostics;\r
4 using System.Text;\r
5 using System.Windows.Forms;\r
6 using System.Drawing;\r
7 using DTXCreator.UndoRedo;\r
8 using DTXCreator.Properties;\r
9 \r
10 namespace DTXCreator.譜面\r
11 {\r
12         public class C選択モード管理\r
13         {\r
14                 public C選択モード管理( Cメインフォーム formメインフォーム )\r
15                 {\r
16                         this._Form = formメインフォーム;\r
17                         this.mgr譜面管理者ref = formメインフォーム.mgr譜面管理者;\r
18                 }\r
19                 public void t検索する()\r
20                 {\r
21                         this._Form.dlgチップパレット.t一時的に隠蔽する();\r
22                         this.t検索する・メイン();\r
23                         this._Form.dlgチップパレット.t一時的な隠蔽を解除する();\r
24                 }\r
25                 public void t個別選択解除( Cチップ cc )\r
26                 {\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
30                         cc.b確定選択中 = false;\r
31                 }\r
32                 public void t全チップの選択を解除する()\r
33                 {\r
34                         this._Form.mgrUndoRedo管理者.tトランザクション記録を開始する();\r
35                         foreach( KeyValuePair<int, C小節> pair in this.mgr譜面管理者ref.dic小節 )\r
36                         {\r
37                                 C小節 c小節 = pair.Value;\r
38                                 for( int j = 0; j < c小節.listチップ.Count; j++ )\r
39                                 {\r
40                                         Cチップ cチップ = c小節.listチップ[ j ];\r
41                                         if( cチップ.n枠外レーン数 != 0 )\r
42                                         {\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
48                                                 j = -1;\r
49                                         }\r
50                                 }\r
51                         }\r
52                         for( int i = 0; i < this.mgr譜面管理者ref.dic小節.Count; i++ )\r
53                         {\r
54                                 C小節 c小節2 = this.mgr譜面管理者ref.dic小節[ i ];\r
55                                 for( int k = 0; k < c小節2.listチップ.Count; k++ )\r
56                                 {\r
57                                         Cチップ cチップ3 = c小節2.listチップ[ k ];\r
58                                         if( cチップ3.b確定選択中 || cチップ3.bドラッグで選択中 )\r
59                                         {\r
60                                                 this.mgr譜面管理者ref.bOPENチップである( cチップ3 );\r
61                                                 for( int m = 0; m < c小節2.listチップ.Count; m++ )\r
62                                                 {\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
65                                                         {\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
71                                                                 k = -1;\r
72                                                                 break;\r
73                                                         }\r
74                                                 }\r
75                                         }\r
76                                 }\r
77                         }\r
78                         foreach( KeyValuePair<int, C小節> pair2 in this.mgr譜面管理者ref.dic小節 )\r
79                         {\r
80                                 C小節 c小節3 = pair2.Value;\r
81                                 for( int n = 0; n < c小節3.listチップ.Count; n++ )\r
82                                 {\r
83                                         Cチップ cチップ6 = c小節3.listチップ[ n ];\r
84                                         if( cチップ6.b確定選択中 )\r
85                                         {\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
88                                                 cチップ6.b移動済 = false;\r
89                                                 cチップ6.bドラッグで選択中 = false;\r
90                                                 cチップ6.b確定選択中 = false;\r
91                                         }\r
92                                 }\r
93                         }\r
94                         this._Form.mgrUndoRedo管理者.tトランザクション記録を終了する();\r
95                         this._Form.tUndoRedo用GUIの有効・無効を設定する();\r
96                 }\r
97                 public void t全チップを選択する()\r
98                 {\r
99                         this._Form.mgrUndoRedo管理者.tトランザクション記録を開始する();\r
100                         foreach( KeyValuePair<int, C小節> pair in this.mgr譜面管理者ref.dic小節 )\r
101                         {\r
102                                 C小節 c小節 = pair.Value;\r
103                                 for( int i = 0; i < c小節.listチップ.Count; i++ )\r
104                                 {\r
105                                         Cチップ cチップ = c小節.listチップ[ i ];\r
106                                         if( !cチップ.b確定選択中 )\r
107                                         {\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
112                                         }\r
113                                 }\r
114                         }\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
119                 }\r
120                 public void tレーン上の全チップを選択する( int lane )                     // #32134 2013.9.29 suggested by beatme\r
121                 {\r
122                         // Debug.WriteLine( "laneno=" + lane + " " + this.mgr譜面管理者ref.listレーン[ lane ].strレーン名 );\r
123 \r
124                         this._Form.mgrUndoRedo管理者.tトランザクション記録を開始する();\r
125                         foreach ( KeyValuePair<int, C小節> pair in this.mgr譜面管理者ref.dic小節 )\r
126                         {\r
127                                 C小節 c小節 = pair.Value;\r
128                                 for ( int i = 0; i < c小節.listチップ.Count; i++ )\r
129                                 {\r
130                                         Cチップ cチップ = c小節.listチップ[ i ];\r
131                                         if ( cチップ.nレーン番号0to == lane && !cチップ.b確定選択中 )\r
132                                         {\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
137                                         }\r
138                                 }\r
139                         }\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
144                 }\r
145                 public void t小節上の全チップを選択する( int n小節番号 )                       // #32134 2013.9.29 suggested by beatme\r
146                 {\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
150                         {\r
151                                 Cチップ cチップ = c小節.listチップ[ i ];\r
152                                 if ( !cチップ.b確定選択中 )\r
153                                 {\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
158                                 }\r
159                         }\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
164                 }\r
165                 public void t置換する()\r
166                 {\r
167                         this._Form.dlgチップパレット.t一時的に隠蔽する();\r
168                         this.t置換する・メイン();\r
169                         this._Form.dlgチップパレット.t一時的な隠蔽を解除する();\r
170                 }\r
171                 internal void MouseClick( MouseEventArgs e )\r
172                 {\r
173                         if( e.Button == MouseButtons.Right )\r
174                         {\r
175                                 this._Form.t選択モードのコンテクストメニューを表示する( e.X, e.Y );\r
176                         }\r
177                 }\r
178                 internal void MouseDown( MouseEventArgs e )\r
179                 {\r
180                         if( e.Button == MouseButtons.Left )\r
181                         {\r
182                                 Cチップ cc = this.mgr譜面管理者ref.p指定された座標dotにあるチップを返す( e.X, e.Y );\r
183                                 if( ( cc == null ) || !cc.b確定選択中 )\r
184                                 {\r
185                                         this.t範囲選択開始処理( e );\r
186                                 }\r
187                                 else if( ( Control.ModifierKeys & Keys.Control ) != Keys.Control )\r
188                                 {\r
189                                         this.t移動開始処理( e );\r
190                                 }\r
191                                 else\r
192                                 {\r
193                                         this.t個別選択解除( cc );\r
194                                 }\r
195                         }\r
196                 }\r
197                 internal void MouseMove( MouseEventArgs e )\r
198                 {\r
199                         if( e.Button == MouseButtons.Left )\r
200                         {\r
201                                 if( this.b範囲選択のためにドラッグ中 )\r
202                                 {\r
203                                         this.t範囲選択継続処理( e );\r
204                                 }\r
205                                 if( this.b移動のためにドラッグ中 )\r
206                                 {\r
207                                         this.t移動継続処理( e );\r
208                                 }\r
209                         }\r
210                         else\r
211                         {\r
212                                 if( this.b範囲選択のためにドラッグ中 )\r
213                                 {\r
214                                         this.t範囲選択終了処理( e );\r
215                                 }\r
216                                 if( this.b移動のためにドラッグ中 )\r
217                                 {\r
218                                         this.t移動終了処理( e );\r
219                                 }\r
220                         }\r
221                         this._Form.pictureBox譜面パネル.Refresh();\r
222                 }\r
223                 internal void Paint( PaintEventArgs e )\r
224                 {\r
225                         if( this.b範囲選択のためにドラッグ中 )\r
226                         {\r
227                                 this.t現在の選択範囲を描画する( e.Graphics );\r
228                         }\r
229                 }\r
230 \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
241 \r
242                 private void tチップを横に移動する( Cチップ cc, int n移動量lane )\r
243                 {\r
244                         int num2;\r
245                         int count = this.mgr譜面管理者ref.listレーン.Count;\r
246                         if( cc.n枠外レーン数 < 0 )\r
247                         {\r
248                                 num2 = cc.n枠外レーン数 + n移動量lane;\r
249                         }\r
250                         else if( cc.n枠外レーン数 > 0 )\r
251                         {\r
252                                 num2 = ( ( count - 1 ) + cc.n枠外レーン数 ) + n移動量lane;\r
253                         }\r
254                         else\r
255                         {\r
256                                 num2 = cc.nレーン番号0to + n移動量lane;\r
257                         }\r
258                         if( num2 < 0 )\r
259                         {\r
260                                 cc.n枠外レーン数 = num2;\r
261                         }\r
262                         else if( num2 >= count )\r
263                         {\r
264                                 cc.n枠外レーン数 = num2 - ( count - 1 );\r
265                         }\r
266                         else\r
267                         {\r
268                                 cc.nレーン番号0to = num2;\r
269                                 cc.n枠外レーン数 = 0;\r
270                         }\r
271                         cc.b移動済 = true;\r
272                         this._Form.b未保存 = true;\r
273                 }\r
274                 private void tチップを縦に移動する( Cチップ cc, int n移動量grid, C小節 csチップのある小節 )\r
275                 {\r
276                         cc.b移動済 = true;\r
277                         int num = cc.n位置grid + n移動量grid;\r
278                         if( num < 0 )\r
279                         {\r
280                                 int num2 = csチップのある小節.n小節番号0to3599;\r
281                                 C小節 c小節 = null;\r
282                                 while( num < 0 )\r
283                                 {\r
284                                         num2--;\r
285                                         c小節 = this.mgr譜面管理者ref.p小節を返す( num2 );\r
286                                         if( c小節 == null )\r
287                                         {\r
288                                                 return;\r
289                                         }\r
290                                         num += c小節.n小節長倍率を考慮した現在の小節の高さgrid;\r
291                                 }\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
297                         }\r
298                         else if( num >= csチップのある小節.n小節長倍率を考慮した現在の小節の高さgrid )\r
299                         {\r
300                                 int num3 = csチップのある小節.n小節番号0to3599;\r
301                                 C小節 c小節2 = csチップのある小節;\r
302                                 while( num >= c小節2.n小節長倍率を考慮した現在の小節の高さgrid )\r
303                                 {\r
304                                         num -= c小節2.n小節長倍率を考慮した現在の小節の高さgrid;\r
305                                         num3++;\r
306                                         c小節2 = this.mgr譜面管理者ref.p小節を返す( num3 );\r
307                                         if( c小節2 == null )\r
308                                         {\r
309                                                 c小節2 = new C小節( num3 );\r
310                                                 this.mgr譜面管理者ref.dic小節.Add( num3, c小節2 );\r
311                                         }\r
312                                 }\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
318                         }\r
319                         else\r
320                         {\r
321                                 cc.n位置grid = num;\r
322                         }\r
323                         this._Form.b未保存 = true;\r
324                 }\r
325                 private void tチップ移動のRedo( Cチップ位置用UndoRedo ur変更前, Cチップ位置用UndoRedo ur変更後 )\r
326                 {\r
327                         C小節 c小節 = this.mgr譜面管理者ref.p小節を返す( ur変更前.n小節番号0to );\r
328                         if( c小節 != null )\r
329                         {\r
330                                 for( int i = 0; i < c小節.listチップ.Count; i++ )\r
331                                 {\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
334                                         {\r
335                                                 C小節 c小節2 = this.mgr譜面管理者ref.p小節を返す( ur変更後.n小節番号0to );\r
336                                                 if( c小節2 != null )\r
337                                                 {\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
342                                                         break;\r
343                                                 }\r
344                                         }\r
345                                 }\r
346                                 this._Form.pictureBox譜面パネル.Refresh();\r
347                         }\r
348                 }\r
349                 private void tチップ移動のUndo( Cチップ位置用UndoRedo ur変更前, Cチップ位置用UndoRedo ur変更後 )\r
350                 {\r
351                         C小節 c小節 = this.mgr譜面管理者ref.p小節を返す( ur変更後.n小節番号0to );\r
352                         if( c小節 != null )\r
353                         {\r
354                                 for( int i = 0; i < c小節.listチップ.Count; i++ )\r
355                                 {\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
358                                         {\r
359                                                 C小節 c小節2 = this.mgr譜面管理者ref.p小節を返す( ur変更前.n小節番号0to );\r
360                                                 if( c小節2 != null )\r
361                                                 {\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
366                                                         break;\r
367                                                 }\r
368                                         }\r
369                                 }\r
370                                 this._Form.pictureBox譜面パネル.Refresh();\r
371                         }\r
372                 }\r
373                 private void tドラッグ範囲中のチップを選択する()\r
374                 {\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
385                         int num = 0;\r
386                         for( int i = 0; i < this.mgr譜面管理者ref.dic小節.Count; i++ )\r
387                         {\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
391                                 {\r
392                                         int num5;\r
393                                         Cチップ cc = c小節.listチップ[ j ];\r
394                                         if( this.mgr譜面管理者ref.bOPENチップである( cc ) )\r
395                                         {\r
396                                                 if( ( ( cc.nレーン番号0to + 2 ) >= rectangle2.X ) && ( rectangle2.Right >= cc.nレーン番号0to ) )\r
397                                                 {\r
398                                                         goto Label_01B0;\r
399                                                 }\r
400                                                 cc.bドラッグで選択中 = false;\r
401                                                 continue;\r
402                                         }\r
403                                         if( ( cc.nレーン番号0to < rectangle2.X ) || ( rectangle2.Right < cc.nレーン番号0to ) )\r
404                                         {\r
405                                                 cc.bドラッグで選択中 = false;\r
406                                                 continue;\r
407                                         }\r
408                                 Label_01B0:\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
412                                         {\r
413                                                 cc.bドラッグで選択中 = false;\r
414                                         }\r
415                                         else\r
416                                         {\r
417                                                 cc.bドラッグで選択中 = true;\r
418                                         }\r
419                                 }\r
420                                 num += num3;\r
421                         }\r
422                 }\r
423                 private void t移動開始処理( MouseEventArgs e )\r
424                 {\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
431                         {\r
432                                 C小節 c小節 = pair.Value;\r
433                                 for( int i = 0; i < c小節.listチップ.Count; i++ )\r
434                                 {\r
435                                         Cチップ cチップ = c小節.listチップ[ i ];\r
436                                         if( cチップ.b確定選択中 )\r
437                                         {\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
441                                         }\r
442                                 }\r
443                         }\r
444                 }\r
445                 private void t移動継続処理( MouseEventArgs e )\r
446                 {\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
451                 }\r
452                 private void t移動終了処理( MouseEventArgs e )\r
453                 {\r
454                         this.b移動のためにドラッグ中 = false;\r
455                         foreach( KeyValuePair<int, C小節> pair in this.mgr譜面管理者ref.dic小節 )\r
456                         {\r
457                                 for( int i = 0; i < pair.Value.listチップ.Count; i++ )\r
458                                 {\r
459                                         Cチップ cチップ = pair.Value.listチップ[ i ];\r
460                                         if( cチップ.b確定選択中 && ( cチップ.n枠外レーン数 == 0 ) )\r
461                                         {\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
465                                                 {\r
466                                                         cチップ.n値・整数1to1295 = 1;\r
467                                                 }\r
468                                         }\r
469                                 }\r
470                         }\r
471                         this._Form.mgrUndoRedo管理者.tトランザクション記録を開始する();\r
472                         foreach( KeyValuePair<int, C小節> pair2 in this.mgr譜面管理者ref.dic小節 )\r
473                         {\r
474                                 C小節 c小節 = pair2.Value;\r
475                                 for( int j = 0; j < pair2.Value.listチップ.Count; j++ )\r
476                                 {\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
479                                         {\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
483                                         }\r
484                                 }\r
485                         }\r
486                         this._Form.tUndoRedo用GUIの有効・無効を設定する();\r
487                         this._Form.mgrUndoRedo管理者.tトランザクション記録を終了する();\r
488                 }\r
489                 private void t画面上下にマウスカーソルがあるなら譜面を縦スクロールする( MouseEventArgs e )\r
490                 {\r
491                         if( e.Y < 70 )\r
492                         {\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
499                                 {\r
500                                         num3 = minimum;\r
501                                 }\r
502                                 else if( num3 > num5 )\r
503                                 {\r
504                                         num3 = num5;\r
505                                 }\r
506                                 this._Form.vScrollBar譜面用垂直スクロールバー.Value = num3;\r
507                                 nGrid = num3 - num2;\r
508                                 this.pt現在のドラッグ開始位置dot.Y -= C小節.n位置変換grid2dot( nGrid );\r
509                         }\r
510                         else if( e.Y > ( this._Form.pictureBox譜面パネル.Height - 50 ) )\r
511                         {\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
517                                 if( num8 < num9 )\r
518                                 {\r
519                                         num8 = num9;\r
520                                 }\r
521                                 else if( num8 > num10 )\r
522                                 {\r
523                                         num8 = num10;\r
524                                 }\r
525                                 this._Form.vScrollBar譜面用垂直スクロールバー.Value = num8;\r
526                                 num6 = num8 - num7;\r
527                                 this.pt現在のドラッグ開始位置dot.Y -= C小節.n位置変換grid2dot( num6 );\r
528                         }\r
529                 }\r
530                 private void t確定選択中のチップを移動する()\r
531                 {\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
539                         {\r
540                                 foreach( KeyValuePair<int, C小節> pair in this.mgr譜面管理者ref.dic小節 )\r
541                                 {\r
542                                         pair.Value.t小節内の全チップの移動済フラグをリセットする();\r
543                                 }\r
544                                 for( int i = 0; i < this.mgr譜面管理者ref.dic小節.Count; i++ )\r
545                                 {\r
546                                         C小節 c小節 = this.mgr譜面管理者ref.dic小節[ i ];\r
547                                         for( int j = 0; j < c小節.listチップ.Count; j++ )\r
548                                         {\r
549                                                 Cチップ cc = c小節.listチップ[ j ];\r
550                                                 if( cc.b確定選択中 && !cc.b移動済 )\r
551                                                 {\r
552                                                         if( point2.X != 0 )\r
553                                                         {\r
554                                                                 this.tチップを横に移動する( cc, point2.X );\r
555                                                         }\r
556                                                         if( point2.Y != 0 )\r
557                                                         {\r
558                                                                 this.tチップを縦に移動する( cc, point2.Y, c小節 );\r
559                                                                 i = -1;\r
560                                                                 break;\r
561                                                         }\r
562                                                 }\r
563                                         }\r
564                                 }\r
565                                 this.pt前回の位置LaneGrid.X = point.X;\r
566                                 this.pt前回の位置LaneGrid.Y = point.Y;\r
567                         }\r
568                 }\r
569                 private void t検索する・メイン()\r
570                 {\r
571                         C検索ダイアログ c検索ダイアログ = new C検索ダイアログ();\r
572                         if( !c検索ダイアログ.bレーンリストの内訳が生成済みである )\r
573                         {\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
577                                 {\r
578                                         strArray[ i ] = this._Form.mgr譜面管理者.listレーン[ i ].strレーン名;\r
579                                 }\r
580                                 c検索ダイアログ.tレーンリストの内訳を生成する( strArray );\r
581                         }\r
582                         if( c検索ダイアログ.ShowDialog() == DialogResult.OK )\r
583                         {\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
587                                 {\r
588                                         num3 = 0;\r
589                                         num4 = 36 * 36 - 1;\r
590                                 }\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
594                                 {\r
595                                         num5 = 0;\r
596                                         num6 = this._Form.mgr譜面管理者.n現在の最大の小節番号を返す();\r
597                                 }\r
598                                 if( ( ( num5 >= 0 ) && ( num6 >= 0 ) ) && ( ( num3 >= 0 ) && ( num4 >= 0 ) ) )\r
599                                 {\r
600                                         this._Form.mgrUndoRedo管理者.tトランザクション記録を開始する();\r
601                                         int num7 = 0;\r
602                                         for( int j = num5; j <= num6; j++ )\r
603                                         {\r
604                                                 C小節 c小節 = this._Form.mgr譜面管理者.p小節を返す( j );\r
605                                                 if( c小節 != null )\r
606                                                 {\r
607                                                         for( int k = 0; k < c小節.listチップ.Count; k++ )\r
608                                                         {\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
611                                                                 {\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
615                                                                         num7++;\r
616                                                                 }\r
617                                                         }\r
618                                                 }\r
619                                         }\r
620                                         this._Form.mgrUndoRedo管理者.tトランザクション記録を終了する();\r
621                                         this._Form.tUndoRedo用GUIの有効・無効を設定する();\r
622                                         this._Form.pictureBox譜面パネル.Refresh();\r
623                                         if( num7 > 0 )\r
624                                         {\r
625                                                 this._Form.t選択チップの有無に応じて編集用GUIの有効・無効を設定する();\r
626                                                 MessageBox.Show( num7 + Resources.str個のチップが選択されましたMSG, Resources.str検索結果ダイアログのタイトル, MessageBoxButtons.OK, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1 );\r
627                                         }\r
628                                         else\r
629                                         {\r
630                                                 MessageBox.Show( Resources.str該当するチップはありませんでしたMSG, Resources.str検索結果ダイアログのタイトル, MessageBoxButtons.OK, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1 );\r
631                                         }\r
632                                 }\r
633                         }\r
634                 }\r
635                 private void t現在の選択範囲を描画する( Graphics g )\r
636                 {\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
643                         {\r
644                                 rect.X = this.pt現在のドラッグ開始位置dot.X;\r
645                                 rect.Width = this.pt現在のドラッグ開始位置dot.X - rect.X;\r
646                         }\r
647                         if( rect.Height < 0 )\r
648                         {\r
649                                 rect.Y = this.pt現在のドラッグ開始位置dot.Y;\r
650                                 rect.Height = this.pt現在のドラッグ開始位置dot.Y - rect.Y;\r
651                         }\r
652                         if( ( rect.Width != 0 ) && ( rect.Height != 0 ) )\r
653                         {\r
654                                 g.FillRectangle( this.br選択領域ブラシ, rect );\r
655                                 g.DrawRectangle( Pens.LightBlue, rect );\r
656                         }\r
657                 }\r
658                 private void t選択チップを単純置換する( int n元番号, int n先番号 )\r
659                 {\r
660                         if( ( n元番号 < 0 ) || ( n先番号 < 0 ) )\r
661                         {\r
662                                 MessageBox.Show( Resources.strチップ番号に誤りがありますMSG, Resources.str置換結果ダイアログのタイトル, MessageBoxButtons.OK, MessageBoxIcon.Hand, MessageBoxDefaultButton.Button1 );\r
663                         }\r
664                         else\r
665                         {\r
666                                 int num = 0;\r
667                                 this._Form.mgrUndoRedo管理者.tトランザクション記録を開始する();\r
668                                 foreach( KeyValuePair<int, C小節> pair in this._Form.mgr譜面管理者.dic小節 )\r
669                                 {\r
670                                         C小節 c小節 = pair.Value;\r
671                                         for( int i = 0; i < c小節.listチップ.Count; i++ )\r
672                                         {\r
673                                                 Cチップ cチップ = c小節.listチップ[ i ];\r
674                                                 if( cチップ.b確定選択中 && ( cチップ.n値・整数1to1295 == n元番号 ) )\r
675                                                 {\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
680                                                         num++;\r
681                                                 }\r
682                                         }\r
683                                 }\r
684                                 this._Form.mgrUndoRedo管理者.tトランザクション記録を終了する();\r
685                                 this._Form.tUndoRedo用GUIの有効・無効を設定する();\r
686                                 if( num > 0 )\r
687                                 {\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
691                                 }\r
692                                 else\r
693                                 {\r
694                                         MessageBox.Show( Resources.str該当するチップはありませんでしたMSG, Resources.str置換結果ダイアログのタイトル, MessageBoxButtons.OK, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1 );\r
695                                 }\r
696                         }\r
697                 }\r
698                 private void t選択チップを表裏反転置換する()\r
699                 {\r
700                         int num = 0;\r
701                         this._Form.mgrUndoRedo管理者.tトランザクション記録を開始する();\r
702                         foreach( KeyValuePair<int, C小節> pair in this._Form.mgr譜面管理者.dic小節 )\r
703                         {\r
704                                 C小節 c小節 = pair.Value;\r
705                                 for( int i = 0; i < c小節.listチップ.Count; i++ )\r
706                                 {\r
707                                         Cチップ cチップ = c小節.listチップ[ i ];\r
708                                         if( cチップ.b確定選択中 )\r
709                                         {\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
712                                                 if( cチップ.b裏 )\r
713                                                 {\r
714                                                         cチップ.nチャンネル番号00toFF = this._Form.mgr譜面管理者.listレーン[ cチップ.nレーン番号0to ].nチャンネル番号・表00toFF;\r
715                                                         cチップ.b裏 = false;\r
716                                                 }\r
717                                                 else\r
718                                                 {\r
719                                                         cチップ.nチャンネル番号00toFF = this._Form.mgr譜面管理者.listレーン[ cチップ.nレーン番号0to ].nチャンネル番号・裏00toFF;\r
720                                                         cチップ.b裏 = true;\r
721                                                 }\r
722                                                 num++;\r
723                                         }\r
724                                 }\r
725                         }\r
726                         this._Form.mgrUndoRedo管理者.tトランザクション記録を終了する();\r
727                         this._Form.tUndoRedo用GUIの有効・無効を設定する();\r
728                         if( num > 0 )\r
729                         {\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
733                         }\r
734                 }\r
735                 private void t置換する・メイン()\r
736                 {\r
737                         C置換ダイアログ c置換ダイアログ = new C置換ダイアログ();\r
738                         bool flag = false;\r
739                         if( !this._Form.mgr譜面管理者.b確定選択中のチップがある() )\r
740                         {\r
741                                 this.t全チップを選択する();\r
742                                 flag = true;\r
743                         }\r
744                         int num = -1;\r
745                         bool flag2 = true;\r
746                         foreach( KeyValuePair<int, C小節> pair in this._Form.mgr譜面管理者.dic小節 )\r
747                         {\r
748                                 foreach( Cチップ cチップ in pair.Value.listチップ )\r
749                                 {\r
750                                         if( cチップ.b確定選択中 )\r
751                                         {\r
752                                                 if( num < 0 )\r
753                                                 {\r
754                                                         num = cチップ.n値・整数1to1295;\r
755                                                 }\r
756                                                 else if( num != cチップ.n値・整数1to1295 )\r
757                                                 {\r
758                                                         flag2 = false;\r
759                                                         break;\r
760                                                 }\r
761                                         }\r
762                                 }\r
763                                 if( !flag2 )\r
764                                 {\r
765                                         break;\r
766                                 }\r
767                         }\r
768                         if( flag2 )\r
769                         {\r
770                                 c置換ダイアログ.n元番号 = num;\r
771                         }\r
772                         if( c置換ダイアログ.ShowDialog() == DialogResult.OK )\r
773                         {\r
774                                 if( c置換ダイアログ.b表裏反転RadioButtonがチェックされている )\r
775                                 {\r
776                                         this.t選択チップを表裏反転置換する();\r
777                                 }\r
778                                 else if( c置換ダイアログ.b単純置換RadioButtonがチェックされている )\r
779                                 {\r
780                                         this.t選択チップを単純置換する( c置換ダイアログ.n元番号, c置換ダイアログ.n先番号 );\r
781                                 }\r
782                         }\r
783                         else if( flag )\r
784                         {\r
785                                 this.t全チップの選択を解除する();\r
786                         }\r
787                 }\r
788                 private void t範囲選択開始処理( MouseEventArgs e )\r
789                 {\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
794                         {\r
795                                 this.t全チップの選択を解除する();\r
796                         }\r
797                         this.tドラッグ範囲中のチップを選択する();\r
798                 }\r
799                 private void t範囲選択継続処理( MouseEventArgs e )\r
800                 {\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
805                 }\r
806                 private void t範囲選択終了処理( MouseEventArgs e )\r
807                 {\r
808                         this.b範囲選択のためにドラッグ中 = false;\r
809                         this._Form.mgrUndoRedo管理者.tトランザクション記録を開始する();\r
810                         foreach( KeyValuePair<int, C小節> pair in this.mgr譜面管理者ref.dic小節 )\r
811                         {\r
812                                 C小節 c小節 = pair.Value;\r
813                                 for( int i = 0; i < c小節.listチップ.Count; i++ )\r
814                                 {\r
815                                         Cチップ cチップ = c小節.listチップ[ i ];\r
816                                         if( cチップ.bドラッグで選択中 && !cチップ.b確定選択中 )\r
817                                         {\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
820                                         }\r
821                                 }\r
822                         }\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
826                         {\r
827                                 C小節 c小節2 = pair2.Value;\r
828                                 for( int j = 0; j < c小節2.listチップ.Count; j++ )\r
829                                 {\r
830                                         Cチップ cチップ2 = c小節2.listチップ[ j ];\r
831                                         if( cチップ2.bドラッグで選択中 )\r
832                                         {\r
833                                                 cチップ2.bドラッグで選択中 = false;\r
834                                                 cチップ2.b確定選択中 = true;\r
835                                         }\r
836                                 }\r
837                         }\r
838                         this._Form.t選択チップの有無に応じて編集用GUIの有効・無効を設定する();\r
839                 }\r
840                 //-----------------\r
841                 #endregion\r
842         }\r
843 }\r