OSDN Git Service

DTXManiaソリューション、DTXManiaプロジェクト、DTXCreatorプロジェクト、FDKプロジェクトについて英語化。
[dtxmania/dtxmania.git] / DTXMania / コード / ステージ / 04.コンフィグ / CActConfigList.cs
diff --git a/DTXMania/コード/ステージ/04.コンフィグ/CActConfigList.cs b/DTXMania/コード/ステージ/04.コンフィグ/CActConfigList.cs
new file mode 100644 (file)
index 0000000..41ac2c5
--- /dev/null
@@ -0,0 +1,1208 @@
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Text;
+using System.Drawing;
+using System.Threading;
+using SharpDX;
+using FDK;
+
+using Color = System.Drawing.Color;
+using Point = System.Drawing.Point;
+using Rectangle = System.Drawing.Rectangle;
+
+namespace DTXMania
+{
+       internal class CActConfigList : CActivity
+       {
+               STDGBSValue<COptionLabel> ReturnToMenu;
+               STDGBSValue<COptionLabel> KeyAssignMenu;
+               STDGBSValue<COptionLabel> DisplayMenu;
+               STDGBSValue<COptionLabel> EDrumsMenu;
+               COptionLabel SoundMenu;
+               COptionLabel HitRangeMenu;
+               COptionStringList skins;
+
+               bool b項目リスト側にフォーカスがある;
+               bool b要素値にフォーカス中;
+               CCounter ct三角矢印アニメ;
+               Eメニュー種別 eメニュー種別;
+               // #33689 2014.6.17 yyagi
+               bool InitialUseOSTimer;
+               bool InitialWASAPIEventDriven;
+               ESoundDeviceTypeForConfig InitialSystemSoundType;
+               int InitialWASAPIBufferSizeMs;
+               int InitialASIODevice;
+               bool InitialForceHighPower;
+               List<COptionBase> list項目リスト;
+               long nスクロール用タイマ値;
+               int n現在のスクロールカウンタ;
+               int n目標のスクロールカウンタ;
+               Point[] ptパネルの基本座標 = new Point[]
+               {
+                       new Point(0x12d, 3), new Point(0x12d, 0x35), new Point(0x12d, 0x67),
+                       new Point(0x12d, 0x99), new Point(0x114, 0xcb), new Point(0x12d, 0xfd),
+                       new Point(0x12d, 0x12f), new Point(0x12d, 0x161), new Point(0x12d, 0x193),
+                       new Point(0x12d, 0x1c5)
+               };
+               CTextureAf txその他項目行パネル;
+               CTexture tx三角矢印;
+               CTextureAf tx通常項目行パネル;
+               // #28195 2012.5.2 yyagi
+               CTexture txSkinSample;
+               string[] skinSubFolders;
+               string[] skinNames;
+               string skinInitial;
+               CPrivateFastFont prvFont;
+               private struct stMenuItemRight
+               {
+                       public CTexture txMenuItemRight;
+                       public int nParam;
+                       public string strParam;
+                       public CTexture txParam;
+                       public CTexture txParamColored;
+               }
+               stMenuItemRight[] listMenu;
+
+               /// <summary>
+               /// #32059 2013.9.17 yyagi
+               /// </summary>
+               public bool bIsFocusingParameter
+               {
+                       get
+                       {
+                               return b要素値にフォーカス中;
+                       }
+               }
+
+               public bool b現在選択されている項目はReturnToMenuである
+               {
+                       get
+                       {
+                               COptionBase sel = this.list項目リスト[this.n現在の選択項目];
+                               bool ret = false;
+                               for (EPart i = EPart.Drums; i <= EPart.System; ++i)
+                               {
+                                       if (sel == ReturnToMenu[i])
+                                       {
+                                               ret = true;
+                                       }
+                               }
+                               return ret;
+                       }
+               }
+
+               public bool b楽器またはシステム用メニューである
+               {
+                       get
+                       {
+                               return eメニュー種別 == Eメニュー種別.Bass || eメニュー種別 == Eメニュー種別.Drums || eメニュー種別 == Eメニュー種別.Guitar || eメニュー種別 == Eメニュー種別.System;
+                       }
+               }
+
+               public COptionBase ib現在の選択項目
+               {
+                       get
+                       {
+                               return this.list項目リスト[this.n現在の選択項目];
+                       }
+               }
+
+               public int n現在の選択項目;
+
+               /// <summary>
+               /// ESC押下時の右メニュー描画
+               /// </summary>
+               public void tEsc押下()
+               {
+                       if (this.b要素値にフォーカス中)
+                       {
+                               // #32059 2013.9.17 add yyagi
+                               this.b要素値にフォーカス中 = false;
+                       }
+
+                       if (this.eメニュー種別 == Eメニュー種別.KeyAssignSystem)
+                       {
+                               t項目リストの設定(Eメニュー種別.System);
+                       }
+                       else if (this.eメニュー種別 == Eメニュー種別.KeyAssignDrums)
+                       {
+                               t項目リストの設定(Eメニュー種別.Drums);
+                       }
+                       else if (this.eメニュー種別 == Eメニュー種別.KeyAssignGuitar)
+                       {
+                               t項目リストの設定(Eメニュー種別.Guitar);
+                       }
+                       else if (this.eメニュー種別 == Eメニュー種別.KeyAssignBass)
+                       {
+                               t項目リストの設定(Eメニュー種別.Bass);
+                       }
+                       if (this.eメニュー種別 == Eメニュー種別.DisplaySystem)
+                       {
+                               t項目リストの設定(Eメニュー種別.System);
+                       }
+                       else if (this.eメニュー種別 == Eメニュー種別.DisplayDrums)
+                       {
+                               t項目リストの設定(Eメニュー種別.Drums);
+                       }
+                       else if (this.eメニュー種別 == Eメニュー種別.DisplayGuitar)
+                       {
+                               t項目リストの設定(Eメニュー種別.Guitar);
+                       }
+                       else if (this.eメニュー種別 == Eメニュー種別.DisplayBass)
+                       {
+                               t項目リストの設定(Eメニュー種別.Bass);
+                       }
+                       else if (this.eメニュー種別 == Eメニュー種別.EDrumsSettings)
+                       {
+                               t項目リストの設定(Eメニュー種別.Drums);
+                       }
+                       else if (this.eメニュー種別 == Eメニュー種別.HitRangeSettings)
+                       {
+                               t項目リストの設定(Eメニュー種別.System);
+                       }
+                       else if ( this.eメニュー種別 == Eメニュー種別.SoundSettings)
+                       {
+                               t項目リストの設定(Eメニュー種別.System);
+                       }
+               }
+
+               public bool tEnter押下()
+               {
+                       bool ret = false;
+                       CDTXMania.Instance.Skin.sound決定音.t再生する();
+
+                       if (this.b要素値にフォーカス中)
+                       {
+                               this.b要素値にフォーカス中 = false;
+                       }
+                       else if (this.list項目リスト[this.n現在の選択項目] is COptionInteger)
+                       {
+                               this.b要素値にフォーカス中 = true;
+                       }
+                       else if (this.list項目リスト[this.n現在の選択項目] is IOptionList || this.list項目リスト[this.n現在の選択項目] is COptionBool)
+                       {
+                               this.list項目リスト[this.n現在の選択項目].OnNext();
+                       }
+
+                       // #27029 2012.1.5 from
+                       if (
+                                       CDTXMania.Instance.ConfigIni.eBDGroup == EBDGroup.Group &&
+                                       (
+                                       (this.list項目リスト[this.n現在の選択項目] == CDTXMania.Instance.ConfigIni.eHHGroup ||
+                                        this.list項目リスト[this.n現在の選択項目] == CDTXMania.Instance.ConfigIni.eHitSoundPriorityHH)))
+                       {
+                               // 変更禁止(何もしない)
+                       }
+                       else
+                       {
+                               if (b現在選択されている項目はReturnToMenuである && b楽器またはシステム用メニューである)
+                               {
+                                       ret = true;
+                               }
+                               this.list項目リスト[this.n現在の選択項目].OnEnter();
+                       }
+                       return ret;
+               }
+
+               private void tGenerateSkinSample()
+               {
+                       string path = skinSubFolders[skins.Index];
+                       path = System.IO.Path.Combine(path, @"Graphics\ScreenTitle background.jpg");
+                       using (Bitmap bmSrc = new Bitmap(path))
+                       {
+                               using (Bitmap bmDest = new Bitmap(bmSrc.Width / 4, bmSrc.Height / 4))
+                               {
+                                       using (Graphics g = Graphics.FromImage(bmDest))
+                                       {
+                                               g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
+                                               g.DrawImage(bmSrc, new Rectangle(0, 0, bmSrc.Width / 4, bmSrc.Height / 4),
+                                                               0, 0, bmSrc.Width, bmSrc.Height, GraphicsUnit.Pixel);
+                                               TextureFactory.tテクスチャの解放(ref txSkinSample);
+                                               txSkinSample = TextureFactory.tテクスチャの生成(bmDest, false);
+                                       }
+                               }
+                       }
+               }
+
+               // #region [ 項目リストの設定 ( Exit, KeyAssignSystem/Drums/Guitar/Bass) ]
+               public void t項目リストの設定_Exit()
+               {
+                       CDTXMania.Instance.SaveConfig();
+                       this.eメニュー種別 = Eメニュー種別.Unknown;
+               }
+
+               public void t項目リストの設定(Eメニュー種別 eMenu)
+               {
+                       this.list項目リスト.Clear();
+
+                       Func<EPad, string, string, COptionString> PadNotifier = (pad, lbl, expl) =>
+                       {
+                               COptionString opt = new COptionString("");
+                               opt.Initialize(lbl, expl);
+                               opt.OnEnterDelegate = () =>
+                               {
+                                       CDTXMania.Instance.stageコンフィグ.tパッド選択通知(pad);
+                               };
+                               return opt;
+                       };
+
+                       CResources cr = CDTXMania.Instance.Resources;
+
+                       if (eMenu == Eメニュー種別.DisplaySystem)
+                       {
+                               list項目リスト.Add(ReturnToMenu.System);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.bFullScreen);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.bBGA);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAVI);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.bFullAVI);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.bVSyncWait);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdDebugX.Both);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdDebugY.Both);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdDebugX.DrOnly);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdDebugY.DrOnly);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdDebugX.GBOnly);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdDebugY.GBOnly);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdMovieX.Both);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdMovieY.Both);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdMovieX.DrOnly);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdMovieY.DrOnly);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdMovieX.GBOnly);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdMovieY.GBOnly);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.nBGAlpha);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.nShowLagType);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.eJudgePriority);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.bDebugInfo);
+                       }
+                       else if (eMenu == Eメニュー種別.DisplayDrums)
+                       {
+                               list項目リスト.Add(ReturnToMenu.Drums);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdInstX.Drums.Both);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdInstX.Drums.DrOnly);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdComboX.Drums.Both);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdComboX.Drums.DrOnly);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdJudgeLineY.Drums);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdJudgeY.Drums);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.LC);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.HH);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.SD);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.BD);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.HT);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.LT);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.FT);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.CY);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.eSudHidInv.Drums);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.bReverse.Drums);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.nMinComboDisp.Drums);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.bGraph.Drums);
+                       }
+                       else if (eMenu == Eメニュー種別.DisplayGuitar)
+                       {
+                               list項目リスト.Add(ReturnToMenu.Guitar);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdInstX.Guitar.Both);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdInstX.Guitar.GBOnly);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdComboX.Guitar.Both);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdComboX.Guitar.GBOnly);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdJudgeLineY.Guitar);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdJudgeY.Guitar);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.GtR);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.GtG);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.GtB);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.eSudHidInv.Guitar);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.bReverse.Guitar);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.nMinComboDisp.Guitar);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.bGraph.Guitar);
+                       }
+                       else if (eMenu == Eメニュー種別.DisplayBass)
+                       {
+                               list項目リスト.Add(ReturnToMenu.Bass);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdInstX.Bass.Both);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdInstX.Bass.GBOnly);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdComboX.Bass.Both);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdComboX.Bass.GBOnly);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdJudgeLineY.Bass);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdJudgeY.Bass);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.BsR);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.BsG);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.BsB);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.eSudHidInv.Bass);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.bReverse.Bass);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.nMinComboDisp.Bass);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.bGraph.Bass);
+                       }
+                       else if (eMenu == Eメニュー種別.EDrumsSettings)
+                       {
+                               list項目リスト.Add(ReturnToMenu.Drums);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.nVelocityMin.LC);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.nVelocityMin.HH);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.nVelocityMin.SD);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.nVelocityMin.BD);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.nVelocityMin.HT);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.nVelocityMin.LT);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.nVelocityMin.FT);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.nVelocityMin.CY);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.nVelocityMin.RD);
+                       }
+                       else if (eMenu == Eメニュー種別.HitRangeSettings)
+                       {
+                               list項目リスト.Add(ReturnToMenu.System);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.nHitRange.Perfect);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.nHitRange.Great);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.nHitRange.Good);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.nHitRange.Poor);
+                       }
+                       else if (eMenu == Eメニュー種別.KeyAssignSystem)
+                       {
+                               list項目リスト.Add(ReturnToMenu.System);
+                               list項目リスト.Add(PadNotifier(EPad.Capture, cr.Label("strCfgKeyAssignCapture"), cr.Explanation("strCfgKeyAssignCapture") ));
+                       }
+                       else if (eMenu == Eメニュー種別.KeyAssignDrums)
+                       {
+                               list項目リスト.Add(ReturnToMenu.Drums);
+                               list項目リスト.Add(PadNotifier(EPad.LC, cr.Label("strCfgKeyAssignLC"), cr.Explanation("strCfgKeyAssignLC") ));
+                               list項目リスト.Add(PadNotifier(EPad.HH, cr.Label("strCfgKeyAssignHH"), cr.Explanation("strCfgKeyAssignHH") ));
+                               list項目リスト.Add(PadNotifier(EPad.HHO,cr.Label("strCfgKeyAssignHHO"), cr.Explanation("strCfgKeyAssignHHO") ));
+                               list項目リスト.Add(PadNotifier(EPad.SD, cr.Label("strCfgKeyAssignSD"), cr.Explanation("strCfgKeyAssignSD") ));
+                               list項目リスト.Add(PadNotifier(EPad.BD, cr.Label("strCfgKeyAssignBD"), cr.Explanation("strCfgKeyAssignBD") ));
+                               list項目リスト.Add(PadNotifier(EPad.HT, cr.Label("strCfgKeyAssignHT"), cr.Explanation("strCfgKeyAssignHT") ));
+                               list項目リスト.Add(PadNotifier(EPad.LT, cr.Label("strCfgKeyAssignLT"), cr.Explanation("strCfgKeyAssignLT") ));
+                               list項目リスト.Add(PadNotifier(EPad.FT, cr.Label("strCfgKeyAssignFT"), cr.Explanation("strCfgKeyAssignFT") ));
+                               list項目リスト.Add(PadNotifier(EPad.CY, cr.Label("strCfgKeyAssignCY"), cr.Explanation("strCfgKeyAssignCY") ));
+                               list項目リスト.Add(PadNotifier(EPad.RD, cr.Label("strCfgKeyAssignRD"), cr.Explanation("strCfgKeyAssignRD") ));
+                               list項目リスト.Add(PadNotifier(EPad.HP, cr.Label("strCfgKeyAssignHP"), cr.Explanation("strCfgKeyAssignHP") ));
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.eHHGroup);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.eFTGroup);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.eCYGroup);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.eBDGroup);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.bCymbalFree);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.nInputAdjustTimeMs.Drums);
+                       }
+                       else if (eMenu == Eメニュー種別.KeyAssignGuitar)
+                       {
+                               list項目リスト.Add(ReturnToMenu.Guitar);
+                               list項目リスト.Add(PadNotifier(EPad.GtR, cr.Label("strCfgKeyAssignGtR"), cr.Explanation("strCfgKeyAssignGtR") ));
+                               list項目リスト.Add(PadNotifier(EPad.GtG, cr.Label("strCfgKeyAssignGtG"), cr.Explanation("strCfgKeyAssignGtG") ));
+                               list項目リスト.Add(PadNotifier(EPad.GtB, cr.Label("strCfgKeyAssignGtB"), cr.Explanation("strCfgKeyAssignGtB") ));
+                               list項目リスト.Add(PadNotifier(EPad.GtPick, cr.Label("strCfgKeyAssignGtPick"), cr.Explanation("strCfgKeyAssignGtPick") ));
+                               list項目リスト.Add(PadNotifier(EPad.GtWail, cr.Label("strCfgKeyAssignGtWailing"), cr.Explanation("strCfgKeyAssignGtWailing") ));
+                               list項目リスト.Add(PadNotifier(EPad.GtDecide, cr.Label("strCfgKeyAssignGtDecide"), cr.Explanation("strCfgKeyAssignGtDecide") ));
+                               list項目リスト.Add(PadNotifier(EPad.GtCancel, cr.Label("strCfgKeyAssignGtCancel"), cr.Explanation("strCfgKeyAssignGtCancel") ));
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.nInputAdjustTimeMs.Guitar);
+                       }
+                       else if (eMenu == Eメニュー種別.KeyAssignBass)
+                       {
+                               list項目リスト.Add(ReturnToMenu.Bass);
+                               list項目リスト.Add(PadNotifier(EPad.BsR, cr.Label("strCfgKeyAssignBsR"), cr.Explanation("strCfgKeyAssignBsR") ));
+                               list項目リスト.Add(PadNotifier(EPad.BsG, cr.Label("strCfgKeyAssignBsG"), cr.Explanation("strCfgKeyAssignBsG") ));
+                               list項目リスト.Add(PadNotifier(EPad.BsB, cr.Label("strCfgKeyAssignBsB"), cr.Explanation("strCfgKeyAssignBsB") ));
+                               list項目リスト.Add(PadNotifier(EPad.BsPick, cr.Label("strCfgKeyAssignBsPick"), cr.Explanation("strCfgKeyAssignBsPick") ));
+                               list項目リスト.Add(PadNotifier(EPad.BsWail, cr.Label("strCfgKeyAssignBsWailing"), cr.Explanation("strCfgKeyAssignBsWailing") ));
+                               list項目リスト.Add(PadNotifier(EPad.BsDecide, cr.Label("strCfgKeyAssignBsDecide"), cr.Explanation("strCfgKeyAssignBsDecide") ));
+                               list項目リスト.Add(PadNotifier(EPad.BsCancel, cr.Label("strCfgKeyAssignBsCancel"), cr.Explanation("strCfgKeyAssignBsCancel") ));
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.nInputAdjustTimeMs.Bass);
+                       }
+                       else if (eMenu == Eメニュー種別.System)
+                       {
+                               list項目リスト.Add(ReturnToMenu.System);
+                               COptionStringList langlist = new COptionStringList("default");
+                               langlist.Initialize( "strCfgLanguage", cr.LanguageDispList );
+                               langlist.Index = CDTXMania.Instance.Resources.LanguageCodeIndex;
+                               langlist.OnEnterDelegate = () =>
+                               {
+                                       int index = langlist.Index;
+                                       CDTXMania.Instance.ConfigIni.strLanguage.Value = CDTXMania.Instance.Resources.Language = CDTXMania.Instance.Resources.LanguageCodeList[ index ];
+                                        
+                               }; 
+                               list項目リスト.Add( langlist );
+                       
+                               COptionString enumsongs = new COptionString("");
+                               enumsongs.Initialize( "strCfgSysEnumSongs" );
+                               list項目リスト.Add(enumsongs);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.eDark);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.nRisky);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.eActiveInst);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.nPlaySpeed);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.nSleepPerFrameMs);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.nSleepUnfocusMs);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.bForceHighPowerPlan);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.bStageFailed);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.bRandSubBox);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.nPreSoundWeightMs);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.nPreImageWeightMs);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.eDamageLevel);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.bScoreIni);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.nChipVolume);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.nAutoVolume);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.bStoicMode);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.bIsAutoResultCapture);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.bBufferedInput);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.bLog);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.bLoadSoundSpeed);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.bLoadDTXDetail);// #36177 2016.7.30 ikanick
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.bUseBoxDefSkin);
+                               list項目リスト.Add(skins);
+                               list項目リスト.Add(SoundMenu);
+                               list項目リスト.Add(DisplayMenu.System);
+                               list項目リスト.Add(HitRangeMenu);
+                               list項目リスト.Add(KeyAssignMenu.System);
+                               enumsongs.OnEnterDelegate = () =>
+                               {
+                                       if (CDTXMania.Instance.EnumSongs.IsEnumerating)
+                                       {
+                                               // Debug.WriteLine( "バックグラウンドでEnumeratingSongs中だったので、一旦中断します。" );
+                                               CDTXMania.Instance.EnumSongs.Abort();
+                                               CDTXMania.Instance.actEnumSongs.On非活性化();
+                                       }
+
+                                       CDTXMania.Instance.EnumSongs.StartEnumFromDisk();
+                                       CDTXMania.Instance.EnumSongs.ChangeEnumeratePriority(ThreadPriority.Normal);
+                                       CDTXMania.Instance.actEnumSongs.bコマンドでの曲データ取得 = true;
+                                       CDTXMania.Instance.actEnumSongs.On活性化();
+                               };
+                       }
+                       else if ( eMenu == Eメニュー種別.SoundSettings )
+                       {
+                               list項目リスト.Add( ReturnToMenu.System );
+                               list項目リスト.Add( CDTXMania.Instance.ConfigIni.bTimeStretch );
+                               list項目リスト.Add( CDTXMania.Instance.ConfigIni.bWaveAdjust );
+                               list項目リスト.Add( CDTXMania.Instance.ConfigIni.bBGMPlay );
+                               list項目リスト.Add( CDTXMania.Instance.ConfigIni.bAudience );
+                               list項目リスト.Add( CDTXMania.Instance.ConfigIni.nChipVolume );
+                               list項目リスト.Add( CDTXMania.Instance.ConfigIni.nAutoVolume );
+                               list項目リスト.Add( CDTXMania.Instance.ConfigIni.nSoundDeviceType );
+                               list項目リスト.Add( CDTXMania.Instance.ConfigIni.nWASAPIBufferSizeMs );
+                               list項目リスト.Add( CDTXMania.Instance.ConfigIni.bEventDrivenWASAPI );
+                               list項目リスト.Add( CDTXMania.Instance.ConfigIni.strASIODevice );
+                               list項目リスト.Add( CDTXMania.Instance.ConfigIni.bUseOSTimer );
+                               list項目リスト.Add( CDTXMania.Instance.ConfigIni.nMasterVolume );
+                               list項目リスト.Add( CDTXMania.Instance.ConfigIni.nPolyphonicSounds );
+                               list項目リスト.Add( CDTXMania.Instance.ConfigIni.eClickType );
+                               list項目リスト.Add( CDTXMania.Instance.ConfigIni.nClickHighVolume );
+                               list項目リスト.Add( CDTXMania.Instance.ConfigIni.nClickLowVolume );
+                       }
+                       else if ( eMenu == Eメニュー種別.Drums )
+                       {
+                               list項目リスト.Add(ReturnToMenu.Drums);
+                               COptionEnum<EThreeState> AllAuto = new COptionEnum<EThreeState>(EThreeState.X);
+                               AllAuto.Initialize( "strCfgDrAllAuto", typeof(EThreeState));
+                               AllAuto.OnEnterDelegate = () =>
+                               {
+                                       if ( AllAuto.Value == EThreeState.X )
+                                       {
+                                               AllAuto.OnNext();
+                                       }
+                                       CDTXMania.Instance.ConfigIni.bAutoPlay.Set( EPart.Drums, AllAuto );
+                               };
+                               list項目リスト.Add(AllAuto);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.LC);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.HH);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.HHO);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.SD);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.BD);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.HT);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.LT);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.FT);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.CY);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.RD);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.nScrollSpeed.Drums);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.eHitSoundPriorityHH);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.eHitSoundPriorityFT);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.eHitSoundPriorityCY);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.bTight);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.bFillin);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.bDrumsHitSound);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.bEmphasizePlaySound.Drums);
+                               list項目リスト.Add(DisplayMenu.Drums);
+                               list項目リスト.Add(EDrumsMenu.Drums);
+                               list項目リスト.Add(KeyAssignMenu.Drums);
+                       }
+                       else if (eMenu == Eメニュー種別.Guitar)
+                       {
+                               list項目リスト.Add(ReturnToMenu.Guitar);
+                               COptionEnum<EThreeState> AllAuto = new COptionEnum<EThreeState>(EThreeState.X);
+                               AllAuto.Initialize( "strCfgDrAllAuto", typeof(EThreeState));
+                               AllAuto.OnEnterDelegate = () =>
+                               {
+                                       if ( AllAuto.Value == EThreeState.X )
+                                       {
+                                               AllAuto.OnNext();
+                                       }
+                                       CDTXMania.Instance.ConfigIni.bAutoPlay.Set( EPart.Guitar, AllAuto );
+                               };
+                               list項目リスト.Add(AllAuto);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.GtR);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.GtG);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.GtB);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.GtPick);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.GtWail);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.nScrollSpeed.Guitar);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.eRandom.Guitar);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.bLight.Guitar);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.bEmphasizePlaySound.Guitar);
+                               list項目リスト.Add(DisplayMenu.Guitar);
+                               list項目リスト.Add(KeyAssignMenu.Guitar);
+                       }
+                       else if (eMenu == Eメニュー種別.Bass)
+                       {
+                               list項目リスト.Add(ReturnToMenu.Bass);
+                               COptionEnum<EThreeState> AllAuto = new COptionEnum<EThreeState>(EThreeState.X);
+                               AllAuto.Initialize( "strCfgDrAllAuto", typeof(EThreeState));
+                               AllAuto.OnEnterDelegate = () =>
+                               {
+                                       if ( AllAuto.Value == EThreeState.X )
+                                       {
+                                               AllAuto.OnNext();
+                                       }
+                                       CDTXMania.Instance.ConfigIni.bAutoPlay.Set( EPart.Bass, AllAuto );
+                               };
+                               list項目リスト.Add(AllAuto);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.BsR);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.BsG);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.BsB);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.BsPick);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.BsWail);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.nScrollSpeed.Bass);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.eRandom.Bass);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.bLight.Bass);
+                               list項目リスト.Add(CDTXMania.Instance.ConfigIni.bEmphasizePlaySound.Bass);
+                               list項目リスト.Add(DisplayMenu.Bass);
+                               list項目リスト.Add(KeyAssignMenu.Bass);
+                       }
+                       OnListMenuの初期化();
+                       n現在の選択項目 = 0;
+                       eメニュー種別 = eMenu;
+               }
+
+               public void OnNext()
+               {
+                       CDTXMania.Instance.Skin.soundカーソル移動音.t再生する();
+                       if (b要素値にフォーカス中)
+                       {
+                               list項目リスト[n現在の選択項目].OnPrevious();
+                               t要素値を上下に変更中の処理();
+                       }
+                       else
+                       {
+                               n目標のスクロールカウンタ += 100;
+                       }
+               }
+
+               public void OnPrevious()
+               {
+                       CDTXMania.Instance.Skin.soundカーソル移動音.t再生する();
+                       if (b要素値にフォーカス中)
+                       {
+                               list項目リスト[n現在の選択項目].OnNext();
+                               t要素値を上下に変更中の処理();
+                       }
+                       else
+                       {
+                               n目標のスクロールカウンタ -= 100;
+                       }
+               }
+
+               private void t要素値を上下に変更中の処理()
+               {
+                       if (this.list項目リスト[this.n現在の選択項目] == CDTXMania.Instance.ConfigIni.nMasterVolume)
+                       {
+                               // #33700 2014.4.26 yyagi
+                               CDTXMania.Instance.Sound管理.nMasterVolume = CDTXMania.Instance.ConfigIni.nMasterVolume;
+                       }
+               }
+
+               public override void On活性化()
+               {
+                       if (b活性化してない)
+                       {
+                               this.list項目リスト = new List<COptionBase>();
+                               this.eメニュー種別 = Eメニュー種別.Unknown;
+                               this.prvFont = new CPrivateFastFont(CSkin.Path(@"Graphics\fonts\mplus-1p-heavy.ttf"), (int)(18 * Scale.Y));
+                               this.b要素値にフォーカス中 = false;
+                               this.n目標のスクロールカウンタ = 0;
+                               this.n現在のスクロールカウンタ = 0;
+                               this.nスクロール用タイマ値 = -1;
+                               this.ct三角矢印アニメ = new CCounter();
+
+
+                               DisplayMenu = new STDGBSValue<COptionLabel>();
+                               KeyAssignMenu = new STDGBSValue<COptionLabel>();
+                               EDrumsMenu = new STDGBSValue<COptionLabel>();
+                               ReturnToMenu = new STDGBSValue<COptionLabel>();
+
+                               CResources cr = CDTXMania.Instance.Resources;
+                               for ( EPart i = EPart.Drums; i <= EPart.System; ++i )
+                               {
+                                       DisplayMenu[i] = new COptionLabel( "strCfgDisplayOption" );
+                                       KeyAssignMenu[i] = new COptionLabel( "strCfgInputOption" );
+                                       ReturnToMenu[i] = new COptionLabel( "strCfgReturnToMenu" );
+                               }
+
+                               EDrumsMenu[ EPart.Drums ] = new COptionLabel( "strCfgEDrumsOption" );
+                               HitRangeMenu = new COptionLabel( "strCfgHitRangeOption" );
+                               SoundMenu = new COptionLabel( "strCfgSoundOption" );
+
+                               DisplayMenu.Drums.OnEnterDelegate = () =>
+                               {
+                                       t項目リストの設定(Eメニュー種別.DisplayDrums);
+                               };
+                               DisplayMenu.Guitar.OnEnterDelegate = () =>
+                               {
+                                       t項目リストの設定(Eメニュー種別.DisplayGuitar);
+                               };
+                               DisplayMenu.Bass.OnEnterDelegate = () =>
+                               {
+                                       t項目リストの設定(Eメニュー種別.DisplayBass);
+                               };
+                               DisplayMenu.System.OnEnterDelegate = () =>
+                               {
+                                       t項目リストの設定(Eメニュー種別.DisplaySystem);
+                               };
+                               KeyAssignMenu.Drums.OnEnterDelegate = () =>
+                               {
+                                       t項目リストの設定(Eメニュー種別.KeyAssignDrums);
+                               };
+                               KeyAssignMenu.Guitar.OnEnterDelegate = () =>
+                               {
+                                       t項目リストの設定(Eメニュー種別.KeyAssignGuitar);
+                               };
+                               KeyAssignMenu.Bass.OnEnterDelegate = () =>
+                               {
+                                       t項目リストの設定(Eメニュー種別.KeyAssignBass);
+                               };
+                               KeyAssignMenu.System.OnEnterDelegate = () =>
+                               {
+                                       t項目リストの設定(Eメニュー種別.KeyAssignSystem);
+                               };
+
+                               ReturnToMenu.Drums.OnEnterDelegate = () =>
+                               {
+                                       t項目リストの設定(Eメニュー種別.Drums);
+                               };
+                               ReturnToMenu.Guitar.OnEnterDelegate = () =>
+                               {
+                                       t項目リストの設定(Eメニュー種別.Guitar);
+                               };
+                               ReturnToMenu.Bass.OnEnterDelegate = () =>
+                               {
+                                       t項目リストの設定(Eメニュー種別.Bass);
+                               };
+                               ReturnToMenu.System.OnEnterDelegate = () =>
+                               {
+                                       t項目リストの設定(Eメニュー種別.System);
+                               };
+                               EDrumsMenu.Drums.OnEnterDelegate = () =>
+                               {
+                                       t項目リストの設定(Eメニュー種別.EDrumsSettings);
+                               };
+                               HitRangeMenu.OnEnterDelegate = () =>
+                               {
+                                       t項目リストの設定( Eメニュー種別.HitRangeSettings );
+                               };
+                               SoundMenu.OnEnterDelegate = () =>
+                               {
+                                       t項目リストの設定( Eメニュー種別.SoundSettings );
+                               };
+
+                               #region [ スキン選択肢と、現在選択中のスキン(index)の準備 #28195 2012.5.2 yyagi ]
+                               int ns = (CDTXMania.Instance.Skin.strSystemSkinSubfolders == null) ? 0 : CDTXMania.Instance.Skin.strSystemSkinSubfolders.Length;
+                               int nb = (CDTXMania.Instance.Skin.strBoxDefSkinSubfolders == null) ? 0 : CDTXMania.Instance.Skin.strBoxDefSkinSubfolders.Length;
+
+                               skinSubFolders = new string[ns + nb];
+                               skinInitial = CDTXMania.Instance.Skin.GetCurrentSkinSubfolderFullName(true);
+                               int initIdx = 0;
+                               for (int i = 0; i < ns; i++)
+                               {
+                                       skinSubFolders[i] = CDTXMania.Instance.Skin.strSystemSkinSubfolders[i];
+                               }
+                               for (int i = 0; i < nb; i++)
+                               {
+                                       skinSubFolders[ns + i] = CDTXMania.Instance.Skin.strBoxDefSkinSubfolders[i];
+                               }
+                               Array.Sort(skinSubFolders);
+                               skinNames = CSkin.GetSkinName(skinSubFolders);
+                               initIdx = Array.BinarySearch(skinSubFolders, skinInitial);
+                               if (initIdx < 0)
+                               {
+                                       initIdx = 0;
+                               }
+                               skins = new COptionStringList(skinNames[initIdx]);
+                               skins.Initialize("Skin", Properties.Resources.strCfgSysSkin, skinNames);
+
+                               skins.OnEnterDelegate = () =>
+                               {
+                                       CDTXMania.Instance.Skin.SetCurrentSkinSubfolderFullName(skinSubFolders[skins.Index], true);
+                                       CDTXMania.Instance.ConfigIni.strSystemSkinSubfolderPath.Value = skinSubFolders[skins.Index];
+                                       tGenerateSkinSample();
+                               };
+                               #endregion
+
+                               // CONFIG脱出時にこの値から変更されているようなら
+                               // サウンドデバイスを再構築する
+                               this.InitialSystemSoundType = CDTXMania.Instance.ConfigIni.nSoundDeviceType;
+                               this.InitialWASAPIBufferSizeMs = CDTXMania.Instance.ConfigIni.nWASAPIBufferSizeMs;
+                               this.InitialASIODevice = CDTXMania.Instance.ConfigIni.strASIODevice.Index;
+                               this.InitialUseOSTimer = CDTXMania.Instance.ConfigIni.bUseOSTimer;
+                               this.InitialWASAPIEventDriven = CDTXMania.Instance.ConfigIni.bEventDrivenWASAPI;
+
+                               this.InitialForceHighPower = CDTXMania.Instance.ConfigIni.bForceHighPowerPlan;
+
+                               // #27795 2012.3.11 yyagi; System設定の中でDrumsの設定を参照しているため、
+                               this.t項目リストの設定(Eメニュー種別.Bass);
+                               // 活性化の時点でDrumsの設定も入れ込んでおかないと、System設定中に例外発生することがある。
+                               this.t項目リストの設定(Eメニュー種別.Guitar);
+                               this.t項目リストの設定(Eメニュー種別.Drums);
+                               // 順番として、最後にSystemを持ってくること。設定一覧の初期位置がSystemのため。
+                               this.t項目リストの設定(Eメニュー種別.System);
+
+                               base.On活性化();
+                       }
+               }
+
+               public override void On非活性化()
+               {
+                       if (b活性化してる)
+                       {
+                               CDTXMania.Instance.SaveConfig();
+                               this.list項目リスト.Clear();
+                               this.ct三角矢印アニメ = null;
+
+                               OnListMenuの解放();
+                               prvFont.Dispose();
+
+                               base.On非活性化();
+                               #region [ Skin変更 ]
+                               if (CDTXMania.Instance.Skin.GetCurrentSkinSubfolderFullName(true) != this.skinInitial)
+                               {
+                                       CDTXMania.Instance.stageChangeSkin.tChangeSkinMain();   // #28195 2012.6.11 yyagi CONFIG脱出時にSkin更新
+                               }
+                               #endregion
+
+                               // #24820 2013.1.22 yyagi CONFIGでWASAPI/ASIO/DirectSound関連の設定を変更した場合、サウンドデバイスを再構築する。
+                               // #33689 2014.6.17 yyagi CONFIGでSoundTimerTypeの設定を変更した場合も、サウンドデバイスを再構築する。
+                               #region [ サウンドデバイス変更 ]
+                               if (InitialSystemSoundType != CDTXMania.Instance.ConfigIni.nSoundDeviceType ||
+                                               InitialWASAPIBufferSizeMs != CDTXMania.Instance.ConfigIni.nWASAPIBufferSizeMs ||
+                                               InitialASIODevice != CDTXMania.Instance.ConfigIni.strASIODevice.Index ||
+                                               InitialUseOSTimer != CDTXMania.Instance.ConfigIni.bUseOSTimer ||
+                                               InitialWASAPIEventDriven != CDTXMania.Instance.ConfigIni.bEventDrivenWASAPI )
+                               {
+                                       ESoundDeviceType soundDeviceType;
+                                       switch (CDTXMania.Instance.ConfigIni.nSoundDeviceType.Value)
+                                       {
+                                               case ESoundDeviceTypeForConfig.DSound:
+                                                       soundDeviceType = ESoundDeviceType.DirectSound;
+                                                       break;
+                                               case ESoundDeviceTypeForConfig.ASIO:
+                                                       soundDeviceType = ESoundDeviceType.ASIO;
+                                                       break;
+                                               case ESoundDeviceTypeForConfig.WASAPI_Exclusive:
+                                                       soundDeviceType = ESoundDeviceType.ExclusiveWASAPI;
+                                                       break;
+                                               case ESoundDeviceTypeForConfig.WASAPI_Shared:
+                                                       soundDeviceType = ESoundDeviceType.SharedWASAPI;
+                                                       break;
+                                               default:
+                                                       soundDeviceType = ESoundDeviceType.Unknown;
+                                                       break;
+                                       }
+
+                                       CDTXMania.Instance.Sound管理.t初期化(
+                                                       soundDeviceType,
+                                                       CDTXMania.Instance.ConfigIni.nWASAPIBufferSizeMs,
+                                                       CDTXMania.Instance.ConfigIni.bEventDrivenWASAPI,
+                                                       0,
+                                                       CDTXMania.Instance.ConfigIni.strASIODevice.Index,
+                                                       CDTXMania.Instance.ConfigIni.bUseOSTimer);
+                                       CDTXMania.Instance.ShowWindowTitleWithSoundType();
+                               }
+                               #endregion
+
+                               #region [ メトロノーム音 音量設定 ]
+                               CDTXMania.Instance.Skin.soundClickHigh.n音量 = CDTXMania.Instance.ConfigIni.nClickHighVolume;
+                               CDTXMania.Instance.Skin.soundClickLow.n音量 = CDTXMania.Instance.ConfigIni.nClickLowVolume;
+                               #endregion
+
+                               #region [ サウンドのタイムストレッチモード変更 ]
+
+                               FDK.CSound管理.bIsTimeStretch = CDTXMania.Instance.ConfigIni.bUseOSTimer;
+
+                               #endregion
+                               #region [ 電源プラン変更 ]
+                               if ( CDTXMania.Instance.ConfigIni.bForceHighPowerPlan )
+                               {
+                                       CPowerPlan.ChangeHighPerformance();
+                               }
+                               else
+                               {
+                                       CPowerPlan.RestoreCurrentPowerPlan();
+                               }
+                               #endregion
+                       }
+               }
+
+               public override void OnManagedリソースの作成()
+               {
+                       if (b活性化してる)
+                       {
+                               this.tx通常項目行パネル = TextureFactory.tテクスチャの生成Af(CSkin.Path(@"Graphics\ScreenConfig itembox.png"), false);
+                               this.txその他項目行パネル = TextureFactory.tテクスチャの生成Af(CSkin.Path(@"Graphics\ScreenConfig itembox other.png"), false);
+                               this.tx三角矢印 = TextureFactory.tテクスチャの生成(CSkin.Path(@"Graphics\ScreenConfig triangle arrow.png"), false);
+                               // スキン選択時に動的に設定するため、ここでは初期化しない
+                               this.txSkinSample = null;
+                               OnListMenuの初期化();
+                               base.OnManagedリソースの作成();
+                       }
+               }
+
+               public override void OnManagedリソースの解放()
+               {
+                       if (b活性化してる)
+                       {
+                               TextureFactory.tテクスチャの解放(ref this.txSkinSample);
+                               TextureFactory.tテクスチャの解放(ref this.tx通常項目行パネル);
+                               TextureFactory.tテクスチャの解放(ref this.txその他項目行パネル);
+                               TextureFactory.tテクスチャの解放(ref this.tx三角矢印);
+
+                               OnListMenuの解放();
+
+                               base.OnManagedリソースの解放();
+                       }
+               }
+
+               private void OnListMenuの初期化()
+               {
+                       OnListMenuの解放();
+                       this.listMenu = new stMenuItemRight[this.list項目リスト.Count];
+               }
+
+               /// <summary>
+               /// 事前にレンダリングしておいたテクスチャを解放する。
+               /// </summary>
+               private void OnListMenuの解放()
+               {
+                       if (listMenu != null)
+                       {
+                               for (int i = 0; i < listMenu.Length; i++)
+                               {
+                                       TextureFactory.tテクスチャの解放(ref listMenu[i].txParam);
+                                       TextureFactory.tテクスチャの解放(ref listMenu[i].txParamColored);
+                                       TextureFactory.tテクスチャの解放(ref listMenu[i].txMenuItemRight);
+                               }
+                               this.listMenu = null;
+                       }
+               }
+
+               public override int On進行描画()
+               {
+                       throw new InvalidOperationException("t進行描画(bool)のほうを使用してください。");
+               }
+
+               public int t進行描画(bool b項目リスト側にフォーカスがある)
+               {
+                       if (this.b活性化してる)
+                       {
+                               #region [ 初めての進行描画 ]
+                               //-----------------
+                               if (base.b初めての進行描画)
+                               {
+                                       this.nスクロール用タイマ値 = CSound管理.rc演奏用タイマ.n現在時刻;
+                                       this.ct三角矢印アニメ.t開始(0, 9, 50, CDTXMania.Instance.Timer);
+
+                                       base.b初めての進行描画 = false;
+                               }
+                               //-----------------
+                               #endregion
+
+                               this.b項目リスト側にフォーカスがある = b項目リスト側にフォーカスがある;       // 記憶
+
+                               #region [ 項目スクロールの進行 ]
+                               //-----------------
+                               long n現在時刻 = CDTXMania.Instance.Timer.n現在時刻;
+                               if (n現在時刻 < this.nスクロール用タイマ値) this.nスクロール用タイマ値 = n現在時刻;
+
+                               const int INTERVAL = 2; // [ms]
+                               while ((n現在時刻 - this.nスクロール用タイマ値) >= INTERVAL)
+                               {
+                                       int n目標項目までのスクロール量 = Math.Abs((int)(this.n目標のスクロールカウンタ - this.n現在のスクロールカウンタ));
+                                       int n加速度 = 0;
+
+                                       #region [ n加速度の決定;目標まで遠いほど加速する。]
+                                       //-----------------
+                                       if (n目標項目までのスクロール量 <= 100)
+                                       {
+                                               n加速度 = 2;
+                                       }
+                                       else if (n目標項目までのスクロール量 <= 300)
+                                       {
+                                               n加速度 = 3;
+                                       }
+                                       else if (n目標項目までのスクロール量 <= 500)
+                                       {
+                                               n加速度 = 4;
+                                       }
+                                       else
+                                       {
+                                               n加速度 = 8;
+                                       }
+                                       //-----------------
+                                       #endregion
+                                       #region [ this.n現在のスクロールカウンタに n加速度 を加減算。]
+                                       //-----------------
+                                       if (this.n現在のスクロールカウンタ < this.n目標のスクロールカウンタ)
+                                       {
+                                               this.n現在のスクロールカウンタ += n加速度;
+                                               if (this.n現在のスクロールカウンタ > this.n目標のスクロールカウンタ)
+                                               {
+                                                       // 目標を超えたら目標値で停止。
+                                                       this.n現在のスクロールカウンタ = this.n目標のスクロールカウンタ;
+                                               }
+                                       }
+                                       else if (this.n現在のスクロールカウンタ > this.n目標のスクロールカウンタ)
+                                       {
+                                               this.n現在のスクロールカウンタ -= n加速度;
+                                               if (this.n現在のスクロールカウンタ < this.n目標のスクロールカウンタ)
+                                               {
+                                                       // 目標を超えたら目標値で停止。
+                                                       this.n現在のスクロールカウンタ = this.n目標のスクロールカウンタ;
+                                               }
+                                       }
+                                       //-----------------
+                                       #endregion
+                                       #region [ 行超え処理、ならびに目標位置に到達したらスクロールを停止して項目変更通知を発行。]
+                                       //-----------------
+                                       if (this.n現在のスクロールカウンタ >= 100)
+                                       {
+                                               this.n現在の選択項目 = this.t次の項目(this.n現在の選択項目);
+                                               this.n現在のスクロールカウンタ -= 100;
+                                               this.n目標のスクロールカウンタ -= 100;
+                                               if (this.n目標のスクロールカウンタ == 0)
+                                               {
+                                                       CDTXMania.Instance.stageコンフィグ.t項目変更通知();
+                                               }
+                                       }
+                                       else if (this.n現在のスクロールカウンタ <= -100)
+                                       {
+                                               this.n現在の選択項目 = this.t前の項目(this.n現在の選択項目);
+                                               this.n現在のスクロールカウンタ += 100;
+                                               this.n目標のスクロールカウンタ += 100;
+                                               if (this.n目標のスクロールカウンタ == 0)
+                                               {
+                                                       CDTXMania.Instance.stageコンフィグ.t項目変更通知();
+                                               }
+                                       }
+                                       //-----------------
+                                       #endregion
+
+                                       this.nスクロール用タイマ値 += INTERVAL;
+                               }
+                               //-----------------
+                               #endregion
+
+                               #region [ ▲印アニメの進行 ]
+                               if (this.b項目リスト側にフォーカスがある && (this.n目標のスクロールカウンタ == 0))
+                               {
+                                       this.ct三角矢印アニメ.t進行Loop();
+                               }
+                               #endregion
+
+
+                               // 描画
+
+                               // メニューにフォーカスがあるなら、項目リストの中央は頭を出さない。
+                               this.ptパネルの基本座標[4].X = this.b項目リスト側にフォーカスがある ? 276 : 301;
+
+                               #region [ 計11個の項目パネルを描画する。]
+                               //-----------------
+                               int nItem = this.n現在の選択項目;
+                               for (int i = 0; i < 4; i++)
+                               {
+                                       nItem = this.t前の項目(nItem);
+                               }
+
+                               for (int n行番号 = -4; n行番号 < 6; n行番号++)
+                               {
+                                       // n行番号 == 0 がフォーカスされている項目パネル。
+                                       #region [ 今まさに画面外に飛びだそうとしている項目パネルは描画しない。]
+                                       if (((n行番号 == -4) && (this.n現在のスクロールカウンタ > 0)) ||
+                                                       ((n行番号 == +5) && (this.n現在のスクロールカウンタ < 0)))
+                                       {
+                                               nItem = this.t次の項目(nItem);
+                                               continue;
+                                       }
+                                       #endregion
+
+                                       int n移動元の行の基本位置 = n行番号 + 4;
+                                       int n移動先の行の基本位置 = (this.n現在のスクロールカウンタ <= 0) ? ((n移動元の行の基本位置 + 1) % 10) : (((n移動元の行の基本位置 - 1) + 10) % 10);
+                                       int x = this.ptパネルの基本座標[n移動元の行の基本位置].X + ((int)((this.ptパネルの基本座標[n移動先の行の基本位置].X - this.ptパネルの基本座標[n移動元の行の基本位置].X) * (((double)Math.Abs(this.n現在のスクロールカウンタ)) / 100.0)));
+                                       int y = this.ptパネルの基本座標[n移動元の行の基本位置].Y + ((int)((this.ptパネルの基本座標[n移動先の行の基本位置].Y - this.ptパネルの基本座標[n移動元の行の基本位置].Y) * (((double)Math.Abs(this.n現在のスクロールカウンタ)) / 100.0)));
+
+                                       #region [ 現在の行の項目パネル枠を描画。]
+                                       if (this.list項目リスト[nItem].type == EOptionType.Normal)
+                                       {
+                                               if (this.tx通常項目行パネル != null)
+                                               {
+                                                       this.tx通常項目行パネル.t2D描画(CDTXMania.Instance.Device, x * Scale.X, y * Scale.Y);
+                                               }
+                                       }
+                                       else if (this.list項目リスト[nItem].type == EOptionType.Other)
+                                       {
+                                               if (this.txその他項目行パネル != null)
+                                               {
+                                                       this.txその他項目行パネル.t2D描画(CDTXMania.Instance.Device, x * Scale.X, y * Scale.Y);
+                                               }
+                                       }
+                                       #endregion
+
+                                       #region [ 現在の行の項目名を描画。]
+                                       if (listMenu[nItem].txMenuItemRight != null)
+                                       {
+                                               // 自前のキャッシュに含まれているようなら、再レンダリングせずキャッシュを使用
+                                               listMenu[nItem].txMenuItemRight.t2D描画(CDTXMania.Instance.Device, (x + 0x12) * Scale.X, (y + 12) * Scale.Y - 20);
+                                       }
+                                       else
+                                       {
+                                               using (Bitmap bmpItem = prvFont.DrawPrivateFont(this.list項目リスト[nItem].label, Color.White, Color.Black))
+                                               {
+                                                       TextureFactory.tテクスチャの解放(ref listMenu[nItem].txMenuItemRight);
+                                                       listMenu[nItem].txMenuItemRight = TextureFactory.tテクスチャの生成(bmpItem);
+                                               }
+                                       }
+                                       #endregion
+
+                                       #region [ 現在の行の項目の要素を描画。]
+                                       string strParam = this.list項目リスト[nItem].ToString();
+                                       //bool b強調 = false;
+
+                                       #region [ 最初にSkinの選択肢にきたとき(Enterを押す前)に限り、サンプル生成が発生する。 #28195 2012.5.2 yyagi ]
+                                       if (this.list項目リスト[this.n現在の選択項目] == skins)
+                                       {
+                                               if (txSkinSample == null)
+                                               {
+                                                       tGenerateSkinSample();
+                                               }
+                                               if (txSkinSample != null)
+                                               {
+                                                       txSkinSample.t2D描画(CDTXMania.Instance.Device, 56 * Scale.X, 300 * Scale.Y);
+                                               }
+                                       }
+                                       #endregion
+
+                                       #endregion
+                                       int nIndex = this.list項目リスト[nItem].Index;
+                                       bool bColored = list項目リスト[nItem] is COptionInteger && n行番号 == 0 && b要素値にフォーカス中;
+                                       if (listMenu[nItem].nParam != nIndex ||
+                                               (listMenu[nItem].txParam == null) ||
+                                               (bColored && listMenu[nItem].txParamColored == null))
+                                       {
+                                               listMenu[nItem].nParam = nIndex;
+                                               listMenu[nItem].strParam = this.list項目リスト[nItem].ToString();
+                                               using (Bitmap bmpStr = prvFont.DrawPrivateFont(strParam, Color.White, Color.Black))
+                                               {
+                                                       TextureFactory.tテクスチャの解放(ref listMenu[nItem].txParam);
+                                                       listMenu[nItem].txParam = TextureFactory.tテクスチャの生成(bmpStr, false);
+                                                       if (bColored)
+                                                       {
+                                                               using (Bitmap bmpStrColored = prvFont.DrawPrivateFont(strParam, Color.White, Color.Black, Color.Yellow, Color.OrangeRed))
+                                                               {
+                                                                       TextureFactory.tテクスチャの解放(ref listMenu[nItem].txParamColored);
+                                                                       listMenu[nItem].txParamColored = TextureFactory.tテクスチャの生成(bmpStrColored, false);
+                                                               }
+                                                       }
+                                               }
+                                       }
+
+                                       if (bColored)
+                                       {
+                                               listMenu[nItem].txParamColored.t2D描画(CDTXMania.Instance.Device, (x + 210) * Scale.X, (y + 12) * Scale.Y - 20);
+                                       }
+                                       else
+                                       {
+                                               listMenu[nItem].txParam.t2D描画(CDTXMania.Instance.Device, (x + 210) * Scale.X, (y + 12) * Scale.Y - 20);
+                                       }
+                                       nItem = this.t次の項目(nItem);
+                               }
+                               #endregion
+
+                               #region [ 項目リストにフォーカスがあって、かつスクロールが停止しているなら、パネルの上下に▲印を描画する。]
+                               if (this.b項目リスト側にフォーカスがある && (this.n目標のスクロールカウンタ == 0))
+                               {
+                                       int x;
+                                       int y_upper;
+                                       int y_lower;
+
+                                       // 位置決定。
+
+                                       if (this.b要素値にフォーカス中)
+                                       {
+                                               // 要素値の上下あたり。
+                                               x = 528;
+                                               y_upper = 198 - this.ct三角矢印アニメ.n現在の値;
+                                               y_lower = 242 + this.ct三角矢印アニメ.n現在の値;
+                                       }
+                                       else
+                                       {
+                                               // 項目名の上下あたり。
+                                               x = 276;
+                                               y_upper = 186 - this.ct三角矢印アニメ.n現在の値;
+                                               y_lower = 254 + this.ct三角矢印アニメ.n現在の値;
+                                       }
+
+                                       // 描画。
+
+                                       if (this.tx三角矢印 != null)
+                                       {
+                                               this.tx三角矢印.t2D描画(CDTXMania.Instance.Device, x * Scale.X,
+                                                       y_upper * Scale.Y,
+                                                       new Rectangle(0, 0, (int)(32 * Scale.X), (int)(16 * Scale.Y)));
+                                               this.tx三角矢印.t2D描画(CDTXMania.Instance.Device, x * Scale.X,
+                                                       y_lower * Scale.Y,
+                                                       new Rectangle(0, (int)(16 * Scale.Y), (int)(32 * Scale.X), (int)(16 * Scale.Y)));
+                                       }
+                               }
+                               #endregion
+                       }
+                       return 0;
+               }
+
+
+               // その他
+               internal enum Eメニュー種別
+               {
+                       System,
+                       Drums,
+                       Guitar,
+                       Bass,
+                       // #24609 2011.4.12 yyagi: 画面キャプチャキーのアサイン
+                       KeyAssignSystem,
+                       KeyAssignDrums,
+                       KeyAssignGuitar,
+                       KeyAssignBass,
+                       DisplaySystem,
+                       DisplayDrums,
+                       DisplayGuitar,
+                       DisplayBass,
+                       EDrumsSettings,
+                       HitRangeSettings,
+                       SoundSettings,
+                       Unknown
+               }
+
+               private int t前の項目(int nItem)
+               {
+                       if (--nItem < 0)
+                       {
+                               nItem = this.list項目リスト.Count - 1;
+                       }
+                       return nItem;
+               }
+
+               private int t次の項目(int nItem)
+               {
+                       if (++nItem >= this.list項目リスト.Count)
+                       {
+                               nItem = 0;
+                       }
+                       return nItem;
+               }
+       }
+}