11class MCM_Dropdown extends MCM_SettingBase implements (MCM_API_Dropdown ) config (ModConfigMenu );
22
3- var delegate <StringSettingHandler > ChangeHandler ;
3+ var delegate <MCM_API_SettingsGroup . StringSettingHandler > ChangeHandler ;
44
55var MCM_API_Setting ParentFacade ;
66var array <string > DropdownOptions ;
7- var int DropdownSelection ;
87var bool TmpSuppressEvent ;
98
10- delegate StringSettingHandler (MCM_API_Setting Setting , string _SettingValue );
11-
129simulated function MCM_SettingBase InitSettingsItem (name _Name , eSettingType _Type , optional string _Label = "", optional string _Tooltip = " ")
1310{
1411 `log(" Don 't call InitSettingsItem directly in subclass of MCM_SettingBase.");
@@ -18,18 +15,20 @@ simulated function MCM_SettingBase InitSettingsItem(name _Name, eSettingType _Ty
1815
1916// Fancy init process
2017simulated function MCM_Dropdown InitDropdown (name _SettingName , MCM_API_Setting _ParentFacade , string _Label , string _Tooltip , array <string > _Options , string _Selection ,
21- delegate <StringSettingHandler > _OnChange )
18+ delegate <MCM_API_SettingsGroup . StringSettingHandler > _OnChange )
2219{
2320 super .InitSettingsItem (_SettingName , eSettingType_Checkbox , _Label , _Tooltip );
2421
2522 ChangeHandler = _OnChange ;
2623 ParentFacade = _ParentFacade ;
2724
28- CloneOptionsList (_Options );
29- DropdownSelection = GetSelectionIndex (_Options , _Selection );
25+ DropdownOptions = _Options ;
3026
3127 TmpSuppressEvent = true ;
32- UpdateDataDropdown (_Label , _Options , DropdownSelection , DropdownChangedCallback );
28+ UpdateDataDropdown (_Label , _Options , _Options .find (_Selection ), DropdownChangedCallback );
29+ Dropdown .OnMouseEventDelegate = MouseSoundCheck ;
30+ // Need to tweak text boundary limits
31+ Desc .SetWidth (width - 340 );
3332 TmpSuppressEvent = false ;
3433
3534 SetHoverTooltip (_Tooltip );
@@ -39,100 +38,29 @@ simulated function MCM_Dropdown InitDropdown(name _SettingName, MCM_API_Setting
3938
4039// Helpers
4140
42- function CloneOptionsList (array <string > OptionsList )
43- {
44- local int iter ;
45- DropdownOptions .Length = 0 ;
46- for (iter = 0 ; iter < OptionsList .Length ; iter ++)
47- {
48- DropdownOptions .AddItem (OptionsList [iter ]);
49- }
50- }
51-
52- function int GetSelectionIndex (array <string > OptionsList , string SelectedOption )
53- {
54- local int iter ;
55- for (iter = 0 ; iter < OptionsList .Length ; iter ++)
56- {
57- if (SelectedOption == OptionsList [iter ])
58- return iter ;
59- }
60-
61- return -1 ;
62- }
63-
6441function DropdownChangedCallback (UIDropdown DropdownControl )
6542{
66- DropdownSelection = DropdownControl .SelectedItem ;
67-
6843 if (ChangeHandler != none && !TmpSuppressEvent )
6944 {
7045 ChangeHandler (ParentFacade , DropdownControl .GetSelectedItemText ());
7146 }
7247}
7348
74- // Need to tweak text boundary limits
75-
76- simulated function UIMechaListItem UpdateDataDropdown (string _Desc ,
77- array <String > Data ,
78- int SelectedIndex ,
79- delegate <OnDropdownSelectionChangedCallback > _OnSelectionChange ,
80- optional delegate <OnClickDelegate > _OnClickDelegate = none )
81- {
82- local int i ;
83-
84- SetWidgetType (EUILineItemType_Dropdown );
85- if (Dropdown != none )
86- {
87- Dropdown .Remove ();
88- Dropdown = none ;
89- }
90-
91- if ( Dropdown == none )
92- {
93- Dropdown = Spawn (class 'UIDropdown' , self );
94- Dropdown .bIsNavigable = false ;
95- Dropdown .InitDropdown ('DropdownMC' );
96- Dropdown .SetPosition (width - 308 , 24 );
97- }
98-
99- Dropdown .Clear ();
100-
101- for (i = 0 ; i < Data .Length ; ++i )
102- {
103- Dropdown .AddItem (Data [i ]);
104- }
105-
106- Dropdown .SetLabel ("" );
107- Dropdown .SetSelected (SelectedIndex );
108- Dropdown .Show ();
109-
110- //Desc.SetWidth(width - 308);
111- Desc .SetWidth (width - 340 );
112- Desc .SetHTMLText (_Desc );
113- Desc .Show ();
114-
115- OnClickDelegate = _OnClickDelegate ;
116- Dropdown .OnItemSelectedDelegate = _OnSelectionChange ;
117- return self ;
118- }
119-
12049// MCM_API_Dropdown implementation ===========================================================================
12150
12251function string GetValue ()
12352{
124- return DropdownOptions [ DropdownSelection ] ;
53+ return Dropdown . GetSelectedItemText () ;
12554}
12655
12756function SetValue (string Selection , bool SuppressEvent )
12857{
12958 local int index ;
13059
131- index = GetSelectionIndex ( DropdownOptions , Selection );
60+ index = DropdownOptions . find ( Selection );
13261 // If found.
13362 if (index >= 0 )
13463 {
135- DropdownSelection = index ;
13664 TmpSuppressEvent = SuppressEvent ;
13765 Dropdown .SetSelected (index );
13866 TmpSuppressEvent = false ;
@@ -141,11 +69,10 @@ function SetValue(string Selection, bool SuppressEvent)
14169
14270function SetOptions (array <string > NewOptions , string InitialSelection , bool SuppressEvent )
14371{
144- CloneOptionsList (NewOptions );
145- DropdownSelection = GetSelectionIndex (NewOptions , InitialSelection );
72+ DropdownOptions = NewOptions ;
14673
14774 TmpSuppressEvent = SuppressEvent ;
148- UpdateDataDropdown (GetLabel (), NewOptions , DropdownSelection , DropdownChangedCallback );
75+ UpdateDataDropdown (GetLabel (), NewOptions , NewOptions . find ( InitialSelection ) , DropdownChangedCallback );
14976 TmpSuppressEvent = false ;
15077
15178 SetHoverTooltip (DisplayTooltip );
@@ -163,4 +90,17 @@ simulated function SetEditable(bool IsEditable)
16390 {
16491 Dropdown .Hide ();
16592 }
93+ }
94+
95+ simulated function MouseSoundCheck (UIPanel Panel , int Cmd )
96+ {
97+ if (cmd == class 'UIUtilities_Input' .const .FXS_L_MOUSE_UP )
98+ {
99+ Movie .Pres .PlayUISound (eSUISound_MenuSelect );
100+ }
101+ }
102+
103+ simulated function UIPanel ProcessMouseEvents (optional delegate <OnMouseEventDelegate > MouseEventDelegate = MouseSoundCheck )
104+ {
105+ return Super .ProcessMouseEvents (MouseEventDelegate );
166106}
0 commit comments