class OptionSelectorEditbox extends OptionSelectorBase
{
	protected EditBoxWidget			m_EditBox;
	
	void OptionSelectorEditbox(Widget parent, string value, ScriptedWidgetEventHandler parent_menu, bool disabled)
	{
		m_Root					= GetGame().GetWorkspace().CreateWidgets("gui/layouts/new_ui/option_editbox.layout", parent);
		#ifdef PLATFORM_CONSOLE
			m_Parent				= parent.GetParent().GetParent();
		#else
		#ifdef PLATFORM_WINDOWS
			m_Parent				= parent.GetParent();
		#endif
		#endif
		
		m_SelectorType				= 1;
		m_ParentClass				= parent_menu;
		m_EditBox					= EditBoxWidget.Cast(m_Root.FindAnyWidget("option_value"));
		
		SetValue(value);
		Enable();
		
		m_Parent.SetHandler(this);
	}
	
	void ~OptionSelectorEditbox()
	{
		delete m_Root;
	}
	
	override void Enable()
	{
		super.Enable();
		
		m_EditBox.ClearFlags(WidgetFlags.IGNOREPOINTER);
	}
	
	override void Disable()
	{
		super.Disable();
		
		m_EditBox.SetFlags(WidgetFlags.IGNOREPOINTER);
	}
	
	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);
			m_ParentClass.OnMouseEnter(m_Root.GetParent().GetParent(), x, y);
		}
		
		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);
		}
		
		ColorHighlight(w);
		
		return true;
	}
	
	override bool OnMouseLeave(Widget w, Widget enterW, int x, int y)
	{
		if (IsFocusable(enterW))
			return true;
		
		if (m_ParentClass)
		{
			m_ParentClass.OnFocus(null, x, y);
			m_ParentClass.OnMouseLeave(m_Root.GetParent().GetParent(), enterW, x, y);
		}
		
		UIScriptedMenu menu = GetGame().GetUIManager().GetMenu();
		
		if (menu && menu.IsInherited(CharacterCreationMenu))
		{
			menu.OnFocus(null, x, y);
			menu.OnMouseLeave(m_Root.GetParent().GetParent(), enterW, x, y);
		}
		
		ColorNormal(w);
		
		return true;
	}
	
	override bool OnChange(Widget w, int x, int y, bool finished)
	{
		if (w == m_EditBox)
		{
			m_OptionChanged.Invoke(GetValue());
			return true;
		}
		return false;
	}
	
	override bool IsFocusable(Widget w)
	{
		if (w)
		{
			return (w == m_Parent || w == m_EditBox);
		}
		return false;
	}
	
	override bool OnFocus(Widget w, int x, int y)
	{
		if (GetFocus() != m_EditBox)
		{
			SetFocus(m_EditBox);
			m_Parent.Enable(false);
		}
		
		return super.OnFocus(m_Parent, x, y);
	}
	
	override bool OnFocusLost(Widget w, int x, int y)
	{
		if (w == m_EditBox)
		{
			m_Parent.Enable(true);
			return super.OnFocusLost(m_Parent, x, y);
		}
		return false;
	}
	
	void SetValue(string value, bool update = true)
	{
		m_EditBox.SetText(value);
		if (update)
			m_OptionChanged.Invoke(GetValue());
	}
	
	string GetValue()
	{
		return m_EditBox.GetText();
	}
	
	override void ColorHighlight(Widget w)
	{
		if (!w)
			return;
		
		if (m_EditBox)
		{
			SetFocus(m_EditBox);
			m_EditBox.SetColor(ARGB(255, 200, 0, 0));
		}
		
		super.ColorHighlight(w);
	}
	
	override void ColorNormal(Widget w)
	{
		if (!w)
			return;
		
		if (m_EditBox)
		{
			m_EditBox.SetColor(ARGB(140, 255, 255, 255));
		}
		
		super.ColorNormal(w);
	}
}