+++ /dev/null
-using System;\r
-using System.Collections.Generic;\r
-using System.Text;\r
-using DTXCreator.UndoRedo;\r
-\r
-namespace DTXCreator.譜面\r
-{\r
- internal class Cクリップボード\r
- {\r
- public int nセル数\r
- {\r
- get\r
- {\r
- return this.cbボード.Count;\r
- }\r
- }\r
-\r
- public Cクリップボード( Cメインフォーム form )\r
- {\r
- this._Form = form;\r
- }\r
- public void tクリアする()\r
- {\r
- this.cbボード.Clear();\r
- }\r
- public void tチップを指定位置から貼り付ける( C小節 cs配置開始小節, int n貼り付け先頭grid )\r
- {\r
- if( this.cbボード.Count != 0 )\r
- {\r
- List<Cクリップセル> list = new List<Cクリップセル>();\r
- foreach( Cクリップセル cクリップセル in this.cbボード )\r
- {\r
- Cクリップセル item = new Cクリップセル();\r
- item.pチップ = new Cチップ();\r
- item.pチップ.tコピーfrom( cクリップセル.pチップ );\r
- item.nレーン番号 = cクリップセル.nレーン番号;\r
- item.n位置grid = cクリップセル.n位置grid;\r
- item.b貼り付け済 = false;\r
- list.Add( item );\r
- }\r
- int num = list[ 0 ].n位置grid;\r
- foreach( Cクリップセル cクリップセル3 in list )\r
- {\r
- if( cクリップセル3.n位置grid < num )\r
- {\r
- num = cクリップセル3.n位置grid;\r
- }\r
- }\r
- for( int i = 0; i < list.Count; i++ )\r
- {\r
- Cクリップセル local1 = list[ i ];\r
- local1.n位置grid -= num;\r
- Cクリップセル local2 = list[ i ];\r
- local2.n位置grid += n貼り付け先頭grid;\r
- }\r
- this._Form.mgrUndoRedo管理者.tトランザクション記録を開始する();\r
- C小節 c小節 = cs配置開始小節;\r
- for( int j = 0; j < list.Count; j++ )\r
- {\r
- int num4 = list[ j ].n位置grid;\r
- if( ( num4 >= 0 ) && ( num4 < c小節.n小節長倍率を考慮した現在の小節の高さgrid ) )\r
- {\r
- Cチップ cチップ = new Cチップ();\r
- cチップ.tコピーfrom( list[ j ].pチップ );\r
- cチップ.n位置grid = num4;\r
- cチップ.bドラッグで選択中 = false;\r
- cチップ.b確定選択中 = true;\r
- c小節.listチップ.Add( cチップ );\r
- Cチップ cc = new Cチップ();\r
- cc.tコピーfrom( cチップ );\r
- Cチップ配置用UndoRedo redo = new Cチップ配置用UndoRedo( c小節.n小節番号0to3599, cc );\r
- this._Form.mgrUndoRedo管理者.tノードを追加する( new CUndoRedoセル<Cチップ配置用UndoRedo>( null, new DGUndoを実行する<Cチップ配置用UndoRedo>( this._Form.mgr譜面管理者.tチップ配置のUndo ), new DGRedoを実行する<Cチップ配置用UndoRedo>( this._Form.mgr譜面管理者.tチップ配置のRedo ), redo, redo ) );\r
- c小節 = cs配置開始小節;\r
- }\r
- else\r
- {\r
- Cクリップセル local3 = list[ j ];\r
- local3.n位置grid -= c小節.n小節長倍率を考慮した現在の小節の高さgrid;\r
- int num5 = c小節.n小節番号0to3599 + 1;\r
- c小節 = this._Form.mgr譜面管理者.p小節を返す( num5 );\r
- if( c小節 == null )\r
- {\r
- c小節 = new C小節( num5 );\r
- this._Form.mgr譜面管理者.dic小節.Add( num5, c小節 );\r
- }\r
- j--;\r
- }\r
- }\r
- this._Form.mgrUndoRedo管理者.tトランザクション記録を終了する();\r
- this._Form.tUndoRedo用GUIの有効無効を設定する();\r
- list.Clear();\r
- }\r
- }\r
- public void tチップを追加する( Cチップ cc, int nレーン番号, int n位置grid )\r
- {\r
- Cクリップセル item = new Cクリップセル();\r
- item.pチップ = new Cチップ();\r
- item.pチップ.tコピーfrom( cc );\r
- item.nレーン番号 = nレーン番号;\r
- item.n位置grid = n位置grid;\r
- this.cbボード.Add( item );\r
- }\r
- public void t現在選択されているチップをボードにコピーする()\r
- {\r
- this.tクリアする();\r
- foreach( KeyValuePair<int, C小節> pair in this._Form.mgr譜面管理者.dic小節 )\r
- {\r
- C小節 c小節 = pair.Value;\r
- int num = this._Form.mgr譜面管理者.n譜面先頭からみた小節先頭の位置gridを返す( c小節.n小節番号0to3599 );\r
- foreach( Cチップ cチップ in c小節.listチップ )\r
- {\r
- if( cチップ.b確定選択中 )\r
- {\r
- this.tチップを追加する( cチップ, cチップ.nレーン番号0to, num + cチップ.n位置grid );\r
- }\r
- }\r
- }\r
- }\r
-\r
- #region [ private ]\r
- //-----------------\r
- private Cメインフォーム _Form;\r
- private List<Cクリップセル> cbボード = new List<Cクリップセル>();\r
- //-----------------\r
- #endregion\r
- }\r
-}\r