• R/O
  • HTTP
  • SSH
  • HTTPS

dtxmania: 提交


Commit MetaInfo

修订版c147f391a805ec5ac17e8480a28f93290fc338fa (tree)
时间2021-09-30 02:12:21
作者yyagi <yyagi.dtxmania@gmai...>
Commiteryyagi

Log Message

#42951 今更ですが、コンフィグでサブメニューから戻る際にカーソル位置が初期化されてしまう問題を修正。

更改概述

差异

--- a/DTXMania/コード/ステージ/04.コンフィグ/CActConfigList.cs
+++ b/DTXMania/コード/ステージ/04.コンフィグ/CActConfigList.cs
@@ -65,6 +65,8 @@ namespace DTXMania
6565 }
6666 stMenuItemRight[] listMenu;
6767
68+ Stack<string> flowHistory;
69+
6870 /// <summary>
6971 /// #32059 2013.9.17 yyagi
7072 /// </summary>
@@ -124,47 +126,47 @@ namespace DTXMania
124126
125127 if (this.eメニュー種別 == Eメニュー種別.KeyAssignSystem)
126128 {
127- t項目リストの設定(Eメニュー種別.System);
129+ t項目リストの設定(Eメニュー種別.System, true);
128130 }
129131 else if (this.eメニュー種別 == Eメニュー種別.KeyAssignDrums)
130132 {
131- t項目リストの設定(Eメニュー種別.Drums);
133+ t項目リストの設定(Eメニュー種別.Drums, true );
132134 }
133135 else if (this.eメニュー種別 == Eメニュー種別.KeyAssignGuitar)
134136 {
135- t項目リストの設定(Eメニュー種別.Guitar);
137+ t項目リストの設定(Eメニュー種別.Guitar, true );
136138 }
137139 else if (this.eメニュー種別 == Eメニュー種別.KeyAssignBass)
138140 {
139- t項目リストの設定(Eメニュー種別.Bass);
141+ t項目リストの設定(Eメニュー種別.Bass, true );
140142 }
141143 if (this.eメニュー種別 == Eメニュー種別.DisplaySystem)
142144 {
143- t項目リストの設定(Eメニュー種別.System);
145+ t項目リストの設定(Eメニュー種別.System, true );
144146 }
145147 else if (this.eメニュー種別 == Eメニュー種別.DisplayDrums)
146148 {
147- t項目リストの設定(Eメニュー種別.Drums);
149+ t項目リストの設定(Eメニュー種別.Drums, true );
148150 }
149151 else if (this.eメニュー種別 == Eメニュー種別.DisplayGuitar)
150152 {
151- t項目リストの設定(Eメニュー種別.Guitar);
153+ t項目リストの設定(Eメニュー種別.Guitar, true );
152154 }
153155 else if (this.eメニュー種別 == Eメニュー種別.DisplayBass)
154156 {
155- t項目リストの設定(Eメニュー種別.Bass);
157+ t項目リストの設定(Eメニュー種別.Bass, true );
156158 }
157159 else if (this.eメニュー種別 == Eメニュー種別.EDrumsSettings)
158160 {
159- t項目リストの設定(Eメニュー種別.Drums);
161+ t項目リストの設定(Eメニュー種別.Drums, true );
160162 }
161163 else if (this.eメニュー種別 == Eメニュー種別.HitRangeSettings)
162164 {
163- t項目リストの設定(Eメニュー種別.System);
165+ t項目リストの設定(Eメニュー種別.System, true );
164166 }
165167 else if ( this.eメニュー種別 == Eメニュー種別.SoundSettings)
166168 {
167- t項目リストの設定(Eメニュー種別.System);
169+ t項目リストの設定(Eメニュー種別.System, true );
168170 }
169171 }
170172
@@ -233,8 +235,25 @@ namespace DTXMania
233235 this.eメニュー種別 = Eメニュー種別.Unknown;
234236 }
235237
236- public void t項目リストの設定(Eメニュー種別 eMenu)
238+ /// <summary>
239+ /// Set item lists in the right-side screen
240+ /// </summary>
241+ /// <param name="eMenu">E-menu-type</param>
242+ /// <param name="bExiting">whether the action is "entering menu(false)" or "exiting menu(true)"</param>
243+ public void t項目リストの設定(Eメニュー種別 eMenu, bool bExiting)
237244 {
245+
246+ #region [ Push the last menu strings ]
247+ if ( !bExiting && this.list項目リスト?.Count > 0 )
248+ {
249+ string lastItemName = this.list項目リスト[ n現在の選択項目 ].label;
250+ if ( lastItemName != null )
251+ {
252+ flowHistory.Push( lastItemName );
253+ }
254+ }
255+ #endregion
256+
238257 this.list項目リスト.Clear();
239258
240259 Func<EPad, string, string, COptionString> PadNotifier = (pad, lbl, expl) =>
@@ -599,7 +618,20 @@ namespace DTXMania
599618 list項目リスト.Add(KeyAssignMenu.Bass);
600619 }
601620 OnListMenuの初期化();
602- n現在の選択項目 = 0;
621+
622+
623+ if ( bExiting )
624+ {
625+ #region [ Pull the upper item name from a stack, search it from the upper item lists, then set my position to it ]
626+ string lastItemName = ( flowHistory.Count <= 0 ) ? null : flowHistory.Pop();
627+ n現在の選択項目 = list項目リスト.FindIndex( s => s.label == lastItemName );
628+ if ( n現在の選択項目 < 0 ) n現在の選択項目 = 0;
629+ #endregion
630+ }
631+ else
632+ {
633+ n現在の選択項目 = 0;
634+ }
603635 eメニュー種別 = eMenu;
604636 }
605637
@@ -645,6 +677,7 @@ namespace DTXMania
645677 if (b活性化してない)
646678 {
647679 this.list項目リスト = new List<COptionBase>();
680+ this.flowHistory = new Stack<string>();
648681 this.eメニュー種別 = Eメニュー種別.Unknown;
649682
650683 CResources cr = CDTXMania.Instance.Resources;
@@ -677,64 +710,64 @@ namespace DTXMania
677710
678711 DisplayMenu.Drums.OnEnterDelegate = () =>
679712 {
680- t項目リストの設定(Eメニュー種別.DisplayDrums);
713+ t項目リストの設定(Eメニュー種別.DisplayDrums, false);
681714 };
682715 DisplayMenu.Guitar.OnEnterDelegate = () =>
683716 {
684- t項目リストの設定(Eメニュー種別.DisplayGuitar);
717+ t項目リストの設定( Eメニュー種別.DisplayGuitar, false);
685718 };
686719 DisplayMenu.Bass.OnEnterDelegate = () =>
687720 {
688- t項目リストの設定(Eメニュー種別.DisplayBass);
721+ t項目リストの設定( Eメニュー種別.DisplayBass, false );
689722 };
690723 DisplayMenu.System.OnEnterDelegate = () =>
691724 {
692- t項目リストの設定(Eメニュー種別.DisplaySystem);
725+ t項目リストの設定( Eメニュー種別.DisplaySystem, false );
693726 };
694727 KeyAssignMenu.Drums.OnEnterDelegate = () =>
695728 {
696- t項目リストの設定(Eメニュー種別.KeyAssignDrums);
729+ t項目リストの設定( Eメニュー種別.KeyAssignDrums, false );
697730 };
698731 KeyAssignMenu.Guitar.OnEnterDelegate = () =>
699732 {
700- t項目リストの設定(Eメニュー種別.KeyAssignGuitar);
733+ t項目リストの設定(Eメニュー種別.KeyAssignGuitar, false );
701734 };
702735 KeyAssignMenu.Bass.OnEnterDelegate = () =>
703736 {
704- t項目リストの設定(Eメニュー種別.KeyAssignBass);
737+ t項目リストの設定(Eメニュー種別.KeyAssignBass, false );
705738 };
706739 KeyAssignMenu.System.OnEnterDelegate = () =>
707740 {
708- t項目リストの設定(Eメニュー種別.KeyAssignSystem);
741+ t項目リストの設定(Eメニュー種別.KeyAssignSystem, false );
709742 };
710743
711744 ReturnToMenu.Drums.OnEnterDelegate = () =>
712745 {
713- t項目リストの設定(Eメニュー種別.Drums);
746+ t項目リストの設定(Eメニュー種別.Drums, true );
714747 };
715748 ReturnToMenu.Guitar.OnEnterDelegate = () =>
716749 {
717- t項目リストの設定(Eメニュー種別.Guitar);
750+ t項目リストの設定(Eメニュー種別.Guitar, true );
718751 };
719752 ReturnToMenu.Bass.OnEnterDelegate = () =>
720753 {
721- t項目リストの設定(Eメニュー種別.Bass);
754+ t項目リストの設定(Eメニュー種別.Bass, true );
722755 };
723756 ReturnToMenu.System.OnEnterDelegate = () =>
724757 {
725- t項目リストの設定(Eメニュー種別.System);
758+ t項目リストの設定(Eメニュー種別.System, true );
726759 };
727760 EDrumsMenu.Drums.OnEnterDelegate = () =>
728761 {
729- t項目リストの設定(Eメニュー種別.EDrumsSettings);
762+ t項目リストの設定(Eメニュー種別.EDrumsSettings, false );
730763 };
731764 HitRangeMenu.OnEnterDelegate = () =>
732765 {
733- t項目リストの設定( Eメニュー種別.HitRangeSettings );
766+ t項目リストの設定( Eメニュー種別.HitRangeSettings, false );
734767 };
735768 SoundMenu.OnEnterDelegate = () =>
736769 {
737- t項目リストの設定( Eメニュー種別.SoundSettings );
770+ t項目リストの設定( Eメニュー種別.SoundSettings, false );
738771 };
739772
740773 #region [ スキン選択肢と、現在選択中のスキン(index)の準備 #28195 2012.5.2 yyagi ]
@@ -782,12 +815,12 @@ namespace DTXMania
782815 this.InitialForceHighPower = CDTXMania.Instance.ConfigIni.bForceHighPowerPlan;
783816
784817 // #27795 2012.3.11 yyagi; System設定の中でDrumsの設定を参照しているため、
785- this.t項目リストの設定(Eメニュー種別.Bass);
818+ this.t項目リストの設定(Eメニュー種別.Bass, false );
786819 // 活性化の時点でDrumsの設定も入れ込んでおかないと、System設定中に例外発生することがある。
787- this.t項目リストの設定(Eメニュー種別.Guitar);
788- this.t項目リストの設定(Eメニュー種別.Drums);
820+ this.t項目リストの設定(Eメニュー種別.Guitar, false );
821+ this.t項目リストの設定(Eメニュー種別.Drums, false );
789822 // 順番として、最後にSystemを持ってくること。設定一覧の初期位置がSystemのため。
790- this.t項目リストの設定(Eメニュー種別.System);
823+ this.t項目リストの設定(Eメニュー種別.System, false );
791824
792825 base.On活性化();
793826 }
@@ -802,6 +835,8 @@ namespace DTXMania
802835 this.ct三角矢印アニメ = null;
803836
804837 OnListMenuの解放();
838+ flowHistory.Clear();
839+ flowHistory = null;
805840 prvFont.Dispose();
806841
807842 base.On非活性化();
--- a/DTXMania/コード/ステージ/04.コンフィグ/CStageコンフィグ.cs
+++ b/DTXMania/コード/ステージ/04.コンフィグ/CStageコンフィグ.cs
@@ -550,19 +550,19 @@ namespace DTXMania
550550 switch (this.n現在のメニュー番号)
551551 {
552552 case 0:
553- this.actList.t項目リストの設定(CActConfigList.Eメニュー種別.System);
553+ this.actList.t項目リストの設定(CActConfigList.Eメニュー種別.System, false );
554554 break;
555555
556556 case 1:
557- this.actList.t項目リストの設定(CActConfigList.Eメニュー種別.Drums);
557+ this.actList.t項目リストの設定(CActConfigList.Eメニュー種別.Drums, false );
558558 break;
559559
560560 case 2:
561- this.actList.t項目リストの設定(CActConfigList.Eメニュー種別.Guitar);
561+ this.actList.t項目リストの設定(CActConfigList.Eメニュー種別.Guitar, false );
562562 break;
563563
564564 case 3:
565- this.actList.t項目リストの設定(CActConfigList.Eメニュー種別.Bass);
565+ this.actList.t項目リストの設定(CActConfigList.Eメニュー種別.Bass, false );
566566 break;
567567
568568 case 4:
@@ -595,19 +595,19 @@ namespace DTXMania
595595 switch (this.n現在のメニュー番号)
596596 {
597597 case 0:
598- this.actList.t項目リストの設定(CActConfigList.Eメニュー種別.System);
598+ this.actList.t項目リストの設定(CActConfigList.Eメニュー種別.System, false );
599599 break;
600600
601601 case 1:
602- this.actList.t項目リストの設定(CActConfigList.Eメニュー種別.Drums);
602+ this.actList.t項目リストの設定(CActConfigList.Eメニュー種別.Drums, false );
603603 break;
604604
605605 case 2:
606- this.actList.t項目リストの設定(CActConfigList.Eメニュー種別.Guitar);
606+ this.actList.t項目リストの設定(CActConfigList.Eメニュー種別.Guitar, false );
607607 break;
608608
609609 case 3:
610- this.actList.t項目リストの設定(CActConfigList.Eメニュー種別.Bass);
610+ this.actList.t項目リストの設定(CActConfigList.Eメニュー種別.Bass, false );
611611 break;
612612
613613 case 4:
Show on old repository browser