OSDN Git Service

#34026 CONFIGURATION画面をFullHDに対応させた。これでまずは一通りFullHD化できたはず。
[dtxmania/dtxmania.git] / DTXManiaプロジェクト / コード / ステージ / 04.コンフィグ / CStageコンフィグ.cs
1 using System;\r
2 using System.Collections.Generic;\r
3 using System.Text;\r
4 using System.Globalization;\r
5 using System.Runtime.InteropServices;\r
6 using System.Drawing;\r
7 using System.Diagnostics;\r
8 using FDK;\r
9 \r
10 namespace DTXMania\r
11 {\r
12         internal class CStageコンフィグ : CStage\r
13         {\r
14                 // プロパティ\r
15 \r
16                 //public CActDFPFont actFont { get; private set; }\r
17 \r
18 \r
19                 // コンストラクタ\r
20 \r
21                 public CStageコンフィグ()\r
22                 {\r
23                         //CActDFPFont font;\r
24                         base.eステージID = CStage.Eステージ.コンフィグ;\r
25                         base.eフェーズID = CStage.Eフェーズ.共通_通常状態;\r
26                         //this.actFont = font = new CActDFPFont();\r
27                         //base.list子Activities.Add( font );\r
28                         base.list子Activities.Add( this.actFIFO = new CActFIFOWhite() );\r
29                         base.list子Activities.Add( this.actList = new CActConfigList() );\r
30                         base.list子Activities.Add( this.actKeyAssign = new CActConfigKeyAssign() );\r
31                         base.list子Activities.Add( this.actオプションパネル = new CActオプションパネル() );\r
32                         base.b活性化してない = true;\r
33                 }\r
34                 \r
35                 \r
36                 // メソッド\r
37 \r
38                 public void tアサイン完了通知()                                                                                                                 // CONFIGにのみ存在\r
39                 {                                                                                                                                                                               //\r
40                         this.eItemPanelモード = EItemPanelモード.パッド一覧;                                                         //\r
41                 }                                                                                                                                                                               //\r
42                 public void tパッド選択通知( EKeyConfigPart part, EKeyConfigPad pad )                                                    //\r
43                 {                                                                                                                                                                               //\r
44                         this.actKeyAssign.t開始( part, pad, this.actList.ib現在の選択項目.str項目名 );              //\r
45                         this.eItemPanelモード = EItemPanelモード.キーコード一覧;                                                   //\r
46                 }                                                                                                                                                                               //\r
47                 public void t項目変更通知()                                                                                                                               // OPTIONと共通\r
48                 {                                                                                                                                                                               //\r
49                         this.t説明文パネルに現在選択されている項目の説明を描画する();                                         //\r
50                 }                                                                                                                                                                               //\r
51 \r
52                 \r
53                 // CStage 実装\r
54 \r
55                 public override void On活性化()\r
56                 {\r
57                         Trace.TraceInformation( "コンフィグステージを活性化します。" );\r
58                         Trace.Indent();\r
59                         try\r
60                         {\r
61                                 this.n現在のメニュー番号 = 0;                                                                                                  //\r
62                                 this.ftフォント = new Font( "MS PGothic", 26f / 2 * Scale.Y, FontStyle.Bold, GraphicsUnit.Pixel );                  //\r
63                                 for ( int i = 0; i < 4; i++ )                                                                                                   //\r
64                                 {                                                                                                                                                               //\r
65                                         this.ctキー反復用[ i ] = new CCounter( 0, 0, 0, CDTXMania.Timer );                 //\r
66                                 }                                                                                                                                                               //\r
67                                 this.bメニューにフォーカス中 = true;                                                                                 // ここまでOPTIONと共通\r
68                                 this.eItemPanelモード = EItemPanelモード.パッド一覧;\r
69                         }\r
70                         finally\r
71                         {\r
72                                 Trace.TraceInformation( "コンフィグステージの活性化を完了しました。" );\r
73                                 Trace.Unindent();\r
74                         }\r
75                         base.On活性化();             // 2011.3.14 yyagi: On活性化()をtryの中から外に移動\r
76                 }\r
77                 public override void On非活性化()\r
78                 {\r
79                         Trace.TraceInformation( "コンフィグステージを非活性化します。" );\r
80                         Trace.Indent();\r
81                         try\r
82                         {\r
83                                 CDTXMania.ConfigIni.t書き出し( CDTXMania.strEXEのあるフォルダ + "Config.ini" );      // CONFIGだけ\r
84                                 if( this.ftフォント != null )                                                                                                       // 以下OPTIONと共通\r
85                                 {\r
86                                         this.ftフォント.Dispose();\r
87                                         this.ftフォント = null;\r
88                                 }\r
89                                 for( int i = 0; i < 4; i++ )\r
90                                 {\r
91                                         this.ctキー反復用[ i ] = null;\r
92                                 }\r
93                                 base.On非活性化();\r
94                         }\r
95                         catch ( UnauthorizedAccessException e )\r
96                         {\r
97                                 Trace.TraceError( e.Message + "ファイルが読み取り専用になっていないか、管理者権限がないと書き込めなくなっていないか等を確認して下さい" );\r
98                         }\r
99                         catch ( Exception e )\r
100                         {\r
101                                 Trace.TraceError( e.Message );\r
102                         }\r
103                         finally\r
104                         {\r
105                                 Trace.TraceInformation( "コンフィグステージの非活性化を完了しました。" );\r
106                                 Trace.Unindent();\r
107                         }\r
108                 }\r
109                 public override void OnManagedリソースの作成()                                                                                   // OPTIONと画像以外共通\r
110                 {\r
111                         if( !base.b活性化してない )\r
112                         {\r
113                                 this.tx背景 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenConfig background.jpg" ), false );\r
114                                 this.tx上部パネル = CDTXMania.tテクスチャの生成Af( CSkin.Path( @"Graphics\ScreenConfig header panel.png" ), true );\r
115                                 this.tx下部パネル = CDTXMania.tテクスチャの生成Af( CSkin.Path( @"Graphics\ScreenConfig footer panel.png" ), true );\r
116                                 this.txMenuカーソル = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenConfig menu cursor.png" ), false );\r
117 \r
118                                 prvFont = new CPrivateFastFont( CSkin.Path( @"Graphics\fonts\mplus-1p-heavy.ttf" ), (int) ( 18 * Scale.Y ) );\r
119                                 string[] strMenuItem = { "System", "Drums", "Guitar", "Bass", "Exit" };\r
120                                 txMenuItemLeft = new CTexture[ strMenuItem.Length, 2 ];\r
121                                 for ( int i = 0; i < strMenuItem.Length; i++ )\r
122                                 {\r
123                                         Bitmap bmpStr;\r
124                                         bmpStr = prvFont.DrawPrivateFont( strMenuItem[ i ], Color.White, Color.Black );\r
125                                         txMenuItemLeft[ i, 0 ] = CDTXMania.tテクスチャの生成( bmpStr, false );\r
126                                         bmpStr.Dispose();\r
127                                         bmpStr = prvFont.DrawPrivateFont( strMenuItem[ i ], Color.White, Color.Black, Color.Yellow, Color.OrangeRed );\r
128                                         txMenuItemLeft[ i, 1 ] = CDTXMania.tテクスチャの生成( bmpStr, false );\r
129                                         bmpStr.Dispose();\r
130                                 }\r
131                                 if( this.bメニューにフォーカス中 )\r
132                                 {\r
133                                         this.t説明文パネルに現在選択されているメニューの説明を描画する();\r
134                                 }\r
135                                 else\r
136                                 {\r
137                                         this.t説明文パネルに現在選択されている項目の説明を描画する();\r
138                                 }\r
139                                 base.OnManagedリソースの作成();\r
140                         }\r
141                 }\r
142                 public override void OnManagedリソースの解放()                                                                                   // OPTIONと同じ(COnfig.iniの書き出しタイミングのみ異なるが、無視して良い)\r
143                 {\r
144                         if( !base.b活性化してない )\r
145                         {\r
146                                 CDTXMania.tテクスチャの解放( ref this.tx背景 );\r
147                                 CDTXMania.tテクスチャの解放( ref this.tx上部パネル );\r
148                                 CDTXMania.tテクスチャの解放( ref this.tx下部パネル );\r
149                                 CDTXMania.tテクスチャの解放( ref this.txMenuカーソル );\r
150                                 CDTXMania.tテクスチャの解放( ref this.tx説明文パネル );\r
151                                 prvFont.Dispose();\r
152                                 for ( int i = 0; i < txMenuItemLeft.GetLength( 0 ); i++ )\r
153                                 {\r
154                                         txMenuItemLeft[ i, 0 ].Dispose();\r
155                                         txMenuItemLeft[ i, 0 ] = null;\r
156                                         txMenuItemLeft[ i, 1 ].Dispose();\r
157                                         txMenuItemLeft[ i, 1 ] = null;\r
158                                 }\r
159                                 txMenuItemLeft = null;\r
160                                 base.OnManagedリソースの解放();\r
161                         }\r
162                 }\r
163                 public override int On進行描画()\r
164                 {\r
165                         if( base.b活性化してない )\r
166                                 return 0;\r
167 \r
168                         if( base.b初めての進行描画 )\r
169                         {\r
170                                 base.eフェーズID = CStage.Eフェーズ.共通_フェードイン;\r
171                                 this.actFIFO.tフェードイン開始();\r
172                                 base.b初めての進行描画 = false;\r
173                         }\r
174 \r
175                         // 描画\r
176 \r
177                         #region [ 背景 ]\r
178                         //---------------------\r
179                         if( this.tx背景 != null )\r
180                                 this.tx背景.t2D描画( CDTXMania.app.Device, 0, 0 );\r
181                         //---------------------\r
182                         #endregion\r
183                         #region [ メニューカーソル ]\r
184                         //---------------------\r
185                         if ( this.txMenuカーソル != null )\r
186                         {\r
187                                 Rectangle rectangle;\r
188                                 this.txMenuカーソル.n透明度 = this.bメニューにフォーカス中 ? 0xff : 0x80;\r
189                                 int x = (int) ( 0x37 * Scale.X );\r
190                                 int y = (int) ( ( 0x61 + ( this.n現在のメニュー番号 * 0x19 ) ) * Scale.Y );\r
191                                 int num3 = (int) ( 170 * Scale.X );\r
192                                 this.txMenuカーソル.t2D描画( CDTXMania.app.Device, x, y, new Rectangle( 0, 0, (int) ( 0x10 * Scale.X ), (int) ( 0x20 * Scale.Y ) ) );\r
193                                 this.txMenuカーソル.t2D描画( CDTXMania.app.Device, ( x + num3 ) - 0x10 * Scale.X, y, new Rectangle( (int) ( 0x10 * Scale.X ), 0, (int) ( 0x10 * Scale.X ), (int) ( 0x20 * Scale.Y ) ) );\r
194                                 x += (int) ( 0x10 * Scale.X );\r
195                                 for ( num3 -= (int) ( 0x20 * Scale.X ); num3 > 0; num3 -= rectangle.Width )\r
196                                 {\r
197                                         rectangle = new Rectangle( (int) ( 8 * Scale.X ), 0, (int) ( 0x10 * Scale.X ), (int) ( 0x20 * Scale.Y ) );\r
198                                         if ( num3 < (int) ( 0x10 * Scale.X ) )\r
199                                         {\r
200                                                 rectangle.Width -= (int) ( 0x10 * Scale.X ) - num3;\r
201                                         }\r
202                                         this.txMenuカーソル.t2D描画( CDTXMania.app.Device, x, y, rectangle );\r
203                                         x += rectangle.Width;\r
204                                 }\r
205                         }\r
206                         //---------------------\r
207                         #endregion\r
208                         #region [ メニュー ]\r
209                         //---------------------\r
210                         int menuY = (int) ( 100 * Scale.Y ) - 20;\r
211                         int stepY = (int) ( 25 * Scale.Y );\r
212                         for ( int i = 0; i < txMenuItemLeft.GetLength( 0 ); i++ )\r
213                         {\r
214                                 //Bitmap bmpStr = (this.n現在のメニュー番号 == i) ?\r
215                                 //      prvFont.DrawPrivateFont( strMenuItem[ i ], Color.White, Color.Black, Color.Yellow, Color.OrangeRed ) :\r
216                                 //      prvFont.DrawPrivateFont( strMenuItem[ i ], Color.White, Color.Black );\r
217                                 //txMenuItemLeft = CDTXMania.tテクスチャの生成( bmpStr, false );\r
218                                 int flag = ( this.n現在のメニュー番号 == i ) ? 1 : 0;\r
219                                 int num4 = txMenuItemLeft[ i, flag ].sz画像サイズ.Width;\r
220                                 txMenuItemLeft[ i, flag ].t2D描画( CDTXMania.app.Device, 0x8a * Scale.X - ( num4 / 2 ), menuY ); //55\r
221                                 //txMenuItem.Dispose();\r
222                                 menuY += stepY;\r
223                         }\r
224                         //---------------------\r
225                         #endregion\r
226                         #region [ 説明文パネル ]\r
227                         //---------------------\r
228                         if ( this.tx説明文パネル != null )\r
229                                 this.tx説明文パネル.t2D描画( CDTXMania.app.Device, 0x1d * Scale.X, 0xf8 * Scale.Y );\r
230                         //---------------------\r
231                         #endregion\r
232                         #region [ アイテム ]\r
233                         //---------------------\r
234                         switch( this.eItemPanelモード )\r
235                         {\r
236                                 case EItemPanelモード.パッド一覧:\r
237                                         this.actList.t進行描画( !this.bメニューにフォーカス中 );\r
238                                         break;\r
239 \r
240                                 case EItemPanelモード.キーコード一覧:\r
241                                         this.actKeyAssign.On進行描画();\r
242                                         break;\r
243                         }\r
244                         //---------------------\r
245                         #endregion\r
246                         #region [ 上部パネル ]\r
247                         //---------------------\r
248                         if( this.tx上部パネル != null )\r
249                                 this.tx上部パネル.t2D描画( CDTXMania.app.Device, 0, 0 );\r
250                         //---------------------\r
251                         #endregion\r
252                         #region [ 下部パネル ]\r
253                         //---------------------\r
254                         if( this.tx下部パネル != null )\r
255                                 this.tx下部パネル.t2D描画( CDTXMania.app.Device, 0, SampleFramework.GameWindowSize.Height - this.tx下部パネル.sz画像サイズ.Height );\r
256                         //---------------------\r
257                         #endregion\r
258                         #region [ オプションパネル ]\r
259                         //---------------------\r
260                         this.actオプションパネル.On進行描画();\r
261                         //---------------------\r
262                         #endregion\r
263                         #region [ フェードイン・アウト ]\r
264                         //---------------------\r
265                         switch( base.eフェーズID )\r
266                         {\r
267                                 case CStage.Eフェーズ.共通_フェードイン:\r
268                                         if( this.actFIFO.On進行描画() != 0 )\r
269                                         {\r
270                                                 CDTXMania.Skin.bgmコンフィグ画面.t再生する();\r
271                                                 base.eフェーズID = CStage.Eフェーズ.共通_通常状態;\r
272                                         }\r
273                                         break;\r
274 \r
275                                 case CStage.Eフェーズ.共通_フェードアウト:\r
276                                         if( this.actFIFO.On進行描画() == 0 )\r
277                                         {\r
278                                                 break;\r
279                                         }\r
280                                         return 1;\r
281                         }\r
282                         //---------------------\r
283                         #endregion\r
284 \r
285                         #region [ Enumerating Songs ]\r
286                         // CActEnumSongs側で表示する\r
287                         #endregion\r
288 \r
289                         // キー入力\r
290                         #region [ キー入力 ]\r
291                         if ( ( base.eフェーズID != CStage.Eフェーズ.共通_通常状態 )\r
292                                 || this.actKeyAssign.bキー入力待ちの最中である\r
293                                 || CDTXMania.act現在入力を占有中のプラグイン != null )\r
294                                 return 0;\r
295 \r
296                         // 曲データの一覧取得中は、キー入力を無効化する\r
297                         if ( !CDTXMania.EnumSongs.IsEnumerating || CDTXMania.actEnumSongs.bコマンドでの曲データ取得 != true )\r
298                         {\r
299                                 if ( ( CDTXMania.Input管理.Keyboard.bキーが押された( (int) SlimDX.DirectInput.Key.Escape ) || CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.FT ) ) || CDTXMania.Pad.b押されたGB( Eパッド.FT ) )\r
300                                 {\r
301                                         CDTXMania.Skin.sound取消音.t再生する();\r
302                                         if ( !this.bメニューにフォーカス中 )\r
303                                         {\r
304                                                 if ( this.eItemPanelモード == EItemPanelモード.キーコード一覧 )\r
305                                                 {\r
306                                                         CDTXMania.stageコンフィグ.tアサイン完了通知();\r
307                                                         return 0;\r
308                                                 }\r
309                                                 if ( !this.actList.bIsKeyAssignSelected && !this.actList.bIsFocusingParameter ) // #24525 2011.3.15 yyagi, #32059 2013.9.17 yyagi\r
310                                                 {\r
311                                                         this.bメニューにフォーカス中 = true;\r
312                                                 }\r
313                                                 this.t説明文パネルに現在選択されているメニューの説明を描画する();\r
314                                                 this.actList.tEsc押下();                                                              // #24525 2011.3.15 yyagi ESC押下時の右メニュー描画用\r
315                                         }\r
316                                         else\r
317                                         {\r
318                                                 this.actFIFO.tフェードアウト開始();\r
319                                                 base.eフェーズID = CStage.Eフェーズ.共通_フェードアウト;\r
320                                         }\r
321                                 }\r
322                                 else if ( ( CDTXMania.Pad.b押されたDGB( Eパッド.CY ) || CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.RD ) ) || ( CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.LC ) || ( CDTXMania.ConfigIni.bEnterがキー割り当てのどこにも使用されていない && CDTXMania.Input管理.Keyboard.bキーが押された( (int) SlimDX.DirectInput.Key.Return ) ) ) )\r
323                                 {\r
324                                         #region [ EXIT ]\r
325                                         if ( this.n現在のメニュー番号 == 4 )\r
326                                         {\r
327                                                 CDTXMania.Skin.sound決定音.t再生する();\r
328                                                 this.actFIFO.tフェードアウト開始();\r
329                                                 base.eフェーズID = CStage.Eフェーズ.共通_フェードアウト;\r
330                                         }\r
331                                         #endregion\r
332                                         else if ( this.bメニューにフォーカス中 )\r
333                                         {\r
334                                                 CDTXMania.Skin.sound決定音.t再生する();\r
335                                                 this.bメニューにフォーカス中 = false;\r
336                                                 this.t説明文パネルに現在選択されている項目の説明を描画する();\r
337                                         }\r
338                                         else\r
339                                         {\r
340                                                 switch ( this.eItemPanelモード )\r
341                                                 {\r
342                                                         case EItemPanelモード.パッド一覧:\r
343                                                                 bool bIsKeyAssignSelectedBeforeHitEnter = this.actList.bIsKeyAssignSelected;    // #24525 2011.3.15 yyagi\r
344                                                                 this.actList.tEnter押下();\r
345                                                                 if ( this.actList.b現在選択されている項目はReturnToMenuである )\r
346                                                                 {\r
347                                                                         this.t説明文パネルに現在選択されているメニューの説明を描画する();\r
348                                                                         if ( bIsKeyAssignSelectedBeforeHitEnter == false )                                                      // #24525 2011.3.15 yyagi\r
349                                                                         {\r
350                                                                                 this.bメニューにフォーカス中 = true;\r
351                                                                         }\r
352                                                                 }\r
353                                                                 break;\r
354 \r
355                                                         case EItemPanelモード.キーコード一覧:\r
356                                                                 this.actKeyAssign.tEnter押下();\r
357                                                                 break;\r
358                                                 }\r
359                                         }\r
360                                 }\r
361                                 this.ctキー反復用.Up.tキー反復( CDTXMania.Input管理.Keyboard.bキーが押されている( (int) SlimDX.DirectInput.Key.UpArrow ), new CCounter.DGキー処理( this.tカーソルを上へ移動する ) );\r
362                                 this.ctキー反復用.R.tキー反復( CDTXMania.Pad.b押されているGB( Eパッド.HH ), new CCounter.DGキー処理( this.tカーソルを上へ移動する ) );\r
363                                 if ( CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.SD ) )\r
364                                 {\r
365                                         this.tカーソルを上へ移動する();\r
366                                 }\r
367                                 this.ctキー反復用.Down.tキー反復( CDTXMania.Input管理.Keyboard.bキーが押されている( (int) SlimDX.DirectInput.Key.DownArrow ), new CCounter.DGキー処理( this.tカーソルを下へ移動する ) );\r
368                                 this.ctキー反復用.B.tキー反復( CDTXMania.Pad.b押されているGB( Eパッド.BD ), new CCounter.DGキー処理( this.tカーソルを下へ移動する ) );\r
369                                 if ( CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.LT ) )\r
370                                 {\r
371                                         this.tカーソルを下へ移動する();\r
372                                 }\r
373                         }\r
374                         #endregion\r
375                         return 0;\r
376                 }\r
377 \r
378 \r
379                 // その他\r
380 \r
381                 #region [ private ]\r
382                 //-----------------\r
383                 private enum EItemPanelモード\r
384                 {\r
385                         パッド一覧,\r
386                         キーコード一覧\r
387                 }\r
388 \r
389                 [StructLayout( LayoutKind.Sequential )]\r
390                 private struct STキー反復用カウンタ\r
391                 {\r
392                         public CCounter Up;\r
393                         public CCounter Down;\r
394                         public CCounter R;\r
395                         public CCounter B;\r
396                         public CCounter this[ int index ]\r
397                         {\r
398                                 get\r
399                                 {\r
400                                         switch( index )\r
401                                         {\r
402                                                 case 0:\r
403                                                         return this.Up;\r
404 \r
405                                                 case 1:\r
406                                                         return this.Down;\r
407 \r
408                                                 case 2:\r
409                                                         return this.R;\r
410 \r
411                                                 case 3:\r
412                                                         return this.B;\r
413                                         }\r
414                                         throw new IndexOutOfRangeException();\r
415                                 }\r
416                                 set\r
417                                 {\r
418                                         switch( index )\r
419                                         {\r
420                                                 case 0:\r
421                                                         this.Up = value;\r
422                                                         return;\r
423 \r
424                                                 case 1:\r
425                                                         this.Down = value;\r
426                                                         return;\r
427 \r
428                                                 case 2:\r
429                                                         this.R = value;\r
430                                                         return;\r
431 \r
432                                                 case 3:\r
433                                                         this.B = value;\r
434                                                         return;\r
435                                         }\r
436                                         throw new IndexOutOfRangeException();\r
437                                 }\r
438                         }\r
439                 }\r
440 \r
441                 private CActFIFOWhite actFIFO;\r
442                 private CActConfigKeyAssign actKeyAssign;\r
443                 private CActConfigList actList;\r
444                 private CActオプションパネル actオプションパネル;\r
445                 private bool bメニューにフォーカス中;\r
446                 private STキー反復用カウンタ ctキー反復用;\r
447                 private const int DESC_H = 0x80;\r
448                 private const int DESC_W = 220;\r
449                 private EItemPanelモード eItemPanelモード;\r
450                 private Font ftフォント;\r
451                 private int n現在のメニュー番号;\r
452                 private CTexture txMenuカーソル;\r
453                 private CTextureAf tx下部パネル;\r
454                 private CTextureAf tx上部パネル;\r
455                 private CTexture tx説明文パネル;\r
456                 private CTexture tx背景;\r
457                 private CPrivateFastFont prvFont;\r
458                 private CTexture[ , ] txMenuItemLeft;\r
459 \r
460                 private void tカーソルを下へ移動する()\r
461                 {\r
462                         if( !this.bメニューにフォーカス中 )\r
463                         {\r
464                                 switch( this.eItemPanelモード )\r
465                                 {\r
466                                         case EItemPanelモード.パッド一覧:\r
467                                                 this.actList.t次に移動();\r
468                                                 return;\r
469 \r
470                                         case EItemPanelモード.キーコード一覧:\r
471                                                 this.actKeyAssign.t次に移動();\r
472                                                 return;\r
473                                 }\r
474                         }\r
475                         else\r
476                         {\r
477                                 CDTXMania.Skin.soundカーソル移動音.t再生する();\r
478                                 this.n現在のメニュー番号 = ( this.n現在のメニュー番号 + 1 ) % 5;\r
479                                 switch( this.n現在のメニュー番号 )\r
480                                 {\r
481                                         case 0:\r
482                                                 this.actList.t項目リストの設定・System();\r
483                                                 break;\r
484 \r
485                                         //case 1:\r
486                                         //    this.actList.t項目リストの設定・KeyAssignDrums();\r
487                                         //    break;\r
488 \r
489                                         //case 2:\r
490                                         //    this.actList.t項目リストの設定・KeyAssignGuitar();\r
491                                         //    break;\r
492 \r
493                                         //case 3:\r
494                                         //    this.actList.t項目リストの設定・KeyAssignBass();\r
495                                         //    break;\r
496 \r
497                                         case 1:\r
498                                                 this.actList.t項目リストの設定・Drums();\r
499                                                 break;\r
500 \r
501                                         case 2:\r
502                                                 this.actList.t項目リストの設定・Guitar();\r
503                                                 break;\r
504 \r
505                                         case 3:\r
506                                                 this.actList.t項目リストの設定・Bass();\r
507                                                 break;\r
508 \r
509                                         case 4:\r
510                                                 this.actList.t項目リストの設定・Exit();\r
511                                                 break;\r
512                                 }\r
513                                 this.t説明文パネルに現在選択されているメニューの説明を描画する();\r
514                         }\r
515                 }\r
516                 private void tカーソルを上へ移動する()\r
517                 {\r
518                         if( !this.bメニューにフォーカス中 )\r
519                         {\r
520                                 switch( this.eItemPanelモード )\r
521                                 {\r
522                                         case EItemPanelモード.パッド一覧:\r
523                                                 this.actList.t前に移動();\r
524                                                 return;\r
525 \r
526                                         case EItemPanelモード.キーコード一覧:\r
527                                                 this.actKeyAssign.t前に移動();\r
528                                                 return;\r
529                                 }\r
530                         }\r
531                         else\r
532                         {\r
533                                 CDTXMania.Skin.soundカーソル移動音.t再生する();\r
534                                 this.n現在のメニュー番号 = ( ( this.n現在のメニュー番号 - 1 ) + 5 ) % 5;\r
535                                 switch( this.n現在のメニュー番号 )\r
536                                 {\r
537                                         case 0:\r
538                                                 this.actList.t項目リストの設定・System();\r
539                                                 break;\r
540 \r
541                                         //case 1:\r
542                                         //    this.actList.t項目リストの設定・KeyAssignDrums();\r
543                                         //    break;\r
544 \r
545                                         //case 2:\r
546                                         //    this.actList.t項目リストの設定・KeyAssignGuitar();\r
547                                         //    break;\r
548 \r
549                                         //case 3:\r
550                                         //    this.actList.t項目リストの設定・KeyAssignBass();\r
551                                         //    break;\r
552                                         case 1:\r
553                                                 this.actList.t項目リストの設定・Drums();\r
554                                                 break;\r
555 \r
556                                         case 2:\r
557                                                 this.actList.t項目リストの設定・Guitar();\r
558                                                 break;\r
559 \r
560                                         case 3:\r
561                                                 this.actList.t項目リストの設定・Bass();\r
562                                                 break;\r
563 \r
564                                         case 4:\r
565                                                 this.actList.t項目リストの設定・Exit();\r
566                                                 break;\r
567                                 }\r
568                                 this.t説明文パネルに現在選択されているメニューの説明を描画する();\r
569                         }\r
570                 }\r
571                 private void t説明文パネルに現在選択されているメニューの説明を描画する()\r
572                 {\r
573                         try\r
574                         {\r
575                                 var image = new Bitmap( (int) ( 220 * 2 * Scale.X ), (int) ( 192 * 2 * Scale.Y ) );             // 説明文領域サイズの縦横 2 倍。(描画時に 0.5 倍で表示する。)\r
576                                 var graphics = Graphics.FromImage( image );\r
577                                 graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;\r
578                                 \r
579                                 string[,] str = new string[ 2, 2 ];\r
580                                 switch( this.n現在のメニュー番号 )\r
581                                 {\r
582                                         case 0:\r
583                                                 str[ 0, 0 ] = "システムに関係する項目を設定します。";\r
584                                                 str[ 0, 1 ] = "";\r
585                                                 str[ 1, 0 ] = "Settings for an overall systems.";\r
586                                                 break;\r
587 \r
588                                         //case 1:\r
589                                         //    str[0, 0] = "ドラムのキー入力に関する項目を設";\r
590                                         //    str[0, 1] = "定します。";\r
591                                         //    str[1, 0] = "Settings for the drums key/pad inputs.";\r
592                                         //    str[1, 1] = "";\r
593                                         //    break;\r
594 \r
595                                         //case 2:\r
596                                         //    str[0, 0] = "ギターのキー入力に関する項目を設";\r
597                                         //    str[0, 1] = "定します。";\r
598                                         //    str[1, 0] = "Settings for the guitar key/pad inputs.";\r
599                                         //    str[1, 1] = "";\r
600                                         //    break;\r
601 \r
602                                         //case 3:\r
603                                         //    str[0, 0] = "ベースのキー入力に関する項目を設";\r
604                                         //    str[0, 1] = "定します。";\r
605                                         //    str[1, 0] = "Settings for the bass key/pad inputs.";\r
606                                         //    str[1, 1] = "";\r
607                                         //    break;\r
608                                         case 1:\r
609                                                 str[ 0, 0 ] = "ドラムの演奏に関する項目を設定します。";\r
610                                                 str[ 0, 1 ] = "";\r
611                                                 str[ 1, 0 ] = "Settings to play the drums.";\r
612                                                 str[ 1, 1 ] = "";\r
613                                                 break;\r
614 \r
615                                         case 2:\r
616                                                 str[ 0, 0 ] = "ギターの演奏に関する項目を設定します。";\r
617                                                 str[ 0, 1 ] = "";\r
618                                                 str[ 1, 0 ] = "Settings to play the guitar.";\r
619                                                 str[ 1, 1 ] = "";\r
620                                                 break;\r
621 \r
622                                         case 3:\r
623                                                 str[ 0, 0 ] = "ベースの演奏に関する項目を設定します。";\r
624                                                 str[ 0, 1 ] = "";\r
625                                                 str[ 1, 0 ] = "Settings to play the bass.";\r
626                                                 str[ 1, 1 ] = "";\r
627                                                 break;\r
628 \r
629                                         case 4:\r
630                                                 str[ 0, 0 ] = "設定を保存し、コンフィグ画面を終了します。";\r
631                                                 str[ 0, 1 ] = "";\r
632                                                 str[ 1, 0 ] = "Save the settings and exit from\nCONFIGURATION menu.";\r
633                                                 str[ 1, 1 ] = "";\r
634                                                 break;\r
635                                 }\r
636 \r
637                                 int c = ( CultureInfo.CurrentCulture.TwoLetterISOLanguageName == "ja" ) ? 0 : 1;\r
638                                 for ( int i = 0; i < 2; i++ )\r
639                                 {\r
640                                         graphics.DrawString( str[ c, i ], this.ftフォント, Brushes.White, new PointF( 4f * Scale.X, ( i * 30 ) * Scale.Y ) );\r
641                                 }\r
642                                 graphics.Dispose();\r
643                                 if ( this.tx説明文パネル != null )\r
644                                 {\r
645                                         this.tx説明文パネル.Dispose();\r
646                                 }\r
647                                 this.tx説明文パネル = new CTexture( CDTXMania.app.Device, image, CDTXMania.TextureFormat );\r
648                                 // this.tx説明文パネル.vc拡大縮小倍率.X = 0.5f;\r
649                                 // this.tx説明文パネル.vc拡大縮小倍率.Y = 0.5f;\r
650                                 image.Dispose();\r
651                         }\r
652                         catch ( CTextureCreateFailedException )\r
653                         {\r
654                                 Trace.TraceError( "説明文テクスチャの作成に失敗しました。" );\r
655                                 this.tx説明文パネル = null;\r
656                         }\r
657                 }\r
658                 private void t説明文パネルに現在選択されている項目の説明を描画する()\r
659                 {\r
660                         try\r
661                         {\r
662                                 var image = new Bitmap( (int) ( 220 * Scale.X ), (int) ( 192 * Scale.Y ) );             // 説明文領域サイズの縦横 2 倍。(描画時に 0.5 倍で表示する・・・のは中止。処理速度向上のため。)\r
663                                 var graphics = Graphics.FromImage( image );\r
664                                 graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;\r
665 \r
666                                 CItemBase item = this.actList.ib現在の選択項目;\r
667                                 if ( ( item.str説明文 != null ) && ( item.str説明文.Length > 0 ) )\r
668                                 {\r
669                                         //int num = 0;\r
670                                         //foreach( string str in item.str説明文.Split( new char[] { '\n' } ) )\r
671                                         //{\r
672                                         //    graphics.DrawString( str, this.ftフォント, Brushes.White, new PointF( 4f * Scale.X, (float) num * Scale.Y ) );\r
673                                         //    num += 30;\r
674                                         //}\r
675                                         graphics.DrawString( item.str説明文, this.ftフォント, Brushes.White, new RectangleF( 4f * Scale.X, (float) 0 * Scale.Y, 630, 430 ) );\r
676                                 }\r
677                                 graphics.Dispose();\r
678                                 if( this.tx説明文パネル != null )\r
679                                 {\r
680                                         this.tx説明文パネル.Dispose();\r
681                                 }\r
682                                 this.tx説明文パネル = new CTexture( CDTXMania.app.Device, image, CDTXMania.TextureFormat );\r
683                                 //this.tx説明文パネル.vc拡大縮小倍率.X = 0.5f;\r
684                                 //this.tx説明文パネル.vc拡大縮小倍率.Y = 0.5f;\r
685                                 image.Dispose();\r
686                         }\r
687                         catch( CTextureCreateFailedException )\r
688                         {\r
689                                 Trace.TraceError( "説明文パネルテクスチャの作成に失敗しました。" );\r
690                                 this.tx説明文パネル = null;\r
691                         }\r
692                 }\r
693                 //-----------------\r
694                 #endregion\r
695         }\r
696 }\r