OSDN Git Service

DTXCreatorプロジェクトについて、トークンに含まれる全角中点「・」を、半角下線「_」に置換した。
[dtxmania/dtxmania.git] / DTXCreatorプロジェクト / コード / 02.WAV_BMP_AVI / CAVIリスト管理.cs
1 using System;\r
2 using System.Collections.Generic;\r
3 using System.Text;\r
4 using System.Windows.Forms;\r
5 using System.IO;\r
6 using DTXCreator.譜面;\r
7 using DTXCreator.UndoRedo;\r
8 \r
9 namespace DTXCreator.WAV_BMP_AVI\r
10 {\r
11         internal class CAVIリスト管理\r
12         {\r
13                 public int n現在選択中のItem番号0to1294 = -1;\r
14 \r
15                 public CAVIリスト管理( Cメインフォーム pメインフォーム, ListView pListViewAVIリスト )\r
16                 {\r
17                         this._Form = pメインフォーム;\r
18                         this.listViewAVIリスト = pListViewAVIリスト;\r
19                 }\r
20                 public void tAVIリストにフォーカスを当てる()\r
21                 {\r
22                         this.listViewAVIリスト.Focus();\r
23                 }\r
24                 public CAVI tAVIをキャッシュから検索して返す( int nAVI番号1to1295 )\r
25                 {\r
26                         return this.AVIキャッシュ.tAVIをキャッシュから検索して返す( nAVI番号1to1295 );\r
27                 }\r
28                 public CAVI tAVIをキャッシュから検索して返す_なければ新規生成する( int nAVI番号1to1295 )\r
29                 {\r
30                         return this.AVIキャッシュ.tAVIをキャッシュから検索して返す_なければ新規生成する( nAVI番号1to1295 );\r
31                 }\r
32                 public ListViewItem tAVI番号に対応するListViewItemを返す( int nAVI番号1to1295 )\r
33                 {\r
34                         if( ( nAVI番号1to1295 < 1 ) || ( nAVI番号1to1295 > 36 * 36 - 1 ) )\r
35                         {\r
36                                 throw new Exception( "AVI番号が範囲外です。--->[" + nAVI番号1to1295 + "]" );\r
37                         }\r
38                         return this.listViewAVIリスト.Items[ nAVI番号1to1295 - 1 ];\r
39                 }\r
40                 public void tAVI編集のRedo( CAVI ac変更前, CAVI ac変更後 )\r
41                 {\r
42                         int num = ac変更後.nAVI番号1to1295;\r
43                         CAVI cavi = this.AVIキャッシュ.tAVIをキャッシュから検索して返す( num );\r
44                         cavi.tコピーfrom( ac変更後 );\r
45                         cavi.tコピーto( this.listViewAVIリスト.Items[ num - 1 ] );\r
46                         this._Form.tWAV_BMP_AVIリストのカーソルを全部同じ行に合わせる( cavi.nAVI番号1to1295 - 1 );\r
47                         this._Form.tタブを選択する( Cメインフォーム.Eタブ種別.AVI );\r
48                         this.listViewAVIリスト.Refresh();\r
49                 }\r
50                 public void tAVI編集のUndo( CAVI ac変更前, CAVI ac変更後 )\r
51                 {\r
52                         int num = ac変更前.nAVI番号1to1295;\r
53                         CAVI cavi = this.AVIキャッシュ.tAVIをキャッシュから検索して返す( num );\r
54                         cavi.tコピーfrom( ac変更前 );\r
55                         cavi.tコピーto( this.listViewAVIリスト.Items[ num - 1 ] );\r
56                         this._Form.tWAV_BMP_AVIリストのカーソルを全部同じ行に合わせる( cavi.nAVI番号1to1295 - 1 );\r
57                         this._Form.tタブを選択する( Cメインフォーム.Eタブ種別.AVI );\r
58                         this.listViewAVIリスト.Refresh();\r
59                 }\r
60                 public ListViewItem tCAVIとListViewItemを生成して返す( int n行番号1to1295 )\r
61                 {\r
62                         return this.tAVIをキャッシュから検索して返す_なければ新規生成する( n行番号1to1295 ).t現在の内容から新しいListViewItemを作成して返す();\r
63                 }\r
64                 public void tItemを交換する( int nItem番号1, int nItem番号2 )\r
65                 {\r
66                         if( !CUndoRedo管理.bUndoRedoした直後 )\r
67                         {\r
68                                 this._Form.mgrUndoRedo管理者.tノードを追加する( new CUndoRedoセル<int>( null, new DGUndoを実行する<int>( this.t行交換のUndo ), new DGRedoを実行する<int>( this.t行交換のRedo ), nItem番号1, nItem番号2 ) );\r
69                                 this._Form.tUndoRedo用GUIの有効無効を設定する();\r
70                         }\r
71                         CUndoRedo管理.bUndoRedoした直後 = false;\r
72                         this.tItemを交換する_ListViewItem( nItem番号1, nItem番号2 );\r
73                         this.tItemを交換する_AVIキャッシュ( nItem番号1, nItem番号2 );\r
74                         this.tItemを交換する_チップパレット( nItem番号1, nItem番号2 );\r
75                         this.tItemを交換する_譜面上のチップ( nItem番号1, nItem番号2 );\r
76                         this.tItemを交換する_レーン割付チップ( nItem番号1, nItem番号2 );\r
77                         this.tItemを交換する_カーソル移動( nItem番号1, nItem番号2 );\r
78                         this._Form.listViewAVIリスト.Refresh();\r
79                         this._Form.pictureBox譜面パネル.Refresh();\r
80                         this._Form.b未保存 = true;\r
81                 }\r
82                 public void tItemを選択する( int nItem番号0to1294 )\r
83                 {\r
84                         this.n現在選択中のItem番号0to1294 = nItem番号0to1294;\r
85                         this.listViewAVIリスト.Items[ nItem番号0to1294 ].Selected = true;\r
86                         this.listViewAVIリスト.Items[ nItem番号0to1294 ].Focused = true;\r
87                 }\r
88                 public void tファイル名の相対パス化( string str基本フォルダ名 )\r
89                 {\r
90                         for( int i = 1; i <= 36 * 36 - 1; i++ )\r
91                         {\r
92                                 CAVI cavi = this.AVIキャッシュ.tAVIをキャッシュから検索して返す( i );\r
93                                 if( ( cavi != null ) && ( cavi.strファイル名.Length > 0 ) )\r
94                                 {\r
95                                         try\r
96                                         {\r
97                                                 Uri uri = new Uri( str基本フォルダ名 );\r
98                                                 cavi.strファイル名 = Uri.UnescapeDataString( uri.MakeRelativeUri( new Uri( cavi.strファイル名 ) ).ToString() ).Replace( '/', '\\' );\r
99                                         }\r
100                                         catch( UriFormatException )\r
101                                         {\r
102                                         }\r
103                                 }\r
104                         }\r
105                 }\r
106                 public void t行交換のRedo( int n変更前のItem番号0to1294, int n変更後のItem番号0to1294 )\r
107                 {\r
108                         CUndoRedo管理.bUndoRedoした直後 = true;\r
109                         this.tItemを交換する( n変更前のItem番号0to1294, n変更後のItem番号0to1294 );\r
110                 }\r
111                 public void t行交換のUndo( int n変更前のItem番号0to1294, int n変更後のItem番号0to1294 )\r
112                 {\r
113                         CUndoRedo管理.bUndoRedoした直後 = true;\r
114                         this.tItemを交換する( n変更前のItem番号0to1294, n変更後のItem番号0to1294 );\r
115                 }\r
116                 public void t新規生成のRedo( CAVI ac生成前はNull, CAVI ac生成されたAVIの複製 )\r
117                 {\r
118                         int num = ac生成されたAVIの複製.nAVI番号1to1295;\r
119                         CAVI cavi = this.AVIキャッシュ.tAVIをキャッシュから検索して返す_なければ新規生成する( num );\r
120                         cavi.tコピーfrom( ac生成されたAVIの複製 );\r
121                         cavi.tコピーto( this.listViewAVIリスト.Items[ num - 1 ] );\r
122                         this._Form.tタブを選択する( Cメインフォーム.Eタブ種別.AVI );\r
123                         this.listViewAVIリスト.Refresh();\r
124                 }\r
125                 public void t新規生成のUndo( CAVI ac生成前はNull, CAVI ac生成されたAVIの複製 )\r
126                 {\r
127                         int num = ac生成されたAVIの複製.nAVI番号1to1295;\r
128                         new CAVI().tコピーto( this.listViewAVIリスト.Items[ num - 1 ] );\r
129                         this.AVIキャッシュ.tAVIをキャッシュから削除する( num );\r
130                         this._Form.tタブを選択する( Cメインフォーム.Eタブ種別.AVI );\r
131                         this.listViewAVIリスト.Refresh();\r
132                 }\r
133                 public void t動画プロパティを開いて編集する( int nAVI番号1to1295, string str相対パスの基本フォルダ )\r
134                 {\r
135                         this._Form.dlgチップパレット.t一時的に隠蔽する();\r
136                         CAVI cavi = this.tAVIをキャッシュから検索して返す_なければ新規生成する( nAVI番号1to1295 );\r
137                         ListViewItem item = cavi.t現在の内容から新しいListViewItemを作成して返す();\r
138                         string directoryName = "";\r
139                         if( item.SubItems[ 2 ].Text.Length > 0 )\r
140                         {\r
141                                 directoryName = Path.GetDirectoryName( this._Form.strファイルの存在するディレクトリを絶対パスで返す( item.SubItems[ 2 ].Text ) );\r
142                         }\r
143                         C動画プロパティダイアログ c動画プロパティダイアログ = new C動画プロパティダイアログ( str相対パスの基本フォルダ, directoryName );\r
144                         c動画プロパティダイアログ.avi = cavi;\r
145                         c動画プロパティダイアログ.textBoxラベル.Text = item.SubItems[ 0 ].Text;\r
146                         c動画プロパティダイアログ.textBoxAVI番号.Text = item.SubItems[ 1 ].Text;\r
147                         c動画プロパティダイアログ.textBoxファイル.Text = item.SubItems[ 2 ].Text;\r
148                         c動画プロパティダイアログ.textBoxAVI番号.ForeColor = item.ForeColor;\r
149                         c動画プロパティダイアログ.textBoxAVI番号.BackColor = item.BackColor;\r
150                         if( c動画プロパティダイアログ.ShowDialog() == DialogResult.OK )\r
151                         {\r
152                                 CAVI avi = c動画プロパティダイアログ.avi;\r
153                                 CAVI cavi3 = new CAVI();\r
154                                 cavi3.nAVI番号1to1295 = c動画プロパティダイアログ.avi.nAVI番号1to1295;\r
155                                 cavi3.strラベル名 = c動画プロパティダイアログ.textBoxラベル.Text;\r
156                                 cavi3.strファイル名 = c動画プロパティダイアログ.textBoxファイル.Text;\r
157                                 cavi3.col文字色 = c動画プロパティダイアログ.textBoxAVI番号.ForeColor;\r
158                                 cavi3.col背景色 = c動画プロパティダイアログ.textBoxAVI番号.BackColor;\r
159                                 if( !cavi3.b内容が同じwith( avi ) )\r
160                                 {\r
161                                         avi = new CAVI();\r
162                                         avi.tコピーfrom( c動画プロパティダイアログ.avi );\r
163                                         this._Form.mgrUndoRedo管理者.tノードを追加する( new CUndoRedoセル<CAVI>( null, new DGUndoを実行する<CAVI>( this.tAVI編集のUndo ), new DGRedoを実行する<CAVI>( this.tAVI編集のRedo ), avi, cavi3 ) );\r
164                                         this._Form.tUndoRedo用GUIの有効無効を設定する();\r
165                                         c動画プロパティダイアログ.avi.tコピーfrom( cavi3 );\r
166                                         if( this.tAVI番号に対応するListViewItemを返す( nAVI番号1to1295 ) != null )\r
167                                         {\r
168                                                 ListViewItem item2 = c動画プロパティダイアログ.avi.t現在の内容から新しいListViewItemを作成して返す();\r
169                                                 item = this.tAVI番号に対応するListViewItemを返す( nAVI番号1to1295 );\r
170                                                 item.SubItems[ 0 ].Text = item2.SubItems[ 0 ].Text;\r
171                                                 item.SubItems[ 1 ].Text = item2.SubItems[ 1 ].Text;\r
172                                                 item.SubItems[ 2 ].Text = item2.SubItems[ 2 ].Text;\r
173                                                 item.ForeColor = item2.ForeColor;\r
174                                                 item.BackColor = item2.BackColor;\r
175                                         }\r
176                                         this.listViewAVIリスト.Refresh();\r
177                                         this._Form.b未保存 = true;\r
178                                 }\r
179                         }\r
180                         this._Form.dlgチップパレット.t一時的な隠蔽を解除する();\r
181                 }\r
182 \r
183                 #region [ private ]\r
184                 //-----------------\r
185                 private Cメインフォーム _Form;\r
186                 private CAVIキャッシュ AVIキャッシュ = new CAVIキャッシュ();\r
187                 private ListView listViewAVIリスト;\r
188 \r
189                 private void tItemを交換する_AVIキャッシュ( int nItem番号1, int nItem番号2 )\r
190                 {\r
191                         int num = nItem番号1 + 1;\r
192                         int num2 = nItem番号2 + 1;\r
193                         CAVI ac = this.AVIキャッシュ.tAVIをキャッシュから検索して返す( num );\r
194                         CAVI cavi2 = this.AVIキャッシュ.tAVIをキャッシュから検索して返す( num2 );\r
195                         CAVI cavi3 = new CAVI();\r
196                         cavi3.tコピーfrom( ac );\r
197                         ac.tコピーfrom( cavi2 );\r
198                         ac.nAVI番号1to1295 = num;\r
199                         cavi2.tコピーfrom( cavi3 );\r
200                         cavi2.nAVI番号1to1295 = num2;\r
201                 }\r
202                 private void tItemを交換する_ListViewItem( int nItem番号1, int nItem番号2 )\r
203                 {\r
204                         int num = nItem番号1 + 1;\r
205                         int num2 = nItem番号2 + 1;\r
206                         CAVI cavi = new CAVI();\r
207                         cavi.tコピーfrom( this.listViewAVIリスト.Items[ nItem番号1 ] );\r
208                         cavi.nAVI番号1to1295 = num2;\r
209                         CAVI cavi2 = new CAVI();\r
210                         cavi2.tコピーfrom( this.listViewAVIリスト.Items[ nItem番号2 ] );\r
211                         cavi2.nAVI番号1to1295 = num;\r
212                         cavi2.tコピーto( this.listViewAVIリスト.Items[ nItem番号1 ] );\r
213                         cavi.tコピーto( this.listViewAVIリスト.Items[ nItem番号2 ] );\r
214                 }\r
215                 private void tItemを交換する_カーソル移動( int nItem番号1, int nItem番号2 )\r
216                 {\r
217                         this.tItemを選択する( nItem番号2 );\r
218                 }\r
219                 private void tItemを交換する_チップパレット( int nItem番号1, int nItem番号2 )\r
220                 {\r
221                         this._Form.dlgチップパレット.tパレットセルの番号を置換する( 2, nItem番号1 + 1, nItem番号2 + 1 );\r
222                 }\r
223                 private void tItemを交換する_レーン割付チップ( int nItem番号1, int nItem番号2 )\r
224                 {\r
225                         for( int i = 0; i < this._Form.mgr譜面管理者.listレーン.Count; i++ )\r
226                         {\r
227                                 Cレーン cレーン = this._Form.mgr譜面管理者.listレーン[ i ];\r
228                                 if( cレーン.eレーン種別 == Cレーン.E種別.AVI )\r
229                                 {\r
230                                         if( cレーン.nレーン割付チップ_表0or1to1295 == ( nItem番号1 + 1 ) )\r
231                                         {\r
232                                                 cレーン.nレーン割付チップ_表0or1to1295 = nItem番号2 + 1;\r
233                                         }\r
234                                         else if( cレーン.nレーン割付チップ_表0or1to1295 == ( nItem番号2 + 1 ) )\r
235                                         {\r
236                                                 cレーン.nレーン割付チップ_表0or1to1295 = nItem番号1 + 1;\r
237                                         }\r
238                                         if( cレーン.nレーン割付チップ_裏0or1to1295 == ( nItem番号1 + 1 ) )\r
239                                         {\r
240                                                 cレーン.nレーン割付チップ_裏0or1to1295 = nItem番号2 + 1;\r
241                                         }\r
242                                         else if( cレーン.nレーン割付チップ_裏0or1to1295 == ( nItem番号2 + 1 ) )\r
243                                         {\r
244                                                 cレーン.nレーン割付チップ_裏0or1to1295 = nItem番号1 + 1;\r
245                                         }\r
246                                 }\r
247                         }\r
248                 }\r
249                 private void tItemを交換する_譜面上のチップ( int nItem番号1, int nItem番号2 )\r
250                 {\r
251                         foreach( KeyValuePair<int, C小節> pair in this._Form.mgr譜面管理者.dic小節 )\r
252                         {\r
253                                 C小節 c小節 = pair.Value;\r
254                                 for( int i = 0; i < c小節.listチップ.Count; i++ )\r
255                                 {\r
256                                         Cチップ cチップ = c小節.listチップ[ i ];\r
257                                         if( this._Form.mgr譜面管理者.listレーン[ cチップ.nレーン番号0to ].eレーン種別 == Cレーン.E種別.AVI )\r
258                                         {\r
259                                                 if( cチップ.n値_整数1to1295 == ( nItem番号1 + 1 ) )\r
260                                                 {\r
261                                                         cチップ.n値_整数1to1295 = nItem番号2 + 1;\r
262                                                 }\r
263                                                 else if( cチップ.n値_整数1to1295 == ( nItem番号2 + 1 ) )\r
264                                                 {\r
265                                                         cチップ.n値_整数1to1295 = nItem番号1 + 1;\r
266                                                 }\r
267                                         }\r
268                                 }\r
269                         }\r
270                 }\r
271                 //-----------------\r
272                 #endregion\r
273         }\r
274 }\r