2 using System.Collections.Generic;
\r
3 using System.Diagnostics;
\r
5 using System.Drawing;
\r
6 using System.Threading;
\r
12 internal class CActConfigList : CActivity
\r
14 STDGBSValue<COptionLabel> ReturnToMenu;
\r
15 STDGBSValue<COptionLabel> KeyAssignMenu;
\r
16 STDGBSValue<COptionLabel> DisplayMenu;
\r
17 COptionStringList skins;
\r
19 bool b項目リスト側にフォーカスがある;
\r
23 // #33689 2014.6.17 yyagi
\r
24 bool InitialUseOSTimer;
\r
25 bool InitialWASAPIEventDriven;
\r
26 ESoundDeviceTypeForConfig InitialSystemSoundType;
\r
27 int InitialWASAPIBufferSizeMs;
\r
28 int InitialASIODevice;
\r
29 bool InitialForceHighPower;
\r
30 List<COptionBase> list項目リスト;
\r
34 Point[] ptパネルの基本座標 = new Point[]
\r
36 new Point(0x12d, 3), new Point(0x12d, 0x35), new Point(0x12d, 0x67),
\r
37 new Point(0x12d, 0x99), new Point(0x114, 0xcb), new Point(0x12d, 0xfd),
\r
38 new Point(0x12d, 0x12f), new Point(0x12d, 0x161), new Point(0x12d, 0x193),
\r
39 new Point(0x12d, 0x1c5)
\r
41 CTextureAf txその他項目行パネル;
\r
43 CTextureAf tx通常項目行パネル;
\r
44 // #28195 2012.5.2 yyagi
\r
45 CTexture txSkinSample;
\r
46 string[] skinSubFolders;
\r
49 CPrivateFastFont prvFont;
\r
50 private struct stMenuItemRight
\r
52 public CTexture txMenuItemRight;
\r
54 public string strParam;
\r
55 public CTexture txParam;
\r
56 public CTexture txParamColored;
\r
58 stMenuItemRight[] listMenu;
\r
61 /// #32059 2013.9.17 yyagi
\r
63 public bool bIsFocusingParameter
\r
71 public bool b現在選択されている項目はReturnToMenuである
\r
75 COptionBase sel = this.list項目リスト[this.n現在の選択項目];
\r
77 for (EPart i = EPart.Drums; i <= EPart.System; ++i)
\r
79 if (sel == ReturnToMenu[i])
\r
88 public bool b楽器またはシステム用メニューである
\r
92 return eメニュー種別 == Eメニュー種別.Bass || eメニュー種別 == Eメニュー種別.Drums || eメニュー種別 == Eメニュー種別.Guitar || eメニュー種別 == Eメニュー種別.System;
\r
96 public COptionBase ib現在の選択項目
\r
100 return this.list項目リスト[this.n現在の選択項目];
\r
104 public int n現在の選択項目;
\r
109 public void tEsc押下()
\r
111 if (this.b要素値にフォーカス中)
\r
113 // #32059 2013.9.17 add yyagi
\r
114 this.b要素値にフォーカス中 = false;
\r
117 if (this.eメニュー種別 == Eメニュー種別.KeyAssignSystem)
\r
119 t項目リストの設定(Eメニュー種別.System);
\r
121 else if (this.eメニュー種別 == Eメニュー種別.KeyAssignDrums)
\r
123 t項目リストの設定(Eメニュー種別.Drums);
\r
125 else if (this.eメニュー種別 == Eメニュー種別.KeyAssignGuitar)
\r
127 t項目リストの設定(Eメニュー種別.Guitar);
\r
129 else if (this.eメニュー種別 == Eメニュー種別.KeyAssignBass)
\r
131 t項目リストの設定(Eメニュー種別.Bass);
\r
133 if (this.eメニュー種別 == Eメニュー種別.DisplaySystem)
\r
135 t項目リストの設定(Eメニュー種別.System);
\r
137 else if (this.eメニュー種別 == Eメニュー種別.DisplayDrums)
\r
139 t項目リストの設定(Eメニュー種別.Drums);
\r
141 else if (this.eメニュー種別 == Eメニュー種別.DisplayGuitar)
\r
143 t項目リストの設定(Eメニュー種別.Guitar);
\r
145 else if (this.eメニュー種別 == Eメニュー種別.DisplayBass)
\r
147 t項目リストの設定(Eメニュー種別.Bass);
\r
151 public bool tEnter押下()
\r
154 CDTXMania.Instance.Skin.sound決定音.t再生する();
\r
156 if (this.b要素値にフォーカス中)
\r
158 this.b要素値にフォーカス中 = false;
\r
160 else if (this.list項目リスト[this.n現在の選択項目] is COptionInteger)
\r
162 this.b要素値にフォーカス中 = true;
\r
164 else if (this.list項目リスト[this.n現在の選択項目] is IOptionList || this.list項目リスト[this.n現在の選択項目] is COptionBool)
\r
166 this.list項目リスト[this.n現在の選択項目].OnNext();
\r
169 // #27029 2012.1.5 from
\r
171 CDTXMania.Instance.ConfigIni.eBDGroup == EBDGroup.Group &&
\r
173 (this.list項目リスト[this.n現在の選択項目] == CDTXMania.Instance.ConfigIni.eHHGroup ||
\r
174 this.list項目リスト[this.n現在の選択項目] == CDTXMania.Instance.ConfigIni.eHitSoundPriorityHH)))
\r
180 if (b現在選択されている項目はReturnToMenuである && b楽器またはシステム用メニューである)
\r
184 this.list項目リスト[this.n現在の選択項目].OnEnter();
\r
189 private void tGenerateSkinSample()
\r
191 string path = skinSubFolders[skins.Index];
\r
192 path = System.IO.Path.Combine(path, @"Graphics\ScreenTitle background.jpg");
\r
193 using (Bitmap bmSrc = new Bitmap(path))
\r
195 using (Bitmap bmDest = new Bitmap(bmSrc.Width / 4, bmSrc.Height / 4))
\r
197 using (Graphics g = Graphics.FromImage(bmDest))
\r
199 g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
\r
200 g.DrawImage(bmSrc, new Rectangle(0, 0, bmSrc.Width / 4, bmSrc.Height / 4),
\r
201 0, 0, bmSrc.Width, bmSrc.Height, GraphicsUnit.Pixel);
\r
202 TextureFactory.tテクスチャの解放(ref txSkinSample);
\r
203 txSkinSample = TextureFactory.tテクスチャの生成(bmDest, false);
\r
209 // #region [ 項目リストの設定 ( Exit, KeyAssignSystem/Drums/Guitar/Bass) ]
\r
210 public void t項目リストの設定_Exit()
\r
212 CDTXMania.Instance.SaveConfig();
\r
213 this.eメニュー種別 = Eメニュー種別.Unknown;
\r
216 public void t項目リストの設定(Eメニュー種別 eMenu)
\r
218 this.list項目リスト.Clear();
\r
220 Func<EPad, string, string, COptionString> PadNotifier = (pad, lbl, expl) =>
\r
222 COptionString opt = new COptionString("");
\r
223 opt.Initialize(lbl, expl);
\r
224 opt.OnEnterDelegate = () =>
\r
226 CDTXMania.Instance.stageコンフィグ.tパッド選択通知(pad);
\r
231 CResources cr = CDTXMania.Instance.Resources;
\r
233 if (eMenu == Eメニュー種別.DisplaySystem)
\r
235 list項目リスト.Add(ReturnToMenu.System);
\r
236 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bFullScreen);
\r
237 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bBGA);
\r
238 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAVI);
\r
239 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bFullAVI);
\r
240 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bVSyncWait);
\r
241 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdDebugX.Both);
\r
242 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdDebugY.Both);
\r
243 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdDebugX.DrOnly);
\r
244 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdDebugY.DrOnly);
\r
245 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdDebugX.GBOnly);
\r
246 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdDebugY.GBOnly);
\r
247 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdMovieX.Both);
\r
248 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdMovieY.Both);
\r
249 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdMovieX.DrOnly);
\r
250 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdMovieY.DrOnly);
\r
251 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdMovieX.GBOnly);
\r
252 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdMovieY.GBOnly);
\r
253 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nBGAlpha);
\r
254 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nShowLagType);
\r
255 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eJudgePriority);
\r
256 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bDebugInfo);
\r
258 else if (eMenu == Eメニュー種別.DisplayDrums)
\r
260 list項目リスト.Add(ReturnToMenu.Drums);
\r
261 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdInstX.Drums.Both);
\r
262 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdInstX.Drums.DrOnly);
\r
263 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdComboX.Drums.Both);
\r
264 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdComboX.Drums.DrOnly);
\r
265 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdJudgeLineY.Drums);
\r
266 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdJudgeY.Drums);
\r
267 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.LC);
\r
268 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.HH);
\r
269 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.SD);
\r
270 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.BD);
\r
271 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.HT);
\r
272 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.LT);
\r
273 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.FT);
\r
274 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.CY);
\r
275 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eSudHidInv.Drums);
\r
276 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bReverse.Drums);
\r
277 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nMinComboDisp.Drums);
\r
278 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bGraph.Drums);
\r
280 else if (eMenu == Eメニュー種別.DisplayGuitar)
\r
282 list項目リスト.Add(ReturnToMenu.Guitar);
\r
283 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdInstX.Guitar.Both);
\r
284 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdInstX.Guitar.GBOnly);
\r
285 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdComboX.Guitar.Both);
\r
286 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdComboX.Guitar.GBOnly);
\r
287 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdJudgeLineY.Guitar);
\r
288 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdJudgeY.Guitar);
\r
289 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.GtR);
\r
290 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.GtG);
\r
291 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.GtB);
\r
292 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eSudHidInv.Guitar);
\r
293 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bReverse.Guitar);
\r
294 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nMinComboDisp.Guitar);
\r
295 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bGraph.Guitar);
\r
297 else if (eMenu == Eメニュー種別.DisplayBass)
\r
299 list項目リスト.Add(ReturnToMenu.Bass);
\r
300 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdInstX.Bass.Both);
\r
301 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdInstX.Bass.GBOnly);
\r
302 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdComboX.Bass.Both);
\r
303 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdComboX.Bass.GBOnly);
\r
304 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdJudgeLineY.Bass);
\r
305 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdJudgeY.Bass);
\r
306 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.BsR);
\r
307 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.BsG);
\r
308 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.BsB);
\r
309 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eSudHidInv.Bass);
\r
310 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bReverse.Bass);
\r
311 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nMinComboDisp.Bass);
\r
312 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bGraph.Bass);
\r
314 else if (eMenu == Eメニュー種別.KeyAssignSystem)
\r
316 list項目リスト.Add(ReturnToMenu.System);
\r
317 list項目リスト.Add(PadNotifier(EPad.Capture, cr.Title("strCfgKeyAssignCapture"), cr.Value("strCfgKeyAssignCapture") ));
\r
319 else if (eMenu == Eメニュー種別.KeyAssignDrums)
\r
321 list項目リスト.Add(ReturnToMenu.Drums);
\r
322 list項目リスト.Add(PadNotifier(EPad.LC, cr.Title("strCfgKeyAssignLC"), cr.Value("strCfgKeyAssignLC") ));
\r
323 list項目リスト.Add(PadNotifier(EPad.HH, cr.Title("strCfgKeyAssignHH"), cr.Value("strCfgKeyAssignHH") ));
\r
324 list項目リスト.Add(PadNotifier(EPad.HHO,cr.Title("strCfgKeyAssignHHO"), cr.Value("strCfgKeyAssignHHO") ));
\r
325 list項目リスト.Add(PadNotifier(EPad.SD, cr.Title("strCfgKeyAssignSD"), cr.Value("strCfgKeyAssignSD") ));
\r
326 list項目リスト.Add(PadNotifier(EPad.BD, cr.Title("strCfgKeyAssignBD"), cr.Value("strCfgKeyAssignBD") ));
\r
327 list項目リスト.Add(PadNotifier(EPad.HT, cr.Title("strCfgKeyAssignHT"), cr.Value("strCfgKeyAssignHT") ));
\r
328 list項目リスト.Add(PadNotifier(EPad.LT, cr.Title("strCfgKeyAssignLT"), cr.Value("strCfgKeyAssignLT") ));
\r
329 list項目リスト.Add(PadNotifier(EPad.FT, cr.Title("strCfgKeyAssignFT"), cr.Value("strCfgKeyAssignFT") ));
\r
330 list項目リスト.Add(PadNotifier(EPad.CY, cr.Title("strCfgKeyAssignCY"), cr.Value("strCfgKeyAssignCY") ));
\r
331 list項目リスト.Add(PadNotifier(EPad.RD, cr.Title("strCfgKeyAssignRD"), cr.Value("strCfgKeyAssignRD") ));
\r
332 list項目リスト.Add(PadNotifier(EPad.HP, cr.Title("strCfgKeyAssignHP"), cr.Value("strCfgKeyAssignHP") ));
\r
333 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eHHGroup);
\r
334 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eFTGroup);
\r
335 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eCYGroup);
\r
336 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eBDGroup);
\r
337 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bCymbalFree);
\r
338 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nInputAdjustTimeMs.Drums);
\r
340 else if (eMenu == Eメニュー種別.KeyAssignGuitar)
\r
342 list項目リスト.Add(ReturnToMenu.Guitar);
\r
343 list項目リスト.Add(PadNotifier(EPad.GtR, cr.Title("strCfgKeyAssignGtR"), cr.Value("strCfgKeyAssignGtR") ));
\r
344 list項目リスト.Add(PadNotifier(EPad.GtG, cr.Title("strCfgKeyAssignGtG"), cr.Value("strCfgKeyAssignGtG") ));
\r
345 list項目リスト.Add(PadNotifier(EPad.GtB, cr.Title("strCfgKeyAssignGtB"), cr.Value("strCfgKeyAssignGtB") ));
\r
346 list項目リスト.Add(PadNotifier(EPad.GtPick, cr.Title("strCfgKeyAssignGtPick"), cr.Value("strCfgKeyAssignGtPick") ));
\r
347 list項目リスト.Add(PadNotifier(EPad.GtWail, cr.Title("strCfgKeyAssignGtWailing"), cr.Value("strCfgKeyAssignGtWailing") ));
\r
348 list項目リスト.Add(PadNotifier(EPad.GtDecide, cr.Title("strCfgKeyAssignGtDecide"), cr.Value("strCfgKeyAssignGtDecide") ));
\r
349 list項目リスト.Add(PadNotifier(EPad.GtCancel, cr.Title("strCfgKeyAssignGtCancel"), cr.Value("strCfgKeyAssignGtCancel") ));
\r
350 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nInputAdjustTimeMs.Guitar);
\r
352 else if (eMenu == Eメニュー種別.KeyAssignBass)
\r
354 list項目リスト.Add(ReturnToMenu.Bass);
\r
355 list項目リスト.Add(PadNotifier(EPad.BsR, cr.Title("strCfgKeyAssignBsR"), cr.Value("strCfgKeyAssignBsR") ));
\r
356 list項目リスト.Add(PadNotifier(EPad.BsG, cr.Title("strCfgKeyAssignBsG"), cr.Value("strCfgKeyAssignBsG") ));
\r
357 list項目リスト.Add(PadNotifier(EPad.BsB, cr.Title("strCfgKeyAssignBsB"), cr.Value("strCfgKeyAssignBsB") ));
\r
358 list項目リスト.Add(PadNotifier(EPad.BsPick, cr.Title("strCfgKeyAssignBsPick"), cr.Value("strCfgKeyAssignBsPick") ));
\r
359 list項目リスト.Add(PadNotifier(EPad.BsWail, cr.Title("strCfgKeyAssignBsWailing"), cr.Value("strCfgKeyAssignBsWailing") ));
\r
360 list項目リスト.Add(PadNotifier(EPad.BsDecide, cr.Title("strCfgKeyAssignBsDecide"), cr.Value("strCfgKeyAssignBsDecide") ));
\r
361 list項目リスト.Add(PadNotifier(EPad.BsCancel, cr.Title("strCfgKeyAssignBsCancel"), cr.Value("strCfgKeyAssignBsCancel") ));
\r
362 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nInputAdjustTimeMs.Bass);
\r
364 else if (eMenu == Eメニュー種別.System)
\r
366 list項目リスト.Add(ReturnToMenu.System);
\r
367 COptionStringList lang = new COptionStringList("default");
\r
368 lang.Initialize(cr.Title("strCfgLanguage"), cr.Value("strCfgLanguage"), cr.LanguageList );
\r
369 list項目リスト.Add( lang );
\r
371 COptionString enumsongs = new COptionString("");
\r
372 enumsongs.Initialize( cr.Title("strCfgSysEnumSongs"), cr.Value("strCfgSysEnumSongs") );
\r
373 list項目リスト.Add(enumsongs);
\r
374 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eDark);
\r
375 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nRisky);
\r
376 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eActiveInst);
\r
377 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nPlaySpeed);
\r
378 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bTimeStretch);
\r
379 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bForceHighPowerPlan);
\r
380 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bStageFailed);
\r
381 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bRandSubBox);
\r
382 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bWaveAdjust);
\r
383 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nPreSoundWeightMs);
\r
384 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nPreImageWeightMs);
\r
385 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bBGMPlay);
\r
386 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAudience);
\r
387 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eDamageLevel);
\r
388 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bScoreIni);
\r
389 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nChipVolume);
\r
390 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nAutoVolume);
\r
391 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bStoicMode);
\r
392 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bIsAutoResultCapture);
\r
393 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bBufferedInput);
\r
394 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bLog);
\r
395 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bLoadSoundSpeed);
\r
396 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nSoundDeviceType);
\r
397 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nWASAPIBufferSizeMs);
\r
398 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bEventDrivenWASAPI);
\r
399 list項目リスト.Add(CDTXMania.Instance.ConfigIni.strASIODevice );
\r
400 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bUseOSTimer);
\r
401 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nMasterVolume);
\r
402 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bUseBoxDefSkin);
\r
403 list項目リスト.Add(skins);
\r
404 list項目リスト.Add(DisplayMenu.System);
\r
405 list項目リスト.Add(KeyAssignMenu.System);
\r
406 enumsongs.OnEnterDelegate = () =>
\r
408 if (CDTXMania.Instance.EnumSongs.IsEnumerating)
\r
410 // Debug.WriteLine( "バックグラウンドでEnumeratingSongs中だったので、一旦中断します。" );
\r
411 CDTXMania.Instance.EnumSongs.Abort();
\r
412 CDTXMania.Instance.actEnumSongs.On非活性化();
\r
415 CDTXMania.Instance.EnumSongs.StartEnumFromDisk();
\r
416 CDTXMania.Instance.EnumSongs.ChangeEnumeratePriority(ThreadPriority.Normal);
\r
417 CDTXMania.Instance.actEnumSongs.bコマンドでの曲データ取得 = true;
\r
418 CDTXMania.Instance.actEnumSongs.On活性化();
\r
421 else if (eMenu == Eメニュー種別.Drums)
\r
423 list項目リスト.Add(ReturnToMenu.Drums);
\r
424 COptionEnum<EThreeState> AllAuto = new COptionEnum<EThreeState>(EThreeState.X);
\r
425 AllAuto.Initialize( cr.Title("strCfgDrAllAuto"), cr.Value("strCfgDrAllAuto"), typeof(EThreeState));
\r
426 AllAuto.OnEnterDelegate = () =>
\r
428 CDTXMania.Instance.ConfigIni.bAutoPlay.Set(EPart.Drums, AllAuto);
\r
430 list項目リスト.Add(AllAuto);
\r
431 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.LC);
\r
432 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.HH);
\r
433 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.HHO);
\r
434 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.SD);
\r
435 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.BD);
\r
436 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.HT);
\r
437 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.LT);
\r
438 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.FT);
\r
439 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.CY);
\r
440 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.RD);
\r
441 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nScrollSpeed.Drums);
\r
442 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eHitSoundPriorityHH);
\r
443 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eHitSoundPriorityFT);
\r
444 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eHitSoundPriorityCY);
\r
445 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bTight);
\r
446 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bFillin);
\r
447 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bDrumsHitSound);
\r
448 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bEmphasizePlaySound.Drums);
\r
449 list項目リスト.Add(DisplayMenu.Drums);
\r
450 list項目リスト.Add(KeyAssignMenu.Drums);
\r
452 else if (eMenu == Eメニュー種別.Guitar)
\r
454 list項目リスト.Add(ReturnToMenu.Guitar);
\r
455 COptionEnum<EThreeState> AllAuto = new COptionEnum<EThreeState>(EThreeState.X);
\r
456 AllAuto.Initialize( cr.Title("strCfgDrAllAuto"), cr.Value("strCfgDrAllAuto"), typeof(EThreeState));
\r
457 AllAuto.OnEnterDelegate = () =>
\r
459 CDTXMania.Instance.ConfigIni.bAutoPlay.Set(EPart.Guitar, AllAuto);
\r
461 list項目リスト.Add(AllAuto);
\r
462 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.GtR);
\r
463 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.GtG);
\r
464 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.GtB);
\r
465 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.GtPick);
\r
466 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.GtWail);
\r
467 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nScrollSpeed.Guitar);
\r
468 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eRandom.Guitar);
\r
469 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bLight.Guitar);
\r
470 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bEmphasizePlaySound.Guitar);
\r
471 list項目リスト.Add(DisplayMenu.Guitar);
\r
472 list項目リスト.Add(KeyAssignMenu.Guitar);
\r
474 else if (eMenu == Eメニュー種別.Bass)
\r
476 list項目リスト.Add(ReturnToMenu.Bass);
\r
477 COptionEnum<EThreeState> AllAuto = new COptionEnum<EThreeState>(EThreeState.X);
\r
478 AllAuto.Initialize( cr.Title("strCfgDrAllAuto"), cr.Value("strCfgDrAllAuto"), typeof(EThreeState));
\r
479 AllAuto.OnEnterDelegate = () =>
\r
481 CDTXMania.Instance.ConfigIni.bAutoPlay.Set(EPart.Bass, AllAuto);
\r
483 list項目リスト.Add(AllAuto);
\r
484 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.BsR);
\r
485 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.BsG);
\r
486 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.BsB);
\r
487 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.BsPick);
\r
488 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.BsWail);
\r
489 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nScrollSpeed.Bass);
\r
490 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eRandom.Bass);
\r
491 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bLight.Bass);
\r
492 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bEmphasizePlaySound.Bass);
\r
493 list項目リスト.Add(DisplayMenu.Bass);
\r
494 list項目リスト.Add(KeyAssignMenu.Bass);
\r
501 public void OnNext()
\r
503 CDTXMania.Instance.Skin.soundカーソル移動音.t再生する();
\r
506 list項目リスト[n現在の選択項目].OnPrevious();
\r
511 n目標のスクロールカウンタ += 100;
\r
515 public void OnPrevious()
\r
517 CDTXMania.Instance.Skin.soundカーソル移動音.t再生する();
\r
520 list項目リスト[n現在の選択項目].OnNext();
\r
525 n目標のスクロールカウンタ -= 100;
\r
529 private void t要素値を上下に変更中の処理()
\r
531 if (this.list項目リスト[this.n現在の選択項目] == CDTXMania.Instance.ConfigIni.nMasterVolume)
\r
533 // #33700 2014.4.26 yyagi
\r
534 CDTXMania.Instance.Sound管理.nMasterVolume = CDTXMania.Instance.ConfigIni.nMasterVolume;
\r
538 public override void On活性化()
\r
542 this.list項目リスト = new List<COptionBase>();
\r
543 this.eメニュー種別 = Eメニュー種別.Unknown;
\r
544 this.prvFont = new CPrivateFastFont(CSkin.Path(@"Graphics\fonts\mplus-1p-heavy.ttf"), (int)(18 * Scale.Y));
\r
545 this.b要素値にフォーカス中 = false;
\r
546 this.n目標のスクロールカウンタ = 0;
\r
547 this.n現在のスクロールカウンタ = 0;
\r
548 this.nスクロール用タイマ値 = -1;
\r
549 this.ct三角矢印アニメ = new CCounter();
\r
551 DisplayMenu = new STDGBSValue<COptionLabel>();
\r
552 KeyAssignMenu = new STDGBSValue<COptionLabel>();
\r
553 ReturnToMenu = new STDGBSValue<COptionLabel>();
\r
555 CResources cr = CDTXMania.Instance.Resources;
\r
556 for (EPart i = EPart.Drums; i <= EPart.System; ++i)
\r
558 DisplayMenu[i] = new COptionLabel( cr.Title("strCfgDisplayOption"), cr.Value("strCfgDisplayOption") );
\r
559 KeyAssignMenu[i] = new COptionLabel( cr.Title("strCfgInputOption"), cr.Value("strCfgInputOption") );
\r
560 ReturnToMenu[i] = new COptionLabel( cr.Title("strCfgReturnToMenu"), cr.Value("strCfgReturnToMenu") );
\r
563 DisplayMenu.Drums.OnEnterDelegate = () =>
\r
565 t項目リストの設定(Eメニュー種別.DisplayDrums);
\r
567 DisplayMenu.Guitar.OnEnterDelegate = () =>
\r
569 t項目リストの設定(Eメニュー種別.DisplayGuitar);
\r
571 DisplayMenu.Bass.OnEnterDelegate = () =>
\r
573 t項目リストの設定(Eメニュー種別.DisplayBass);
\r
575 DisplayMenu.System.OnEnterDelegate = () =>
\r
577 t項目リストの設定(Eメニュー種別.DisplaySystem);
\r
580 KeyAssignMenu.Drums.OnEnterDelegate = () =>
\r
582 t項目リストの設定(Eメニュー種別.KeyAssignDrums);
\r
584 KeyAssignMenu.Guitar.OnEnterDelegate = () =>
\r
586 t項目リストの設定(Eメニュー種別.KeyAssignGuitar);
\r
588 KeyAssignMenu.Bass.OnEnterDelegate = () =>
\r
590 t項目リストの設定(Eメニュー種別.KeyAssignBass);
\r
592 KeyAssignMenu.System.OnEnterDelegate = () =>
\r
594 t項目リストの設定(Eメニュー種別.KeyAssignSystem);
\r
597 ReturnToMenu.Drums.OnEnterDelegate = () =>
\r
599 t項目リストの設定(Eメニュー種別.Drums);
\r
601 ReturnToMenu.Guitar.OnEnterDelegate = () =>
\r
603 t項目リストの設定(Eメニュー種別.Guitar);
\r
605 ReturnToMenu.Bass.OnEnterDelegate = () =>
\r
607 t項目リストの設定(Eメニュー種別.Bass);
\r
609 ReturnToMenu.System.OnEnterDelegate = () =>
\r
611 t項目リストの設定(Eメニュー種別.System);
\r
614 #region [ スキン選択肢と、現在選択中のスキン(index)の準備 #28195 2012.5.2 yyagi ]
\r
615 int ns = (CDTXMania.Instance.Skin.strSystemSkinSubfolders == null) ? 0 : CDTXMania.Instance.Skin.strSystemSkinSubfolders.Length;
\r
616 int nb = (CDTXMania.Instance.Skin.strBoxDefSkinSubfolders == null) ? 0 : CDTXMania.Instance.Skin.strBoxDefSkinSubfolders.Length;
\r
618 skinSubFolders = new string[ns + nb];
\r
619 skinInitial = CDTXMania.Instance.Skin.GetCurrentSkinSubfolderFullName(true);
\r
621 for (int i = 0; i < ns; i++)
\r
623 skinSubFolders[i] = CDTXMania.Instance.Skin.strSystemSkinSubfolders[i];
\r
625 for (int i = 0; i < nb; i++)
\r
627 skinSubFolders[ns + i] = CDTXMania.Instance.Skin.strBoxDefSkinSubfolders[i];
\r
629 Array.Sort(skinSubFolders);
\r
630 skinNames = CSkin.GetSkinName(skinSubFolders);
\r
631 initIdx = Array.BinarySearch(skinSubFolders, skinInitial);
\r
636 skins = new COptionStringList(skinNames[initIdx]);
\r
637 skins.Initialize("Skin", Properties.Resources.strCfgSysSkin, skinNames);
\r
639 skins.OnEnterDelegate = () =>
\r
641 CDTXMania.Instance.Skin.SetCurrentSkinSubfolderFullName(skinSubFolders[skins.Index], true);
\r
642 CDTXMania.Instance.ConfigIni.strSystemSkinSubfolderPath.Value = skinSubFolders[skins.Index];
\r
643 tGenerateSkinSample();
\r
647 // CONFIG脱出時にこの値から変更されているようなら
\r
649 this.InitialSystemSoundType = CDTXMania.Instance.ConfigIni.nSoundDeviceType;
\r
650 this.InitialWASAPIBufferSizeMs = CDTXMania.Instance.ConfigIni.nWASAPIBufferSizeMs;
\r
651 this.InitialASIODevice = CDTXMania.Instance.ConfigIni.strASIODevice.Index;
\r
652 this.InitialUseOSTimer = CDTXMania.Instance.ConfigIni.bUseOSTimer;
\r
653 this.InitialWASAPIEventDriven = CDTXMania.Instance.ConfigIni.bEventDrivenWASAPI;
\r
655 this.InitialForceHighPower = CDTXMania.Instance.ConfigIni.bForceHighPowerPlan;
\r
657 // #27795 2012.3.11 yyagi; System設定の中でDrumsの設定を参照しているため、
\r
658 this.t項目リストの設定(Eメニュー種別.Bass);
\r
659 // 活性化の時点でDrumsの設定も入れ込んでおかないと、System設定中に例外発生することがある。
\r
660 this.t項目リストの設定(Eメニュー種別.Guitar);
\r
661 this.t項目リストの設定(Eメニュー種別.Drums);
\r
662 // 順番として、最後にSystemを持ってくること。設定一覧の初期位置がSystemのため。
\r
663 this.t項目リストの設定(Eメニュー種別.System);
\r
669 public override void On非活性化()
\r
673 CDTXMania.Instance.SaveConfig();
\r
674 this.list項目リスト.Clear();
\r
675 this.ct三角矢印アニメ = null;
\r
682 if (CDTXMania.Instance.Skin.GetCurrentSkinSubfolderFullName(true) != this.skinInitial)
\r
684 CDTXMania.Instance.stageChangeSkin.tChangeSkinMain(); // #28195 2012.6.11 yyagi CONFIG脱出時にSkin更新
\r
688 // #24820 2013.1.22 yyagi CONFIGでWASAPI/ASIO/DirectSound関連の設定を変更した場合、サウンドデバイスを再構築する。
\r
689 // #33689 2014.6.17 yyagi CONFIGでSoundTimerTypeの設定を変更した場合も、サウンドデバイスを再構築する。
\r
690 #region [ サウンドデバイス変更 ]
\r
691 if (InitialSystemSoundType != CDTXMania.Instance.ConfigIni.nSoundDeviceType ||
\r
692 InitialWASAPIBufferSizeMs != CDTXMania.Instance.ConfigIni.nWASAPIBufferSizeMs ||
\r
693 InitialASIODevice != CDTXMania.Instance.ConfigIni.strASIODevice.Index ||
\r
694 InitialUseOSTimer != CDTXMania.Instance.ConfigIni.bUseOSTimer ||
\r
695 InitialWASAPIEventDriven != CDTXMania.Instance.ConfigIni.bEventDrivenWASAPI )
\r
697 ESoundDeviceType soundDeviceType;
\r
698 switch (CDTXMania.Instance.ConfigIni.nSoundDeviceType.Value)
\r
700 case ESoundDeviceTypeForConfig.DSound:
\r
701 soundDeviceType = ESoundDeviceType.DirectSound;
\r
703 case ESoundDeviceTypeForConfig.ASIO:
\r
704 soundDeviceType = ESoundDeviceType.ASIO;
\r
706 case ESoundDeviceTypeForConfig.WASAPI:
\r
707 soundDeviceType = ESoundDeviceType.ExclusiveWASAPI;
\r
710 soundDeviceType = ESoundDeviceType.Unknown;
\r
714 CDTXMania.Instance.Sound管理.t初期化(
\r
716 CDTXMania.Instance.ConfigIni.nWASAPIBufferSizeMs,
\r
717 CDTXMania.Instance.ConfigIni.bEventDrivenWASAPI,
\r
719 CDTXMania.Instance.ConfigIni.strASIODevice.Index,
\r
720 CDTXMania.Instance.ConfigIni.bUseOSTimer);
\r
721 CDTXMania.Instance.ShowWindowTitleWithSoundType();
\r
725 #region [ サウンドのタイムストレッチモード変更 ]
\r
727 FDK.CSound管理.bIsTimeStretch = CDTXMania.Instance.ConfigIni.bUseOSTimer;
\r
730 #region [ 電源プラン変更 ]
\r
731 if ( CDTXMania.Instance.ConfigIni.bForceHighPowerPlan )
\r
733 CPowerPlan.ChangeHighPerformance();
\r
737 CPowerPlan.RestoreCurrentPowerPlan();
\r
743 public override void OnManagedリソースの作成()
\r
747 this.tx通常項目行パネル = TextureFactory.tテクスチャの生成Af(CSkin.Path(@"Graphics\ScreenConfig itembox.png"), false);
\r
748 this.txその他項目行パネル = TextureFactory.tテクスチャの生成Af(CSkin.Path(@"Graphics\ScreenConfig itembox other.png"), false);
\r
749 this.tx三角矢印 = TextureFactory.tテクスチャの生成(CSkin.Path(@"Graphics\ScreenConfig triangle arrow.png"), false);
\r
750 // スキン選択時に動的に設定するため、ここでは初期化しない
\r
751 this.txSkinSample = null;
\r
752 base.OnManagedリソースの作成();
\r
756 public override void OnManagedリソースの解放()
\r
760 TextureFactory.tテクスチャの解放(ref this.txSkinSample);
\r
761 TextureFactory.tテクスチャの解放(ref this.tx通常項目行パネル);
\r
762 TextureFactory.tテクスチャの解放(ref this.txその他項目行パネル);
\r
763 TextureFactory.tテクスチャの解放(ref this.tx三角矢印);
\r
765 base.OnManagedリソースの解放();
\r
769 private void OnListMenuの初期化()
\r
772 this.listMenu = new stMenuItemRight[this.list項目リスト.Count];
\r
776 /// 事前にレンダリングしておいたテクスチャを解放する。
\r
778 private void OnListMenuの解放()
\r
780 if (listMenu != null)
\r
782 for (int i = 0; i < listMenu.Length; i++)
\r
784 TextureFactory.tテクスチャの解放(ref listMenu[i].txParam);
\r
785 TextureFactory.tテクスチャの解放(ref listMenu[i].txParamColored);
\r
786 TextureFactory.tテクスチャの解放(ref listMenu[i].txMenuItemRight);
\r
788 this.listMenu = null;
\r
792 public override int On進行描画()
\r
794 throw new InvalidOperationException("t進行描画(bool)のほうを使用してください。");
\r
797 public int t進行描画(bool b項目リスト側にフォーカスがある)
\r
801 #region [ 初めての進行描画 ]
\r
802 //-----------------
\r
803 if (base.b初めての進行描画)
\r
805 this.nスクロール用タイマ値 = CSound管理.rc演奏用タイマ.n現在時刻;
\r
806 this.ct三角矢印アニメ.t開始(0, 9, 50, CDTXMania.Instance.Timer);
\r
808 base.b初めての進行描画 = false;
\r
810 //-----------------
\r
813 this.b項目リスト側にフォーカスがある = b項目リスト側にフォーカスがある; // 記憶
\r
815 #region [ 項目スクロールの進行 ]
\r
816 //-----------------
\r
817 long n現在時刻 = CDTXMania.Instance.Timer.n現在時刻;
\r
818 if (n現在時刻 < this.nスクロール用タイマ値) this.nスクロール用タイマ値 = n現在時刻;
\r
820 const int INTERVAL = 2; // [ms]
\r
821 while ((n現在時刻 - this.nスクロール用タイマ値) >= INTERVAL)
\r
823 int n目標項目までのスクロール量 = Math.Abs((int)(this.n目標のスクロールカウンタ - this.n現在のスクロールカウンタ));
\r
826 #region [ n加速度の決定;目標まで遠いほど加速する。]
\r
827 //-----------------
\r
828 if (n目標項目までのスクロール量 <= 100)
\r
832 else if (n目標項目までのスクロール量 <= 300)
\r
836 else if (n目標項目までのスクロール量 <= 500)
\r
844 //-----------------
\r
846 #region [ this.n現在のスクロールカウンタに n加速度 を加減算。]
\r
847 //-----------------
\r
848 if (this.n現在のスクロールカウンタ < this.n目標のスクロールカウンタ)
\r
850 this.n現在のスクロールカウンタ += n加速度;
\r
851 if (this.n現在のスクロールカウンタ > this.n目標のスクロールカウンタ)
\r
854 this.n現在のスクロールカウンタ = this.n目標のスクロールカウンタ;
\r
857 else if (this.n現在のスクロールカウンタ > this.n目標のスクロールカウンタ)
\r
859 this.n現在のスクロールカウンタ -= n加速度;
\r
860 if (this.n現在のスクロールカウンタ < this.n目標のスクロールカウンタ)
\r
863 this.n現在のスクロールカウンタ = this.n目標のスクロールカウンタ;
\r
866 //-----------------
\r
868 #region [ 行超え処理、ならびに目標位置に到達したらスクロールを停止して項目変更通知を発行。]
\r
869 //-----------------
\r
870 if (this.n現在のスクロールカウンタ >= 100)
\r
872 this.n現在の選択項目 = this.t次の項目(this.n現在の選択項目);
\r
873 this.n現在のスクロールカウンタ -= 100;
\r
874 this.n目標のスクロールカウンタ -= 100;
\r
875 if (this.n目標のスクロールカウンタ == 0)
\r
877 CDTXMania.Instance.stageコンフィグ.t項目変更通知();
\r
880 else if (this.n現在のスクロールカウンタ <= -100)
\r
882 this.n現在の選択項目 = this.t前の項目(this.n現在の選択項目);
\r
883 this.n現在のスクロールカウンタ += 100;
\r
884 this.n目標のスクロールカウンタ += 100;
\r
885 if (this.n目標のスクロールカウンタ == 0)
\r
887 CDTXMania.Instance.stageコンフィグ.t項目変更通知();
\r
890 //-----------------
\r
893 this.nスクロール用タイマ値 += INTERVAL;
\r
895 //-----------------
\r
898 #region [ ▲印アニメの進行 ]
\r
899 if (this.b項目リスト側にフォーカスがある && (this.n目標のスクロールカウンタ == 0))
\r
901 this.ct三角矢印アニメ.t進行Loop();
\r
908 // メニューにフォーカスがあるなら、項目リストの中央は頭を出さない。
\r
909 this.ptパネルの基本座標[4].X = this.b項目リスト側にフォーカスがある ? 276 : 301;
\r
911 #region [ 計11個の項目パネルを描画する。]
\r
912 //-----------------
\r
913 int nItem = this.n現在の選択項目;
\r
914 for (int i = 0; i < 4; i++)
\r
916 nItem = this.t前の項目(nItem);
\r
919 for (int n行番号 = -4; n行番号 < 6; n行番号++)
\r
921 // n行番号 == 0 がフォーカスされている項目パネル。
\r
922 #region [ 今まさに画面外に飛びだそうとしている項目パネルは描画しない。]
\r
923 if (((n行番号 == -4) && (this.n現在のスクロールカウンタ > 0)) ||
\r
924 ((n行番号 == +5) && (this.n現在のスクロールカウンタ < 0)))
\r
926 nItem = this.t次の項目(nItem);
\r
931 int n移動元の行の基本位置 = n行番号 + 4;
\r
932 int n移動先の行の基本位置 = (this.n現在のスクロールカウンタ <= 0) ? ((n移動元の行の基本位置 + 1) % 10) : (((n移動元の行の基本位置 - 1) + 10) % 10);
\r
933 int x = this.ptパネルの基本座標[n移動元の行の基本位置].X + ((int)((this.ptパネルの基本座標[n移動先の行の基本位置].X - this.ptパネルの基本座標[n移動元の行の基本位置].X) * (((double)Math.Abs(this.n現在のスクロールカウンタ)) / 100.0)));
\r
934 int y = this.ptパネルの基本座標[n移動元の行の基本位置].Y + ((int)((this.ptパネルの基本座標[n移動先の行の基本位置].Y - this.ptパネルの基本座標[n移動元の行の基本位置].Y) * (((double)Math.Abs(this.n現在のスクロールカウンタ)) / 100.0)));
\r
936 #region [ 現在の行の項目パネル枠を描画。]
\r
937 if (this.list項目リスト[nItem].type == EOptionType.Normal)
\r
939 if (this.tx通常項目行パネル != null)
\r
941 this.tx通常項目行パネル.t2D描画(CDTXMania.Instance.Device, x * Scale.X, y * Scale.Y);
\r
944 else if (this.list項目リスト[nItem].type == EOptionType.Other)
\r
946 if (this.txその他項目行パネル != null)
\r
948 this.txその他項目行パネル.t2D描画(CDTXMania.Instance.Device, x * Scale.X, y * Scale.Y);
\r
953 #region [ 現在の行の項目名を描画。]
\r
954 if (listMenu[nItem].txMenuItemRight != null)
\r
956 // 自前のキャッシュに含まれているようなら、再レンダリングせずキャッシュを使用
\r
957 listMenu[nItem].txMenuItemRight.t2D描画(CDTXMania.Instance.Device, (x + 0x12) * Scale.X, (y + 12) * Scale.Y - 20);
\r
961 using (Bitmap bmpItem = prvFont.DrawPrivateFont(this.list項目リスト[nItem].label, Color.White, Color.Black))
\r
963 TextureFactory.tテクスチャの解放(ref listMenu[nItem].txMenuItemRight);
\r
964 listMenu[nItem].txMenuItemRight = TextureFactory.tテクスチャの生成(bmpItem);
\r
969 #region [ 現在の行の項目の要素を描画。]
\r
970 string strParam = this.list項目リスト[nItem].ToString();
\r
971 //bool b強調 = false;
\r
973 #region [ 最初にSkinの選択肢にきたとき(Enterを押す前)に限り、サンプル生成が発生する。 #28195 2012.5.2 yyagi ]
\r
974 if (this.list項目リスト[this.n現在の選択項目] == skins)
\r
976 if (txSkinSample == null)
\r
978 tGenerateSkinSample();
\r
980 if (txSkinSample != null)
\r
982 txSkinSample.t2D描画(CDTXMania.Instance.Device, 56 * Scale.X, 300 * Scale.Y);
\r
988 int nIndex = this.list項目リスト[nItem].Index;
\r
989 bool bColored = list項目リスト[nItem] is COptionInteger && n行番号 == 0 && b要素値にフォーカス中;
\r
990 if (listMenu[nItem].nParam != nIndex ||
\r
991 (listMenu[nItem].txParam == null) ||
\r
992 (bColored && listMenu[nItem].txParamColored == null))
\r
994 listMenu[nItem].nParam = nIndex;
\r
995 listMenu[nItem].strParam = this.list項目リスト[nItem].ToString();
\r
996 using (Bitmap bmpStr = prvFont.DrawPrivateFont(strParam, Color.White, Color.Black))
\r
998 TextureFactory.tテクスチャの解放(ref listMenu[nItem].txParam);
\r
999 listMenu[nItem].txParam = TextureFactory.tテクスチャの生成(bmpStr, false);
\r
1002 using (Bitmap bmpStrColored = prvFont.DrawPrivateFont(strParam, Color.White, Color.Black, Color.Yellow, Color.OrangeRed))
\r
1004 TextureFactory.tテクスチャの解放(ref listMenu[nItem].txParamColored);
\r
1005 listMenu[nItem].txParamColored = TextureFactory.tテクスチャの生成(bmpStrColored, false);
\r
1013 listMenu[nItem].txParamColored.t2D描画(CDTXMania.Instance.Device, (x + 210) * Scale.X, (y + 12) * Scale.Y - 20);
\r
1017 listMenu[nItem].txParam.t2D描画(CDTXMania.Instance.Device, (x + 210) * Scale.X, (y + 12) * Scale.Y - 20);
\r
1019 nItem = this.t次の項目(nItem);
\r
1023 #region [ 項目リストにフォーカスがあって、かつスクロールが停止しているなら、パネルの上下に▲印を描画する。]
\r
1024 if (this.b項目リスト側にフォーカスがある && (this.n目標のスクロールカウンタ == 0))
\r
1032 if (this.b要素値にフォーカス中)
\r
1036 y_upper = 198 - this.ct三角矢印アニメ.n現在の値;
\r
1037 y_lower = 242 + this.ct三角矢印アニメ.n現在の値;
\r
1043 y_upper = 186 - this.ct三角矢印アニメ.n現在の値;
\r
1044 y_lower = 254 + this.ct三角矢印アニメ.n現在の値;
\r
1049 if (this.tx三角矢印 != null)
\r
1051 this.tx三角矢印.t2D描画(CDTXMania.Instance.Device, x * Scale.X,
\r
1052 y_upper * Scale.Y,
\r
1053 new Rectangle(0, 0, (int)(32 * Scale.X), (int)(16 * Scale.Y)));
\r
1054 this.tx三角矢印.t2D描画(CDTXMania.Instance.Device, x * Scale.X,
\r
1055 y_lower * Scale.Y,
\r
1056 new Rectangle(0, (int)(16 * Scale.Y), (int)(32 * Scale.X), (int)(16 * Scale.Y)));
\r
1066 internal enum Eメニュー種別
\r
1072 // #24609 2011.4.12 yyagi: 画面キャプチャキーのアサイン
\r
1084 private int t前の項目(int nItem)
\r
1088 nItem = this.list項目リスト.Count - 1;
\r
1093 private int t次の項目(int nItem)
\r
1095 if (++nItem >= this.list項目リスト.Count)
\r