class OptionSelectorBase extends ScriptedWidgetEventHandler { protected int m_SelectorType = 0; protected Widget m_Parent; protected Widget m_Root; protected bool m_Enabled; protected ScriptedWidgetEventHandler m_ParentClass; ref ScriptInvoker m_OptionFocused = new ScriptInvoker; ref ScriptInvoker m_OptionUnfocused = new ScriptInvoker; ref ScriptInvoker m_AttemptOptionChange = new ScriptInvoker; ref ScriptInvoker m_OptionChanged = new ScriptInvoker; void ~OptionSelectorBase() { delete m_Root; } Widget GetParent() { return m_Parent; } bool IsFocusable(Widget w) { if (w) { return w == m_Parent; } return false; } override bool OnMouseEnter(Widget w, int x, int y) { if (!IsFocusable(w)) return true; if (m_ParentClass) { m_ParentClass.OnFocus(m_Root.GetParent(), -1, m_SelectorType); #ifndef PLATFORM_CONSOLE m_ParentClass.OnMouseEnter(m_Root.GetParent().GetParent(), x, y); #endif } UIScriptedMenu menu = GetGame().GetUIManager().GetMenu(); if (menu && menu.IsInherited(CharacterCreationMenu)) { menu.OnFocus(m_Root.GetParent(), -1, m_SelectorType); menu.OnMouseEnter(m_Root.GetParent().GetParent(), x, y); } #ifndef PLATFORM_CONSOLE ColorHighlight(w); #else ColorHighlightConsole(w); if (m_ParentClass) { m_ParentClass.OnFocus(m_Root.GetParent(), -1, m_SelectorType); } #endif return true; } override bool OnMouseLeave(Widget w, Widget enterW, int x, int y) { #ifdef PLATFORM_CONSOLE if (IsFocusable(enterW)) return true; #endif if (m_ParentClass) { m_ParentClass.OnFocus(null, x, y); #ifndef PLATFORM_CONSOLE m_ParentClass.OnMouseLeave(m_Root.GetParent().GetParent(), enterW, x, y); #endif } UIScriptedMenu menu = GetGame().GetUIManager().GetMenu(); if (menu && menu.IsInherited(CharacterCreationMenu)) { menu.OnFocus(null, x, y); menu.OnMouseLeave(m_Root.GetParent().GetParent(), enterW, x, y); } #ifndef PLATFORM_CONSOLE ColorNormal(w); #else ColorNormalConsole(w); if (m_ParentClass) { m_ParentClass.OnFocusLost(w, x, y); } #endif return true; } override bool OnFocus(Widget w, int x, int y) { if (IsFocusable(w)) { ColorHighlightConsole(w); if (m_ParentClass) { m_ParentClass.OnFocus(m_Root.GetParent(), -1, m_SelectorType); } return true; } return false; } override bool OnFocusLost(Widget w, int x, int y) { ColorNormalConsole(w); if (m_ParentClass) { m_ParentClass.OnFocusLost(w, x, y); } return true; } void Focus() { #ifndef PLATFORM_CONSOLE SetFocus(m_Root); #else SetFocus(m_Parent); #endif } void Enable() { m_Enabled = true; m_Parent.ClearFlags(WidgetFlags.IGNOREPOINTER); #ifdef PLATFORM_CONSOLE ColorNormalConsole(m_Parent); #else ColorNormal(m_Parent); #endif } void Disable() { m_Enabled = false; m_Parent.SetFlags(WidgetFlags.IGNOREPOINTER); #ifdef PLATFORM_CONSOLE ColorDisabledConsole(m_Parent); #else ColorDisabled(m_Parent); #endif } void ColorHighlight(Widget w) { if (!w) return; ButtonSetColor(w, ARGB(255, 255, 0, 0)); } void ColorNormal(Widget w) { if (!w) return; int color_pnl = ARGB(255, 255, 255, 255); int color_lbl = ARGB(255, 255, 255, 255); ButtonSetColor(w, color_pnl); Widget title_label = w.FindAnyWidget(w.GetName() + "_label"); Widget option_label = w.FindAnyWidget("option_label"); if (title_label) { title_label.SetColor(color_lbl); } if (option_label) { option_label.SetColor(color_lbl); } } void ColorDisabled(Widget w) { if (!w) return; int color_pnl = ARGB(0, 0, 0, 0); int color_lbl = ARGB(120, 255, 255, 255); ButtonSetColor(w, color_pnl); Widget title_label = w.FindAnyWidget(w.GetName() + "_label"); Widget option_label = w.FindAnyWidget("option_label"); if (title_label) { title_label.SetColor(color_lbl); } if (option_label) { option_label.SetColor(color_lbl); } } void ButtonSetColor(Widget w, int color) { Widget option = w.FindAnyWidget(w.GetName() + "_image"); if (option) { option.SetColor(color); } } void ColorHighlightConsole(Widget w) { if (!w) return; int color_pnl = ARGB(255, 200, 0, 0); int color_lbl = ARGB(255, 255, 255, 255); ButtonSetColorConsole(w, color_pnl); ButtonSetAlphaAnimConsole(null); ButtonSetTextColorConsole(w, color_lbl); } void ColorNormalConsole(Widget w) { if (!w) return; int color_pnl = ARGB(0, 0, 0, 0); int color_lbl = ARGB(255, 255, 255, 255); ButtonSetColorConsole(w, color_pnl); ButtonSetAlphaAnimConsole(null); ButtonSetTextColorConsole(w, color_lbl); } void ColorDisabledConsole(Widget w) { if (!w) return; int color_pnl = ARGB(0, 0, 0, 0); int color_lbl = ARGB(120, 255, 255, 255); ButtonSetColorConsole(w, color_pnl); ButtonSetAlphaAnimConsole(null); ButtonSetTextColorConsole(w, color_lbl); } void ButtonSetColorConsole(Widget w, int color) { w.SetColor(color); } void ButtonSetAlphaAnimConsole(Widget w) { if (!w) return; Widget panel = w.FindAnyWidget(w.GetName() + "_panel"); if (panel) { //m_Root.SetWidgetAnimAlpha(panel); } } void ButtonSetTextColorConsole(Widget w, int color) { if (!w) return; TextWidget label = TextWidget.Cast(w.FindAnyWidget(w.GetName() + "_label")); TextWidget text = TextWidget.Cast(w.FindAnyWidget(w.GetName() + "_text")); TextWidget text2 = TextWidget.Cast(w.FindAnyWidget(w.GetName() + "_text_1")); if (label) { label.SetColor(color); } if (text) { text.SetColor(color); } if (text2) { text2.SetColor(color); } } }