2 using System.Collections.Generic;
3 using System.Diagnostics;
6 using System.Threading;
11 using Color = System.Drawing.Color;
12 using Point = System.Drawing.Point;
13 using Rectangle = System.Drawing.Rectangle;
17 internal class CActConfigList : CActivity
19 STDGBSValue<COptionLabel> ReturnToMenu;
20 STDGBSValue<COptionLabel> KeyAssignMenu;
21 STDGBSValue<COptionLabel> DisplayMenu;
22 STDGBSValue<COptionLabel> EDrumsMenu;
23 COptionLabel SoundMenu;
24 COptionLabel HitRangeMenu;
25 COptionStringList skins;
27 bool b項目リスト側にフォーカスがある;
31 // #33689 2014.6.17 yyagi
32 bool InitialUseOSTimer;
33 bool InitialWASAPIEventDriven;
34 ESoundDeviceTypeForConfig InitialSystemSoundType;
35 int InitialWASAPIBufferSizeMs;
36 int InitialASIODevice;
37 bool InitialForceHighPower;
38 List<COptionBase> list項目リスト;
42 Point[] ptパネルの基本座標 = new Point[]
44 new Point(0x12d, 3), new Point(0x12d, 0x35), new Point(0x12d, 0x67),
45 new Point(0x12d, 0x99), new Point(0x114, 0xcb), new Point(0x12d, 0xfd),
46 new Point(0x12d, 0x12f), new Point(0x12d, 0x161), new Point(0x12d, 0x193),
47 new Point(0x12d, 0x1c5)
49 CTextureAf txその他項目行パネル;
51 CTextureAf tx通常項目行パネル;
52 // #28195 2012.5.2 yyagi
53 CTexture txSkinSample;
54 string[] skinSubFolders;
57 CPrivateFastFont prvFont;
58 private struct stMenuItemRight
60 public CTexture txMenuItemRight;
62 public string strParam;
63 public CTexture txParam;
64 public CTexture txParamColored;
66 stMenuItemRight[] listMenu;
69 /// #32059 2013.9.17 yyagi
71 public bool bIsFocusingParameter
79 public bool b現在選択されている項目はReturnToMenuである
83 COptionBase sel = this.list項目リスト[this.n現在の選択項目];
85 for (EPart i = EPart.Drums; i <= EPart.System; ++i)
87 if (sel == ReturnToMenu[i])
96 public bool b楽器またはシステム用メニューである
100 return eメニュー種別 == Eメニュー種別.Bass || eメニュー種別 == Eメニュー種別.Drums || eメニュー種別 == Eメニュー種別.Guitar || eメニュー種別 == Eメニュー種別.System;
104 public COptionBase ib現在の選択項目
108 return this.list項目リスト[this.n現在の選択項目];
119 if (this.b要素値にフォーカス中)
121 // #32059 2013.9.17 add yyagi
122 this.b要素値にフォーカス中 = false;
125 if (this.eメニュー種別 == Eメニュー種別.KeyAssignSystem)
127 t項目リストの設定(Eメニュー種別.System);
129 else if (this.eメニュー種別 == Eメニュー種別.KeyAssignDrums)
131 t項目リストの設定(Eメニュー種別.Drums);
133 else if (this.eメニュー種別 == Eメニュー種別.KeyAssignGuitar)
135 t項目リストの設定(Eメニュー種別.Guitar);
137 else if (this.eメニュー種別 == Eメニュー種別.KeyAssignBass)
139 t項目リストの設定(Eメニュー種別.Bass);
141 if (this.eメニュー種別 == Eメニュー種別.DisplaySystem)
143 t項目リストの設定(Eメニュー種別.System);
145 else if (this.eメニュー種別 == Eメニュー種別.DisplayDrums)
147 t項目リストの設定(Eメニュー種別.Drums);
149 else if (this.eメニュー種別 == Eメニュー種別.DisplayGuitar)
151 t項目リストの設定(Eメニュー種別.Guitar);
153 else if (this.eメニュー種別 == Eメニュー種別.DisplayBass)
155 t項目リストの設定(Eメニュー種別.Bass);
157 else if (this.eメニュー種別 == Eメニュー種別.EDrumsSettings)
159 t項目リストの設定(Eメニュー種別.Drums);
161 else if (this.eメニュー種別 == Eメニュー種別.HitRangeSettings)
163 t項目リストの設定(Eメニュー種別.System);
165 else if ( this.eメニュー種別 == Eメニュー種別.SoundSettings)
167 t項目リストの設定(Eメニュー種別.System);
171 public bool tEnter押下()
174 CDTXMania.Instance.Skin.sound決定音.t再生する();
176 if (this.b要素値にフォーカス中)
178 this.b要素値にフォーカス中 = false;
180 else if (this.list項目リスト[this.n現在の選択項目] is COptionInteger)
182 this.b要素値にフォーカス中 = true;
184 else if (this.list項目リスト[this.n現在の選択項目] is IOptionList || this.list項目リスト[this.n現在の選択項目] is COptionBool)
186 this.list項目リスト[this.n現在の選択項目].OnNext();
189 // #27029 2012.1.5 from
191 CDTXMania.Instance.ConfigIni.eBDGroup == EBDGroup.Group &&
193 (this.list項目リスト[this.n現在の選択項目] == CDTXMania.Instance.ConfigIni.eHHGroup ||
194 this.list項目リスト[this.n現在の選択項目] == CDTXMania.Instance.ConfigIni.eHitSoundPriorityHH)))
200 if (b現在選択されている項目はReturnToMenuである && b楽器またはシステム用メニューである)
204 this.list項目リスト[this.n現在の選択項目].OnEnter();
209 private void tGenerateSkinSample()
211 string path = skinSubFolders[skins.Index];
212 path = System.IO.Path.Combine(path, @"Graphics\ScreenTitle background.jpg");
213 using (Bitmap bmSrc = new Bitmap(path))
215 using (Bitmap bmDest = new Bitmap(bmSrc.Width / 4, bmSrc.Height / 4))
217 using (Graphics g = Graphics.FromImage(bmDest))
219 g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
220 g.DrawImage(bmSrc, new Rectangle(0, 0, bmSrc.Width / 4, bmSrc.Height / 4),
221 0, 0, bmSrc.Width, bmSrc.Height, GraphicsUnit.Pixel);
222 TextureFactory.tテクスチャの解放(ref txSkinSample);
223 txSkinSample = TextureFactory.tテクスチャの生成(bmDest, false);
229 // #region [ 項目リストの設定 ( Exit, KeyAssignSystem/Drums/Guitar/Bass) ]
230 public void t項目リストの設定_Exit()
232 CDTXMania.Instance.SaveConfig();
233 this.eメニュー種別 = Eメニュー種別.Unknown;
236 public void t項目リストの設定(Eメニュー種別 eMenu)
238 this.list項目リスト.Clear();
240 Func<EPad, string, string, COptionString> PadNotifier = (pad, lbl, expl) =>
242 COptionString opt = new COptionString("");
243 opt.Initialize(lbl, expl);
244 opt.OnEnterDelegate = () =>
246 CDTXMania.Instance.stageコンフィグ.tパッド選択通知(pad);
251 CResources cr = CDTXMania.Instance.Resources;
253 if (eMenu == Eメニュー種別.DisplaySystem)
255 list項目リスト.Add(ReturnToMenu.System);
256 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bFullScreen);
257 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bBGA);
258 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAVI);
259 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bFullAVI);
260 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bVSyncWait);
261 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdDebugX.Both);
262 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdDebugY.Both);
263 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdDebugX.DrOnly);
264 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdDebugY.DrOnly);
265 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdDebugX.GBOnly);
266 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdDebugY.GBOnly);
267 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdMovieX.Both);
268 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdMovieY.Both);
269 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdMovieX.DrOnly);
270 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdMovieY.DrOnly);
271 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdMovieX.GBOnly);
272 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdMovieY.GBOnly);
273 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nBGAlpha);
274 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nShowLagType);
275 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eJudgePriority);
276 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bDebugInfo);
278 else if (eMenu == Eメニュー種別.DisplayDrums)
280 list項目リスト.Add(ReturnToMenu.Drums);
281 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdInstX.Drums.Both);
282 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdInstX.Drums.DrOnly);
283 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdComboX.Drums.Both);
284 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdComboX.Drums.DrOnly);
285 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdJudgeLineY.Drums);
286 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdJudgeY.Drums);
287 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.LC);
288 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.HH);
289 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.SD);
290 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.BD);
291 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.HT);
292 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.LT);
293 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.FT);
294 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.CY);
295 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eSudHidInv.Drums);
296 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bReverse.Drums);
297 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bDisplayCombo.Drums); // 112追加
298 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nMinComboDisp.Drums);
299 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bDisplayJudge.Drums); // 112追加
300 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bGraph.Drums);
302 else if (eMenu == Eメニュー種別.DisplayGuitar)
304 list項目リスト.Add(ReturnToMenu.Guitar);
305 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdInstX.Guitar.Both);
306 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdInstX.Guitar.GBOnly);
307 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdComboX.Guitar.Both);
308 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdComboX.Guitar.GBOnly);
309 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdJudgeLineY.Guitar);
310 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdJudgeY.Guitar);
311 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.GtR);
312 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.GtG);
313 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.GtB);
314 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eSudHidInv.Guitar);
315 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bReverse.Guitar);
316 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bDisplayCombo.Guitar); // 112追加
317 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nMinComboDisp.Guitar);
318 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bDisplayJudge.Guitar); // 112追加
319 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bGraph.Guitar);
321 else if (eMenu == Eメニュー種別.DisplayBass)
323 list項目リスト.Add(ReturnToMenu.Bass);
324 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdInstX.Bass.Both);
325 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdInstX.Bass.GBOnly);
326 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdComboX.Bass.Both);
327 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdComboX.Bass.GBOnly);
328 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdJudgeLineY.Bass);
329 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdJudgeY.Bass);
330 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.BsR);
331 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.BsG);
332 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.BsB);
333 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eSudHidInv.Bass);
334 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bReverse.Bass);
335 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bDisplayCombo.Bass); // 112追加
336 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nMinComboDisp.Bass);
337 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bDisplayJudge.Bass); // 112追加
338 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bGraph.Bass);
340 else if (eMenu == Eメニュー種別.EDrumsSettings)
342 list項目リスト.Add(ReturnToMenu.Drums);
343 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nVelocityMin.LC);
344 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nVelocityMin.HH);
345 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nVelocityMin.SD);
346 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nVelocityMin.BD);
347 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nVelocityMin.HT);
348 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nVelocityMin.LT);
349 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nVelocityMin.FT);
350 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nVelocityMin.CY);
351 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nVelocityMin.RD);
353 else if (eMenu == Eメニュー種別.HitRangeSettings)
355 list項目リスト.Add(ReturnToMenu.System);
356 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nHitRange.Perfect);
357 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nHitRange.Great);
358 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nHitRange.Good);
359 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nHitRange.Poor);
361 else if (eMenu == Eメニュー種別.KeyAssignSystem)
363 list項目リスト.Add(ReturnToMenu.System);
364 list項目リスト.Add(PadNotifier(EPad.Capture, cr.Label("strCfgKeyAssignCapture"), cr.Explanation("strCfgKeyAssignCapture") ));
366 else if (eMenu == Eメニュー種別.KeyAssignDrums)
368 list項目リスト.Add(ReturnToMenu.Drums);
369 list項目リスト.Add(PadNotifier(EPad.LC, cr.Label("strCfgKeyAssignLC"), cr.Explanation("strCfgKeyAssignLC") ));
370 list項目リスト.Add(PadNotifier(EPad.HH, cr.Label("strCfgKeyAssignHH"), cr.Explanation("strCfgKeyAssignHH") ));
371 list項目リスト.Add(PadNotifier(EPad.HHO,cr.Label("strCfgKeyAssignHHO"), cr.Explanation("strCfgKeyAssignHHO") ));
372 list項目リスト.Add(PadNotifier(EPad.SD, cr.Label("strCfgKeyAssignSD"), cr.Explanation("strCfgKeyAssignSD") ));
373 list項目リスト.Add(PadNotifier(EPad.BD, cr.Label("strCfgKeyAssignBD"), cr.Explanation("strCfgKeyAssignBD") ));
374 list項目リスト.Add(PadNotifier(EPad.HT, cr.Label("strCfgKeyAssignHT"), cr.Explanation("strCfgKeyAssignHT") ));
375 list項目リスト.Add(PadNotifier(EPad.LT, cr.Label("strCfgKeyAssignLT"), cr.Explanation("strCfgKeyAssignLT") ));
376 list項目リスト.Add(PadNotifier(EPad.FT, cr.Label("strCfgKeyAssignFT"), cr.Explanation("strCfgKeyAssignFT") ));
377 list項目リスト.Add(PadNotifier(EPad.CY, cr.Label("strCfgKeyAssignCY"), cr.Explanation("strCfgKeyAssignCY") ));
378 list項目リスト.Add(PadNotifier(EPad.RD, cr.Label("strCfgKeyAssignRD"), cr.Explanation("strCfgKeyAssignRD") ));
379 list項目リスト.Add(PadNotifier(EPad.HP, cr.Label("strCfgKeyAssignHP"), cr.Explanation("strCfgKeyAssignHP") ));
380 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eHHGroup);
381 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eFTGroup);
382 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eCYGroup);
383 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eBDGroup);
384 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bCymbalFree);
385 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nInputAdjustTimeMs.Drums);
387 else if (eMenu == Eメニュー種別.KeyAssignGuitar)
389 list項目リスト.Add(ReturnToMenu.Guitar);
390 list項目リスト.Add(PadNotifier(EPad.GtR, cr.Label("strCfgKeyAssignGtR"), cr.Explanation("strCfgKeyAssignGtR") ));
391 list項目リスト.Add(PadNotifier(EPad.GtG, cr.Label("strCfgKeyAssignGtG"), cr.Explanation("strCfgKeyAssignGtG") ));
392 list項目リスト.Add(PadNotifier(EPad.GtB, cr.Label("strCfgKeyAssignGtB"), cr.Explanation("strCfgKeyAssignGtB") ));
393 list項目リスト.Add(PadNotifier(EPad.GtPick, cr.Label("strCfgKeyAssignGtPick"), cr.Explanation("strCfgKeyAssignGtPick") ));
394 list項目リスト.Add(PadNotifier(EPad.GtWail, cr.Label("strCfgKeyAssignGtWailing"), cr.Explanation("strCfgKeyAssignGtWailing") ));
395 list項目リスト.Add(PadNotifier(EPad.GtDecide, cr.Label("strCfgKeyAssignGtDecide"), cr.Explanation("strCfgKeyAssignGtDecide") ));
396 list項目リスト.Add(PadNotifier(EPad.GtCancel, cr.Label("strCfgKeyAssignGtCancel"), cr.Explanation("strCfgKeyAssignGtCancel") ));
397 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nInputAdjustTimeMs.Guitar);
399 else if (eMenu == Eメニュー種別.KeyAssignBass)
401 list項目リスト.Add(ReturnToMenu.Bass);
402 list項目リスト.Add(PadNotifier(EPad.BsR, cr.Label("strCfgKeyAssignBsR"), cr.Explanation("strCfgKeyAssignBsR") ));
403 list項目リスト.Add(PadNotifier(EPad.BsG, cr.Label("strCfgKeyAssignBsG"), cr.Explanation("strCfgKeyAssignBsG") ));
404 list項目リスト.Add(PadNotifier(EPad.BsB, cr.Label("strCfgKeyAssignBsB"), cr.Explanation("strCfgKeyAssignBsB") ));
405 list項目リスト.Add(PadNotifier(EPad.BsPick, cr.Label("strCfgKeyAssignBsPick"), cr.Explanation("strCfgKeyAssignBsPick") ));
406 list項目リスト.Add(PadNotifier(EPad.BsWail, cr.Label("strCfgKeyAssignBsWailing"), cr.Explanation("strCfgKeyAssignBsWailing") ));
407 list項目リスト.Add(PadNotifier(EPad.BsDecide, cr.Label("strCfgKeyAssignBsDecide"), cr.Explanation("strCfgKeyAssignBsDecide") ));
408 list項目リスト.Add(PadNotifier(EPad.BsCancel, cr.Label("strCfgKeyAssignBsCancel"), cr.Explanation("strCfgKeyAssignBsCancel") ));
409 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nInputAdjustTimeMs.Bass);
411 else if (eMenu == Eメニュー種別.System)
413 list項目リスト.Add(ReturnToMenu.System);
414 COptionStringList langlist = new COptionStringList("default");
415 langlist.Initialize( "strCfgLanguage", cr.LanguageDispList );
416 langlist.Index = CDTXMania.Instance.Resources.LanguageCodeIndex;
417 langlist.OnEnterDelegate = () =>
419 int index = langlist.Index;
420 CDTXMania.Instance.ConfigIni.strLanguage.Value = CDTXMania.Instance.Resources.Language = CDTXMania.Instance.Resources.LanguageCodeList[ index ];
423 list項目リスト.Add( langlist );
425 COptionString enumsongs = new COptionString("");
426 enumsongs.Initialize( "strCfgSysEnumSongs" );
427 list項目リスト.Add(enumsongs);
428 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eDark);
429 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nRisky);
430 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eActiveInst);
431 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nPlaySpeed);
432 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nSleepPerFrameMs);
433 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nSleepUnfocusMs);
434 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bForceHighPowerPlan);
435 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bStageFailed);
436 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bRandSubBox);
437 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nPreSoundWeightMs);
438 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nPreImageWeightMs);
439 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eDamageLevel);
440 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bScoreIni);
441 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nChipVolume);
442 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nAutoVolume);
443 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bStoicMode);
444 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bIsAutoResultCapture);
445 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bBufferedInput);
446 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bLog);
447 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bLoadSoundSpeed);
448 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bLoadDTXDetail);// #36177 2016.7.30 ikanick
449 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bUseBoxDefSkin);
450 list項目リスト.Add(skins);
451 list項目リスト.Add(SoundMenu);
452 list項目リスト.Add(DisplayMenu.System);
453 list項目リスト.Add(HitRangeMenu);
454 list項目リスト.Add(KeyAssignMenu.System);
455 enumsongs.OnEnterDelegate = () =>
457 if (CDTXMania.Instance.EnumSongs.IsEnumerating)
459 // Debug.WriteLine( "バックグラウンドでEnumeratingSongs中だったので、一旦中断します。" );
460 CDTXMania.Instance.EnumSongs.Abort();
461 CDTXMania.Instance.actEnumSongs.On非活性化();
464 CDTXMania.Instance.EnumSongs.StartEnumFromDisk();
465 CDTXMania.Instance.EnumSongs.ChangeEnumeratePriority(ThreadPriority.Normal);
466 CDTXMania.Instance.actEnumSongs.bコマンドでの曲データ取得 = true;
467 CDTXMania.Instance.actEnumSongs.On活性化();
470 else if ( eMenu == Eメニュー種別.SoundSettings )
472 list項目リスト.Add( ReturnToMenu.System );
473 list項目リスト.Add( CDTXMania.Instance.ConfigIni.bTimeStretch );
474 list項目リスト.Add( CDTXMania.Instance.ConfigIni.bWaveAdjust );
475 list項目リスト.Add( CDTXMania.Instance.ConfigIni.bBGMPlay );
476 list項目リスト.Add( CDTXMania.Instance.ConfigIni.bAudience );
477 list項目リスト.Add( CDTXMania.Instance.ConfigIni.nChipVolume );
478 list項目リスト.Add( CDTXMania.Instance.ConfigIni.nAutoVolume );
479 list項目リスト.Add( CDTXMania.Instance.ConfigIni.nSoundDeviceType );
480 list項目リスト.Add( CDTXMania.Instance.ConfigIni.nWASAPIBufferSizeMs );
481 list項目リスト.Add( CDTXMania.Instance.ConfigIni.bEventDrivenWASAPI );
482 list項目リスト.Add( CDTXMania.Instance.ConfigIni.strASIODevice );
483 list項目リスト.Add( CDTXMania.Instance.ConfigIni.bUseOSTimer );
484 list項目リスト.Add( CDTXMania.Instance.ConfigIni.nMasterVolume );
485 list項目リスト.Add( CDTXMania.Instance.ConfigIni.nPolyphonicSounds );
486 list項目リスト.Add( CDTXMania.Instance.ConfigIni.eClickType );
487 list項目リスト.Add( CDTXMania.Instance.ConfigIni.nClickHighVolume );
488 list項目リスト.Add( CDTXMania.Instance.ConfigIni.nClickLowVolume );
490 else if ( eMenu == Eメニュー種別.Drums )
492 list項目リスト.Add(ReturnToMenu.Drums);
493 COptionEnum<EThreeState> AllAuto = new COptionEnum<EThreeState>(EThreeState.X);
494 AllAuto.Initialize( "strCfgDrAllAuto", typeof(EThreeState));
495 AllAuto.OnEnterDelegate = () =>
497 if ( AllAuto.Value == EThreeState.X )
501 CDTXMania.Instance.ConfigIni.bAutoPlay.Set( EPart.Drums, AllAuto );
503 list項目リスト.Add(AllAuto);
504 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.LC);
505 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.HH);
506 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.HHO);
507 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.SD);
508 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.BD);
509 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.HT);
510 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.LT);
511 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.FT);
512 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.CY);
513 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.RD);
514 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nScrollSpeed.Drums);
515 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eHitSoundPriorityHH);
516 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eHitSoundPriorityFT);
517 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eHitSoundPriorityCY);
518 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bTight);
519 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bFillin);
520 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bDrumsHitSound);
521 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bEmphasizePlaySound.Drums);
522 list項目リスト.Add(DisplayMenu.Drums);
523 list項目リスト.Add(EDrumsMenu.Drums);
524 list項目リスト.Add(KeyAssignMenu.Drums);
526 else if (eMenu == Eメニュー種別.Guitar)
528 list項目リスト.Add(ReturnToMenu.Guitar);
529 COptionEnum<EThreeState> AllAuto = new COptionEnum<EThreeState>(EThreeState.X);
530 AllAuto.Initialize( "strCfgDrAllAuto", typeof(EThreeState));
531 AllAuto.OnEnterDelegate = () =>
533 if ( AllAuto.Value == EThreeState.X )
537 CDTXMania.Instance.ConfigIni.bAutoPlay.Set( EPart.Guitar, AllAuto );
539 list項目リスト.Add(AllAuto);
540 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.GtR);
541 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.GtG);
542 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.GtB);
543 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.GtPick);
544 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.GtWail);
545 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nScrollSpeed.Guitar);
546 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eRandom.Guitar);
547 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bLight.Guitar);
548 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bEmphasizePlaySound.Guitar);
549 list項目リスト.Add(DisplayMenu.Guitar);
550 list項目リスト.Add(KeyAssignMenu.Guitar);
552 else if (eMenu == Eメニュー種別.Bass)
554 list項目リスト.Add(ReturnToMenu.Bass);
555 COptionEnum<EThreeState> AllAuto = new COptionEnum<EThreeState>(EThreeState.X);
556 AllAuto.Initialize( "strCfgDrAllAuto", typeof(EThreeState));
557 AllAuto.OnEnterDelegate = () =>
559 if ( AllAuto.Value == EThreeState.X )
563 CDTXMania.Instance.ConfigIni.bAutoPlay.Set( EPart.Bass, AllAuto );
565 list項目リスト.Add(AllAuto);
566 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.BsR);
567 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.BsG);
568 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.BsB);
569 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.BsPick);
570 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.BsWail);
571 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nScrollSpeed.Bass);
572 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eRandom.Bass);
573 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bLight.Bass);
574 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bEmphasizePlaySound.Bass);
575 list項目リスト.Add(DisplayMenu.Bass);
576 list項目リスト.Add(KeyAssignMenu.Bass);
585 CDTXMania.Instance.Skin.soundカーソル移動音.t再生する();
588 list項目リスト[n現在の選択項目].OnPrevious();
593 n目標のスクロールカウンタ += 100;
597 public void OnPrevious()
599 CDTXMania.Instance.Skin.soundカーソル移動音.t再生する();
602 list項目リスト[n現在の選択項目].OnNext();
607 n目標のスクロールカウンタ -= 100;
611 private void t要素値を上下に変更中の処理()
613 if (this.list項目リスト[this.n現在の選択項目] == CDTXMania.Instance.ConfigIni.nMasterVolume)
615 // #33700 2014.4.26 yyagi
616 CDTXMania.Instance.Sound管理.nMasterVolume = CDTXMania.Instance.ConfigIni.nMasterVolume;
620 public override void On活性化()
624 this.list項目リスト = new List<COptionBase>();
625 this.eメニュー種別 = Eメニュー種別.Unknown;
627 CResources cr = CDTXMania.Instance.Resources;
628 string fontname = cr.Explanation("strCfgConfigurationItemsFontFileName");
629 string path = Path.Combine(@"Graphics\fonts", fontname);
630 this.prvFont = new CPrivateFastFont(CSkin.Path(path), (int)(18 * Scale.Y));
631 this.b要素値にフォーカス中 = false;
632 this.n目標のスクロールカウンタ = 0;
633 this.n現在のスクロールカウンタ = 0;
634 this.nスクロール用タイマ値 = -1;
635 this.ct三角矢印アニメ = new CCounter();
638 DisplayMenu = new STDGBSValue<COptionLabel>();
639 KeyAssignMenu = new STDGBSValue<COptionLabel>();
640 EDrumsMenu = new STDGBSValue<COptionLabel>();
641 ReturnToMenu = new STDGBSValue<COptionLabel>();
643 //CResources cr = CDTXMania.Instance.Resources;
644 for ( EPart i = EPart.Drums; i <= EPart.System; ++i )
646 DisplayMenu[i] = new COptionLabel( "strCfgDisplayOption" );
647 KeyAssignMenu[i] = new COptionLabel( "strCfgInputOption" );
648 ReturnToMenu[i] = new COptionLabel( "strCfgReturnToMenu" );
651 EDrumsMenu[ EPart.Drums ] = new COptionLabel( "strCfgEDrumsOption" );
652 HitRangeMenu = new COptionLabel( "strCfgHitRangeOption" );
653 SoundMenu = new COptionLabel( "strCfgSoundOption" );
655 DisplayMenu.Drums.OnEnterDelegate = () =>
657 t項目リストの設定(Eメニュー種別.DisplayDrums);
659 DisplayMenu.Guitar.OnEnterDelegate = () =>
661 t項目リストの設定(Eメニュー種別.DisplayGuitar);
663 DisplayMenu.Bass.OnEnterDelegate = () =>
665 t項目リストの設定(Eメニュー種別.DisplayBass);
667 DisplayMenu.System.OnEnterDelegate = () =>
669 t項目リストの設定(Eメニュー種別.DisplaySystem);
671 KeyAssignMenu.Drums.OnEnterDelegate = () =>
673 t項目リストの設定(Eメニュー種別.KeyAssignDrums);
675 KeyAssignMenu.Guitar.OnEnterDelegate = () =>
677 t項目リストの設定(Eメニュー種別.KeyAssignGuitar);
679 KeyAssignMenu.Bass.OnEnterDelegate = () =>
681 t項目リストの設定(Eメニュー種別.KeyAssignBass);
683 KeyAssignMenu.System.OnEnterDelegate = () =>
685 t項目リストの設定(Eメニュー種別.KeyAssignSystem);
688 ReturnToMenu.Drums.OnEnterDelegate = () =>
690 t項目リストの設定(Eメニュー種別.Drums);
692 ReturnToMenu.Guitar.OnEnterDelegate = () =>
694 t項目リストの設定(Eメニュー種別.Guitar);
696 ReturnToMenu.Bass.OnEnterDelegate = () =>
698 t項目リストの設定(Eメニュー種別.Bass);
700 ReturnToMenu.System.OnEnterDelegate = () =>
702 t項目リストの設定(Eメニュー種別.System);
704 EDrumsMenu.Drums.OnEnterDelegate = () =>
706 t項目リストの設定(Eメニュー種別.EDrumsSettings);
708 HitRangeMenu.OnEnterDelegate = () =>
710 t項目リストの設定( Eメニュー種別.HitRangeSettings );
712 SoundMenu.OnEnterDelegate = () =>
714 t項目リストの設定( Eメニュー種別.SoundSettings );
717 #region [ スキン選択肢と、現在選択中のスキン(index)の準備 #28195 2012.5.2 yyagi ]
718 int ns = (CDTXMania.Instance.Skin.strSystemSkinSubfolders == null) ? 0 : CDTXMania.Instance.Skin.strSystemSkinSubfolders.Length;
719 int nb = (CDTXMania.Instance.Skin.strBoxDefSkinSubfolders == null) ? 0 : CDTXMania.Instance.Skin.strBoxDefSkinSubfolders.Length;
721 skinSubFolders = new string[ns + nb];
722 skinInitial = CDTXMania.Instance.Skin.GetCurrentSkinSubfolderFullName(true);
724 for (int i = 0; i < ns; i++)
726 skinSubFolders[i] = CDTXMania.Instance.Skin.strSystemSkinSubfolders[i];
728 for (int i = 0; i < nb; i++)
730 skinSubFolders[ns + i] = CDTXMania.Instance.Skin.strBoxDefSkinSubfolders[i];
732 Array.Sort(skinSubFolders);
733 skinNames = CSkin.GetSkinName(skinSubFolders);
734 initIdx = Array.BinarySearch(skinSubFolders, skinInitial);
739 skins = new COptionStringList(skinNames[initIdx]);
740 skins.Initialize("Skin", Properties.Resources.strCfgSysSkin, skinNames);
742 skins.OnEnterDelegate = () =>
744 CDTXMania.Instance.Skin.SetCurrentSkinSubfolderFullName(skinSubFolders[skins.Index], true);
745 CDTXMania.Instance.ConfigIni.strSystemSkinSubfolderPath.Value = skinSubFolders[skins.Index];
746 tGenerateSkinSample();
750 // CONFIG脱出時にこの値から変更されているようなら
752 this.InitialSystemSoundType = CDTXMania.Instance.ConfigIni.nSoundDeviceType;
753 this.InitialWASAPIBufferSizeMs = CDTXMania.Instance.ConfigIni.nWASAPIBufferSizeMs;
754 this.InitialASIODevice = CDTXMania.Instance.ConfigIni.strASIODevice.Index;
755 this.InitialUseOSTimer = CDTXMania.Instance.ConfigIni.bUseOSTimer;
756 this.InitialWASAPIEventDriven = CDTXMania.Instance.ConfigIni.bEventDrivenWASAPI;
758 this.InitialForceHighPower = CDTXMania.Instance.ConfigIni.bForceHighPowerPlan;
760 // #27795 2012.3.11 yyagi; System設定の中でDrumsの設定を参照しているため、
761 this.t項目リストの設定(Eメニュー種別.Bass);
762 // 活性化の時点でDrumsの設定も入れ込んでおかないと、System設定中に例外発生することがある。
763 this.t項目リストの設定(Eメニュー種別.Guitar);
764 this.t項目リストの設定(Eメニュー種別.Drums);
765 // 順番として、最後にSystemを持ってくること。設定一覧の初期位置がSystemのため。
766 this.t項目リストの設定(Eメニュー種別.System);
772 public override void On非活性化()
776 CDTXMania.Instance.SaveConfig();
777 this.list項目リスト.Clear();
778 this.ct三角矢印アニメ = null;
785 if (CDTXMania.Instance.Skin.GetCurrentSkinSubfolderFullName(true) != this.skinInitial)
787 CDTXMania.Instance.stageChangeSkin.tChangeSkinMain(); // #28195 2012.6.11 yyagi CONFIG脱出時にSkin更新
791 // #24820 2013.1.22 yyagi CONFIGでWASAPI/ASIO/DirectSound関連の設定を変更した場合、サウンドデバイスを再構築する。
792 // #33689 2014.6.17 yyagi CONFIGでSoundTimerTypeの設定を変更した場合も、サウンドデバイスを再構築する。
793 #region [ サウンドデバイス変更 ]
794 if (InitialSystemSoundType != CDTXMania.Instance.ConfigIni.nSoundDeviceType ||
795 InitialWASAPIBufferSizeMs != CDTXMania.Instance.ConfigIni.nWASAPIBufferSizeMs ||
796 InitialASIODevice != CDTXMania.Instance.ConfigIni.strASIODevice.Index ||
797 InitialUseOSTimer != CDTXMania.Instance.ConfigIni.bUseOSTimer ||
798 InitialWASAPIEventDriven != CDTXMania.Instance.ConfigIni.bEventDrivenWASAPI )
800 ESoundDeviceType soundDeviceType;
801 switch (CDTXMania.Instance.ConfigIni.nSoundDeviceType.Value)
803 case ESoundDeviceTypeForConfig.DSound:
804 soundDeviceType = ESoundDeviceType.DirectSound;
806 case ESoundDeviceTypeForConfig.ASIO:
807 soundDeviceType = ESoundDeviceType.ASIO;
809 case ESoundDeviceTypeForConfig.WASAPI_Exclusive:
810 soundDeviceType = ESoundDeviceType.ExclusiveWASAPI;
812 case ESoundDeviceTypeForConfig.WASAPI_Shared:
813 soundDeviceType = ESoundDeviceType.SharedWASAPI;
816 soundDeviceType = ESoundDeviceType.Unknown;
820 CDTXMania.Instance.Sound管理.t初期化(
822 CDTXMania.Instance.ConfigIni.nWASAPIBufferSizeMs,
823 CDTXMania.Instance.ConfigIni.bEventDrivenWASAPI,
825 CDTXMania.Instance.ConfigIni.strASIODevice.Index,
826 CDTXMania.Instance.ConfigIni.bUseOSTimer);
827 CDTXMania.Instance.ShowWindowTitleWithSoundType();
831 #region [ メトロノーム音 音量設定 ]
832 CDTXMania.Instance.Skin.soundClickHigh.n音量 = CDTXMania.Instance.ConfigIni.nClickHighVolume;
833 CDTXMania.Instance.Skin.soundClickLow.n音量 = CDTXMania.Instance.ConfigIni.nClickLowVolume;
836 #region [ サウンドのタイムストレッチモード変更 ]
838 FDK.CSound管理.bIsTimeStretch = CDTXMania.Instance.ConfigIni.bUseOSTimer;
842 if ( CDTXMania.Instance.ConfigIni.bForceHighPowerPlan )
844 CPowerPlan.ChangeHighPerformance();
848 // HighPower=OFFを維持したとき、またはONからOFFにしたときは、
850 // 電源プランの復元は、アプリ終了時に行う。
851 // CPowerPlan.RestoreCurrentPowerPlan();
857 public override void OnManagedリソースの作成()
861 this.tx通常項目行パネル = TextureFactory.tテクスチャの生成Af(CSkin.Path(@"Graphics\ScreenConfig itembox.png"), false);
862 this.txその他項目行パネル = TextureFactory.tテクスチャの生成Af(CSkin.Path(@"Graphics\ScreenConfig itembox other.png"), false);
863 this.tx三角矢印 = TextureFactory.tテクスチャの生成(CSkin.Path(@"Graphics\ScreenConfig triangle arrow.png"), false);
864 // スキン選択時に動的に設定するため、ここでは初期化しない
865 this.txSkinSample = null;
867 base.OnManagedリソースの作成();
871 public override void OnManagedリソースの解放()
875 TextureFactory.tテクスチャの解放(ref this.txSkinSample);
876 TextureFactory.tテクスチャの解放(ref this.tx通常項目行パネル);
877 TextureFactory.tテクスチャの解放(ref this.txその他項目行パネル);
878 TextureFactory.tテクスチャの解放(ref this.tx三角矢印);
882 base.OnManagedリソースの解放();
886 private void OnListMenuの初期化()
889 this.listMenu = new stMenuItemRight[this.list項目リスト.Count];
893 /// 事前にレンダリングしておいたテクスチャを解放する。
895 private void OnListMenuの解放()
897 if (listMenu != null)
899 for (int i = 0; i < listMenu.Length; i++)
901 TextureFactory.tテクスチャの解放(ref listMenu[i].txParam);
902 TextureFactory.tテクスチャの解放(ref listMenu[i].txParamColored);
903 TextureFactory.tテクスチャの解放(ref listMenu[i].txMenuItemRight);
905 this.listMenu = null;
909 public override int On進行描画()
911 throw new InvalidOperationException("t進行描画(bool)のほうを使用してください。");
914 public int t進行描画(bool b項目リスト側にフォーカスがある)
922 this.nスクロール用タイマ値 = CSound管理.rc演奏用タイマ.n現在時刻;
923 this.ct三角矢印アニメ.t開始(0, 9, 50, CDTXMania.Instance.Timer);
925 base.b初めての進行描画 = false;
930 this.b項目リスト側にフォーカスがある = b項目リスト側にフォーカスがある; // 記憶
932 #region [ 項目スクロールの進行 ]
934 long n現在時刻 = CDTXMania.Instance.Timer.n現在時刻;
935 if (n現在時刻 < this.nスクロール用タイマ値) this.nスクロール用タイマ値 = n現在時刻;
937 const int INTERVAL = 2; // [ms]
938 while ((n現在時刻 - this.nスクロール用タイマ値) >= INTERVAL)
940 int n目標項目までのスクロール量 = Math.Abs((int)(this.n目標のスクロールカウンタ - this.n現在のスクロールカウンタ));
943 #region [ n加速度の決定;目標まで遠いほど加速する。]
945 if (n目標項目までのスクロール量 <= 100)
949 else if (n目標項目までのスクロール量 <= 300)
953 else if (n目標項目までのスクロール量 <= 500)
963 #region [ this.n現在のスクロールカウンタに n加速度 を加減算。]
965 if (this.n現在のスクロールカウンタ < this.n目標のスクロールカウンタ)
967 this.n現在のスクロールカウンタ += n加速度;
968 if (this.n現在のスクロールカウンタ > this.n目標のスクロールカウンタ)
971 this.n現在のスクロールカウンタ = this.n目標のスクロールカウンタ;
974 else if (this.n現在のスクロールカウンタ > this.n目標のスクロールカウンタ)
976 this.n現在のスクロールカウンタ -= n加速度;
977 if (this.n現在のスクロールカウンタ < this.n目標のスクロールカウンタ)
980 this.n現在のスクロールカウンタ = this.n目標のスクロールカウンタ;
985 #region [ 行超え処理、ならびに目標位置に到達したらスクロールを停止して項目変更通知を発行。]
987 if (this.n現在のスクロールカウンタ >= 100)
989 this.n現在の選択項目 = this.t次の項目(this.n現在の選択項目);
990 this.n現在のスクロールカウンタ -= 100;
991 this.n目標のスクロールカウンタ -= 100;
992 if (this.n目標のスクロールカウンタ == 0)
994 CDTXMania.Instance.stageコンフィグ.t項目変更通知();
997 else if (this.n現在のスクロールカウンタ <= -100)
999 this.n現在の選択項目 = this.t前の項目(this.n現在の選択項目);
1000 this.n現在のスクロールカウンタ += 100;
1001 this.n目標のスクロールカウンタ += 100;
1002 if (this.n目標のスクロールカウンタ == 0)
1004 CDTXMania.Instance.stageコンフィグ.t項目変更通知();
1010 this.nスクロール用タイマ値 += INTERVAL;
1015 #region [ ▲印アニメの進行 ]
1016 if (this.b項目リスト側にフォーカスがある && (this.n目標のスクロールカウンタ == 0))
1018 this.ct三角矢印アニメ.t進行Loop();
1025 // メニューにフォーカスがあるなら、項目リストの中央は頭を出さない。
1026 this.ptパネルの基本座標[4].X = this.b項目リスト側にフォーカスがある ? 276 : 301;
1028 #region [ 計11個の項目パネルを描画する。]
1030 int nItem = this.n現在の選択項目;
1031 for (int i = 0; i < 4; i++)
1033 nItem = this.t前の項目(nItem);
1036 for (int n行番号 = -4; n行番号 < 6; n行番号++)
1038 // n行番号 == 0 がフォーカスされている項目パネル。
1039 #region [ 今まさに画面外に飛びだそうとしている項目パネルは描画しない。]
1040 if (((n行番号 == -4) && (this.n現在のスクロールカウンタ > 0)) ||
1041 ((n行番号 == +5) && (this.n現在のスクロールカウンタ < 0)))
1043 nItem = this.t次の項目(nItem);
1048 int n移動元の行の基本位置 = n行番号 + 4;
1049 int n移動先の行の基本位置 = (this.n現在のスクロールカウンタ <= 0) ? ((n移動元の行の基本位置 + 1) % 10) : (((n移動元の行の基本位置 - 1) + 10) % 10);
1050 int x = this.ptパネルの基本座標[n移動元の行の基本位置].X + ((int)((this.ptパネルの基本座標[n移動先の行の基本位置].X - this.ptパネルの基本座標[n移動元の行の基本位置].X) * (((double)Math.Abs(this.n現在のスクロールカウンタ)) / 100.0)));
1051 int y = this.ptパネルの基本座標[n移動元の行の基本位置].Y + ((int)((this.ptパネルの基本座標[n移動先の行の基本位置].Y - this.ptパネルの基本座標[n移動元の行の基本位置].Y) * (((double)Math.Abs(this.n現在のスクロールカウンタ)) / 100.0)));
1053 #region [ 現在の行の項目パネル枠を描画。]
1054 if (this.list項目リスト[nItem].type == EOptionType.Normal)
1056 if (this.tx通常項目行パネル != null)
1058 this.tx通常項目行パネル.t2D描画(CDTXMania.Instance.Device, x * Scale.X, y * Scale.Y);
1061 else if (this.list項目リスト[nItem].type == EOptionType.Other)
1063 if (this.txその他項目行パネル != null)
1065 this.txその他項目行パネル.t2D描画(CDTXMania.Instance.Device, x * Scale.X, y * Scale.Y);
1070 #region [ 現在の行の項目名を描画。]
1071 if (listMenu[nItem].txMenuItemRight != null)
1073 // 自前のキャッシュに含まれているようなら、再レンダリングせずキャッシュを使用
1074 listMenu[nItem].txMenuItemRight.t2D描画(CDTXMania.Instance.Device, (x + 0x12) * Scale.X, (y + 12) * Scale.Y - 20);
1078 using (Bitmap bmpItem = prvFont.DrawPrivateFont(this.list項目リスト[nItem].label, Color.White, Color.Black))
1080 TextureFactory.tテクスチャの解放(ref listMenu[nItem].txMenuItemRight);
1081 listMenu[nItem].txMenuItemRight = TextureFactory.tテクスチャの生成(bmpItem);
1086 #region [ 現在の行の項目の要素を描画。]
1087 string strParam = this.list項目リスト[nItem].ToString();
1090 #region [ 最初にSkinの選択肢にきたとき(Enterを押す前)に限り、サンプル生成が発生する。 #28195 2012.5.2 yyagi ]
1091 if (this.list項目リスト[this.n現在の選択項目] == skins)
1093 if (txSkinSample == null)
1095 tGenerateSkinSample();
1097 if (txSkinSample != null)
1099 txSkinSample.t2D描画(CDTXMania.Instance.Device, 56 * Scale.X, 300 * Scale.Y);
1105 int nIndex = this.list項目リスト[nItem].Index;
1106 bool bColored = list項目リスト[nItem] is COptionInteger && n行番号 == 0 && b要素値にフォーカス中;
1107 if (listMenu[nItem].nParam != nIndex ||
1108 (listMenu[nItem].txParam == null) ||
1109 (bColored && listMenu[nItem].txParamColored == null))
1111 listMenu[nItem].nParam = nIndex;
1112 listMenu[nItem].strParam = this.list項目リスト[nItem].ToString();
1113 using (Bitmap bmpStr = prvFont.DrawPrivateFont(strParam, Color.White, Color.Black))
1115 TextureFactory.tテクスチャの解放(ref listMenu[nItem].txParam);
1116 listMenu[nItem].txParam = TextureFactory.tテクスチャの生成(bmpStr, false);
1119 using (Bitmap bmpStrColored = prvFont.DrawPrivateFont(strParam, Color.White, Color.Black, Color.Yellow, Color.OrangeRed))
1121 TextureFactory.tテクスチャの解放(ref listMenu[nItem].txParamColored);
1122 listMenu[nItem].txParamColored = TextureFactory.tテクスチャの生成(bmpStrColored, false);
1130 listMenu[nItem].txParamColored.t2D描画(CDTXMania.Instance.Device, (x + 210) * Scale.X, (y + 12) * Scale.Y - 20);
1134 listMenu[nItem].txParam.t2D描画(CDTXMania.Instance.Device, (x + 210) * Scale.X, (y + 12) * Scale.Y - 20);
1136 nItem = this.t次の項目(nItem);
1140 #region [ 項目リストにフォーカスがあって、かつスクロールが停止しているなら、パネルの上下に▲印を描画する。]
1141 if (this.b項目リスト側にフォーカスがある && (this.n目標のスクロールカウンタ == 0))
1149 if (this.b要素値にフォーカス中)
1153 y_upper = 198 - this.ct三角矢印アニメ.n現在の値;
1154 y_lower = 242 + this.ct三角矢印アニメ.n現在の値;
1160 y_upper = 186 - this.ct三角矢印アニメ.n現在の値;
1161 y_lower = 254 + this.ct三角矢印アニメ.n現在の値;
1166 if (this.tx三角矢印 != null)
1168 this.tx三角矢印.t2D描画(CDTXMania.Instance.Device, x * Scale.X,
1170 new Rectangle(0, 0, (int)(32 * Scale.X), (int)(16 * Scale.Y)));
1171 this.tx三角矢印.t2D描画(CDTXMania.Instance.Device, x * Scale.X,
1173 new Rectangle(0, (int)(16 * Scale.Y), (int)(32 * Scale.X), (int)(16 * Scale.Y)));
1183 internal enum Eメニュー種別
1189 // #24609 2011.4.12 yyagi: 画面キャプチャキーのアサイン
1204 private int t前の項目(int nItem)
1208 nItem = this.list項目リスト.Count - 1;
1213 private int t次の項目(int nItem)
1215 if (++nItem >= this.list項目リスト.Count)