OSDN Git Service

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