29 super.HandlerAttached(w);
32 Widget root = w.GetParent();
43 RegisterButton(button);
47 UpdateAllButtonsPadding(
m_wRightFooter, SCR_EDynamicFooterButtonAlignment.RIGHT);
66 private void UpdateAllButtonsPadding(Widget wrapper, SCR_EDynamicFooterButtonAlignment alignment = 0)
71 array<SCR_InputButtonComponent> buttons = SCR_DynamicFooterComponent.FindChildrenButtons(wrapper);
73 foreach (SCR_InputButtonComponent button : buttons)
75 UpdateButtonPadding(button, alignment);
80 private void UpdateButtonPadding(SCR_InputButtonComponent button, SCR_EDynamicFooterButtonAlignment alignment = 0)
85 float paddingRight, paddingLeft;
86 float left, top, right, bottom;
90 case SCR_EDynamicFooterButtonAlignment.LEFT:
94 case SCR_EDynamicFooterButtonAlignment.RIGHT:
99 Widget widget = button.GetRootWidget();
100 AlignableSlot.GetPadding(widget, left, top, right, bottom);
102 AlignableSlot.SetPadding(widget, paddingLeft, top, paddingRight, bottom);
107 SCR_InputButtonComponent CreateButton(ResourceName
layout,
string tag,
string label,
string action, SCR_EDynamicFooterButtonAlignment alignment = 0,
bool visible =
true)
113 case SCR_EDynamicFooterButtonAlignment.LEFT:
117 case SCR_EDynamicFooterButtonAlignment.RIGHT:
123 Widget buttonWidget =
GetGame().GetWorkspace().CreateWidgets(
layout, wrapper);
127 SCR_InputButtonComponent button = SCR_InputButtonComponent.
FindComponent(buttonWidget);
132 RegisterButton(button);
133 UpdateButtonPadding(button, alignment);
135 buttonWidget.SetName(tag);
137 button.SetVisible(visible,
false);
149 SCR_InputButtonComponent CreateButtonAtPosition(ResourceName
layout,
string tag,
string label,
string action,
int position, SCR_EDynamicFooterButtonAlignment alignment = 0,
bool visible =
true)
155 case SCR_EDynamicFooterButtonAlignment.LEFT:
159 case SCR_EDynamicFooterButtonAlignment.RIGHT:
165 array<ref Widget> existingButtons = {};
166 SCR_WidgetHelper.GetAllChildren(wrapper, existingButtons);
169 foreach (Widget existingButton : existingButtons)
174 existingButton.SetZOrder(count);
179 SCR_InputButtonComponent button = CreateButton(
layout, tag, label, action, alignment, visible);
181 button.GetRootWidget().SetZOrder(
position);
187 UpdateButtonPadding(button, alignment);
194 void RegisterButton(SCR_InputButtonComponent button)
196 Widget w = button.GetRootWidget();
204 SCR_InputButtonComponent FindButton(
string tag)
211 string GetButtonTag(SCR_InputButtonComponent button)
216 return SCR_MapHelper<string, SCR_InputButtonComponent>.GetKeyByValue(
m_Buttons, button);
221 bool RemoveButton(
string tag)
223 SCR_InputButtonComponent button = FindButton(tag);
229 m_wRoot.RemoveChild(button.GetRootWidget());
238 foreach (SCR_InputButtonComponent comp :
m_Buttons)
240 m_wRoot.RemoveChild(comp.GetRootWidget());
247 array<SCR_InputButtonComponent> GetButtonsInFooter(SCR_EDynamicFooterButtonAlignment alignment)
252 case SCR_EDynamicFooterButtonAlignment.LEFT:
256 case SCR_EDynamicFooterButtonAlignment.RIGHT:
264 return SCR_DynamicFooterComponent.FindChildrenButtons(wrapper);
268 Widget GetLeftFooter()
274 Widget GetRightFooter()
292 static array<SCR_InputButtonComponent> FindChildrenButtons(notnull Widget w,
bool searchImmediateChildrenOnly =
true)
294 array<SCR_InputButtonComponent> buttons = {};
295 array<ref Widget> children = {};
297 SCR_WidgetHelper.GetAllChildren(w, children, !searchImmediateChildrenOnly);
299 foreach (Widget child : children)
301 SCR_InputButtonComponent comp = SCR_InputButtonComponent.FindComponent(child);
303 buttons.Insert(comp);
310 static SCR_DynamicFooterComponent FindComponentInHierarchy(notnull Widget root)
312 SCR_DynamicFooterComponent comp;
314 ScriptedWidgetEventHandler handler = SCR_WidgetTools.FindHandlerInChildren(root, SCR_DynamicFooterComponent);
316 comp = SCR_DynamicFooterComponent.Cast(handler);
322 static SCR_DynamicFooterComponent FindComponent(notnull Widget w)
324 return SCR_DynamicFooterComponent.Cast(w.FindHandler(SCR_DynamicFooterComponent));