Arma Reforger Explorer 1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Loading...
Searching...
No Matches
SCR_SuperMenuComponent.c
Go to the documentation of this file.
1
9
11{
12 [Attribute("{08CF3B69CB1ACBC4}UI/layouts/WidgetLibrary/WLib_NavigationButton.layout")]
14
15 [Attribute("TabView", UIWidgets.EditBox, desc: "Name of tabview widget to find tab view component.")]
16 protected string m_sTabViewName;
17
19
21
22 // The index might not be the same as the tab's Elements, as the tabs might be created later or not have a SubMenu component
23 protected ref array<SCR_SubMenuBase> m_aSubMenus = {};
24
26
27 // Menu requests
29
30 //------------------------------------------------------------------------------------------------
31 // --- Main events, needing to be called by manager classes ---
32 //------------------------------------------------------------------------------------------------
33 // As parameter, pass a widget the sub menus can use to grab whatever they need from the menu layout (eg the SCR_DynamicFooterComponent)
34 void Init(Widget menuRoot)
35 {
36 m_wMenuRoot = menuRoot;
37
38 // Tab view
39 Widget tabView = m_wRoot.FindAnyWidget(m_sTabViewName);
40 if (tabView)
42
44 return;
45
46 m_TabViewComponent.GetOnContentCreate().Insert(OnTabCreate);
47 m_TabViewComponent.GetOnContentShow().Insert(OnTabShow);
48 m_TabViewComponent.GetOnContentHide().Insert(OnTabHide);
49 m_TabViewComponent.GetOnContentRemove().Insert(OnTabRemove);
50 m_TabViewComponent.GetOnTabChange().Insert(OnTabChange);
51
52 // Init tabs
53 if (m_TabViewComponent.m_bManualInit)
54 {
55 // Init tab view and rely on it's events
56 m_TabViewComponent.Init();
57 }
58 else
59 {
60 // Tab view has already created tabs, manually init opened content
61 array<ref SCR_TabViewContent> contents = m_TabViewComponent.GetContents();
62
63 foreach (int i, SCR_TabViewContent content : contents)
64 {
65 if (!content.m_wTab)
66 continue;
67
69
70 if (i == m_TabViewComponent.m_iSelectedTab)
72 }
73 }
74 }
75
76 //------------------------------------------------------------------------------------------------
78 {
79 if (m_OpenedSubmenu && m_OpenedSubmenu.GetRootWidget().IsVisible() && m_OpenedSubmenu.GetShown())
80 m_OpenedSubmenu.OnMenuShow();
81 }
82
83 //------------------------------------------------------------------------------------------------
85 {
87 m_OpenedSubmenu.OnMenuHide();
88 }
89
90 //------------------------------------------------------------------------------------------------
91 void OnMenuUpdate(float tDelta)
92 {
93 if (m_OpenedSubmenu && m_OpenedSubmenu.GetRootWidget().IsVisible() && m_OpenedSubmenu.GetShown())
94 m_OpenedSubmenu.OnMenuUpdate(tDelta);
95 }
96
97 //------------------------------------------------------------------------------------------------
99 {
100 if (m_OpenedSubmenu)
101 m_OpenedSubmenu.OnMenuFocusGained();
102 }
103
104 //------------------------------------------------------------------------------------------------
106 {
107 if (m_OpenedSubmenu)
108 m_OpenedSubmenu.OnMenuFocusLost();
109 }
110
111 //------------------------------------------------------------------------------------------------
113 {
114 foreach (SCR_SubMenuBase subMenu : m_aSubMenus)
115 {
116 if (!subMenu)
117 continue;
118
119 subMenu.OnTabHide();
120 subMenu.OnTabRemove();
121 }
122 }
123
124 //------------------------------------------------------------------------------------------------
125 // --- Sub menus handling ---
126 //------------------------------------------------------------------------------------------------
127 // Might be called after OnMenuOpen, given that tabs have the option to be created only when they are selected
129 {
130 if (!w)
131 return null;
132
133 SCR_SubMenuBase subMenu = SCR_SubMenuBase.Cast(w.FindHandler(SCR_SubMenuBase));
134 if (!subMenu)
135 return null;
136
139
140 // Init sub menu
142
143 m_aSubMenus.Insert(subMenu);
144
145 return subMenu;
146 }
147
148 //------------------------------------------------------------------------------------------------
150 {
151 if (!w)
152 return null;
153
154 SCR_SubMenuBase subMenu = SCR_SubMenuBase.Cast(w.FindHandler(SCR_SubMenuBase));
155 if (!subMenu)
156 return null;
157
158 subMenu.OnTabShow();
159 m_OpenedSubmenu = subMenu;
160
161 return subMenu;
162 }
163
164 //------------------------------------------------------------------------------------------------
166 {
167 if (!w)
168 return null;
169
170 SCR_SubMenuBase subMenu = SCR_SubMenuBase.Cast(w.FindHandler(SCR_SubMenuBase));
171 if (!subMenu)
172 return null;
173
174 subMenu.OnTabHide();
175
176 return subMenu;
177 }
178
179 //------------------------------------------------------------------------------------------------
181 {
182 if (!w)
183 return null;
184
185 SCR_SubMenuBase subMenu = SCR_SubMenuBase.Cast(w.FindHandler(SCR_SubMenuBase));
186 if (!subMenu)
187 return null;
188
189 subMenu.OnTabRemove();
190 m_aSubMenus.RemoveItem(subMenu);
191
192 return subMenu;
193 }
194
195 //------------------------------------------------------------------------------------------------
197 {
198 if (!w)
199 return null;
200
201 SCR_SubMenuBase subMenu = SCR_SubMenuBase.Cast(w.FindHandler(SCR_SubMenuBase));
202 if (!subMenu)
203 return null;
204
205 subMenu.OnTabChange();
206
207 return subMenu;
208 }
209
210 //------------------------------------------------------------------------------------------------
211 protected void OnRequestCloseMenu()
212 {
214 m_OnRequestCloseMenu.Invoke();
215 }
216
217 //------------------------------------------------------------------------------------------------
218 protected void OnRequestTabChange(int newTab, int oldTab)
219 {
220 m_TabViewComponent.ShowTab(newTab);
221 }
222
223 //------------------------------------------------------------------------------------------------
224 // --- Public ---
225 //------------------------------------------------------------------------------------------------
230
231 //------------------------------------------------------------------------------------------------
233 {
234 return m_TabViewComponent.m_iSelectedTab;
235 }
236
237 //------------------------------------------------------------------------------------------------
242
243 //------------------------------------------------------------------------------------------------
244 // Returns a sub menu based TabView's Elements, meaning it might return null if the tab's content hasn't been created yet
246 {
247 Widget content = m_TabViewComponent.GetContentWidget(index);
248 if (!content)
249 return null;
250
251 return SCR_SubMenuBase.Cast(content.FindHandler(SCR_SubMenuBase));
252 }
253
254 //------------------------------------------------------------------------------------------------
256 {
257 return SCR_SuperMenuComponent.Cast(w.FindHandler(SCR_SuperMenuComponent));
258 }
259
260 //------------------------------------------------------------------------------------------------
261 // --- Invokers ---
262 //------------------------------------------------------------------------------------------------
263 //------------------------------------------------------------------------------------------------
271}
class RestAPIHelper< JsonApiStruct T > content
SCR_DestructionSynchronizationComponentClass ScriptComponentClass int index
override void OnTabShow()
UI Textures DeployMenu Briefing conflict_HintBanner_1_UI desc
ScriptInvokerBase< ScriptInvokerVoidMethod > ScriptInvokerVoid
ScriptInvokerVoid GetOnRequestCloseMenu()
ScriptInvokerInt2 GetOnRequestTabChange()
void OnTabCreate(Widget menuRoot, ResourceName buttonsLayout, int index)
SCR_SubMenuBase OnTabShow(SCR_TabViewComponent comp, Widget w)
SCR_SubMenuBase OnTabHide(SCR_TabViewComponent comp, Widget w)
void OnRequestTabChange(int newTab, int oldTab)
SCR_SubMenuBase OnTabCreate(SCR_TabViewComponent comp, Widget w, int index)
SCR_SubMenuBase OnTabRemove(SCR_TabViewComponent comp, Widget w)
SCR_TabViewComponent m_TabViewComponent
SCR_TabViewComponent GetTabView()
void Init(Widget menuRoot)
ref array< SCR_SubMenuBase > m_aSubMenus
ScriptInvokerVoid GetOnRequestCloseMenu()
void OnMenuUpdate(float tDelta)
SCR_SubMenuBase GetSubMenu(int index)
static SCR_SuperMenuComponent FindComponent(notnull Widget w)
ref ScriptInvokerVoid m_OnRequestCloseMenu
SCR_SubMenuBase OnTabChange(SCR_TabViewComponent comp, Widget w)
SCR_FieldOfViewSettings Attribute