11namespace TrafficManager . Util . Extensions {
22 using ColossalFramework . UI ;
33 using ICities ;
4+ using TrafficManager . Lifecycle ;
5+ using TrafficManager . UI . Helpers ;
46 using UnityEngine ;
57
68 internal static class UIHelperExtensions {
@@ -11,5 +13,99 @@ public static T AddComponent<T>(this UIHelperBase container)
1113
1214 public static T AddUIComponent < T > ( this UIHelperBase container )
1315 where T : UIComponent => container . GetSelf ( ) . AddUIComponent < T > ( ) ;
16+
17+ public static CustomDownDown AddCustomDropDown ( this UIHelperBase container ,
18+ string text ,
19+ string [ ] options ,
20+ int defaultSelection ,
21+ OnDropdownSelectionChanged eventCallback
22+ ) {
23+ if ( eventCallback != null && ! string . IsNullOrEmpty ( text ) ) {
24+ UIComponent root = container . GetSelf ( ) ;
25+ UIPanel uipanel = root . AddUIComponent < UIPanel > ( ) ;
26+ uipanel . area = new Vector4 ( 14 , 0 , 232 , 72 ) ;
27+ uipanel . autoLayoutDirection = LayoutDirection . Vertical ;
28+ uipanel . autoLayoutPadding = new RectOffset ( 1 , 0 , 2 , 0 ) ;
29+ uipanel . autoLayout = true ;
30+
31+ var label = uipanel . AddUIComponent < UILabel > ( ) ;
32+ label . text = text ;
33+ label . name = "Label" ;
34+
35+ var dropdown = uipanel . AddUIComponent < CustomDownDown > ( ) ;
36+ dropdown . name = "Dropdown" ;
37+ dropdown . area = new Vector4 ( 0 , 24 , 225 , 38 ) ;
38+ dropdown . items = options ;
39+ dropdown . selectedIndex = defaultSelection ;
40+ dropdown . triggerButton = dropdown ;
41+ dropdown . relativePosition = new Vector3 ( 0 , 24 , 0 ) ;
42+ dropdown . itemPadding = new RectOffset ( 14 , 14 , 0 , 0 ) ;
43+ dropdown . listPadding = new RectOffset ( 4 , 4 , 4 , 4 ) ;
44+ dropdown . textFieldPadding = new RectOffset ( 14 , 40 , 7 , 4 ) ;
45+ dropdown . itemHeight = 24 ;
46+ dropdown . listHeight = 200 ;
47+ dropdown . textScale = 1.25f ;
48+ dropdown . itemHover = "ListItemHover" ;
49+ dropdown . itemHighlight = "ListItemHighlight" ;
50+ dropdown . focusedFgSprite = "OptionsDropboxFocused" ;
51+ dropdown . focusedBgSprite = "OptionsDropboxHovered" ;
52+ dropdown . hoveredBgSprite = "OptionsDropboxHovered" ;
53+ dropdown . normalBgSprite = "OptionsDropbox" ;
54+ dropdown . listBackground = "OptionsDropboxListbox" ;
55+ dropdown . popupColor = Color . white ;
56+ dropdown . popupTextColor = new Color32 ( 170 , 170 , 170 , 255 ) ;
57+ dropdown . eventSelectedIndexChanged += delegate ( UIComponent c , int sel ) {
58+ eventCallback ( sel ) ;
59+ } ;
60+
61+ if ( CustomDownDown . ScrollTemplate ) {
62+ // reuse gameObject template
63+ dropdown . listScrollbar = CustomDownDown . ScrollTemplate . GetComponent < UIScrollbar > ( ) ;
64+ } else {
65+ UIScrollbar scrollbar = CreateScrollbar ( ) ;
66+ // cache gameObject for later reuse
67+ CustomDownDown . ScrollTemplate = scrollbar . gameObject ;
68+ dropdown . listScrollbar = scrollbar ;
69+ }
70+
71+ return dropdown ;
72+ }
73+ return null ;
74+ }
75+
76+ private static UIScrollbar CreateScrollbar ( ) {
77+ UIScrollbar verticalScrollbar = new GameObject ( "TMPE_ScrollbarV" ) . AddComponent < UIScrollbar > ( ) ;
78+ // attach to lifecycle gameObject for easier search in gameObject tree
79+ verticalScrollbar . gameObject . transform . SetParent ( TMPELifecycle . Instance . gameObject . transform ) ;
80+
81+ verticalScrollbar . name = "TMPE_ScrollbarV" ;
82+ verticalScrollbar . width = 25 ;
83+ verticalScrollbar . height = 200 ;
84+ verticalScrollbar . orientation = UIOrientation . Vertical ;
85+ verticalScrollbar . pivot = UIPivotPoint . TopLeft ;
86+ verticalScrollbar . minValue = 0 ;
87+ verticalScrollbar . maxValue = 87 ;
88+ verticalScrollbar . value = 0 ;
89+ verticalScrollbar . incrementAmount = 50 ;
90+ verticalScrollbar . autoHide = true ;
91+
92+ UISlicedSprite trackSprite = verticalScrollbar . AddUIComponent < UISlicedSprite > ( ) ;
93+ trackSprite . relativePosition = Vector2 . zero ;
94+ trackSprite . autoSize = true ;
95+ trackSprite . size = trackSprite . parent . size ;
96+ trackSprite . fillDirection = UIFillDirection . Vertical ;
97+ trackSprite . spriteName = "ScrollbarTrack" ;
98+ verticalScrollbar . trackObject = trackSprite ;
99+
100+ UISlicedSprite thumbSprite = trackSprite . AddUIComponent < UISlicedSprite > ( ) ;
101+ thumbSprite . relativePosition = Vector2 . zero ;
102+ thumbSprite . fillDirection = UIFillDirection . Vertical ;
103+ thumbSprite . autoSize = true ;
104+ thumbSprite . width = thumbSprite . parent . width - 6 ;
105+ thumbSprite . spriteName = "ScrollbarThumb" ;
106+ verticalScrollbar . thumbObject = thumbSprite ;
107+
108+ return verticalScrollbar ;
109+ }
14110 }
15111}
0 commit comments