Scriptname UITextEntryMenu extends UIMenuBase

string property		ROOT_MENU		= "CustomMenu" autoReadonly
string Property 	MENU_ROOT		= "_root.textEntry." autoReadonly

string _internalString = ""
string _internalResult = ""

string Function GetMenuName()
	return "UITextEntryMenu"
EndFunction

string Function GetResultString()
	return _internalResult
EndFunction

Function SetPropertyString(string propertyName, string value)
	If propertyName == "text"
		_internalString = value
	Endif
EndFunction

Function ResetMenu()
	isResetting = true
	_internalString = ""
	_internalResult = ""
	isResetting = false
EndFunction

int Function OpenMenu(Form inForm = None, Form akReceiver = None)
	_internalResult = ""

	If !BlockUntilClosed() || !WaitForReset()
		return 0
	Endif

	RegisterForModEvent("UITextEntryMenu_LoadMenu", "OnLoadMenu")
	RegisterForModEvent("UITextEntryMenu_CloseMenu", "OnUnloadMenu")
	RegisterForModEvent("UITextEntryMenu_TextChanged", "OnTextChanged")

	Lock()
	UI.OpenCustomMenu("textentrymenu")
	If !WaitLock()
		return 0
	Endif
	return 1
EndFunction

Event OnLoadMenu(string eventName, string strArg, float numArg, Form formArg)
	UpdateTextEntryString()
EndEvent

Event OnUnloadMenu(string eventName, string strArg, float numArg, Form formArg)
	UnregisterForModEvent("UITextEntryMenu_LoadMenu")
	UnregisterForModEvent("UITextEntryMenu_CloseMenu")
	UnregisterForModEvent("UITextEntryMenu_TextChanged")
EndEvent

Event OnTextChanged(string eventName, string strArg, float numArg, Form formArg)
	_internalResult = strArg
	Unlock()
EndEvent

Function UpdateTextEntryString()
	UI.InvokeString(ROOT_MENU, MENU_ROOT + "setTextEntryMenuText", _internalString)
EndFunction