OSDN Git Service

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