package components { import flash.events.Event; import mx.collections.IList; import mx.controls.TextInput; import mx.events.ValidationResultEvent; [Event(name="change")] public class EditableListTextInputEditor extends EditableListEditor { private var textInput:TextInput; private var valid:Boolean = true; private var _data:String = null; public function EditableListTextInputEditor() { textInput = new TextInput(); } override protected function createChildren():void { textInput.addEventListener(Event.CHANGE, function():void { dispatchEvent(new Event(Event.CHANGE)); }); textInput.percentHeight = 100; textInput.percentWidth = 100; addChild(textInput); } override public function get newData():Object { return textInput.text; } override public function get data():Object { if(valid) { return newData; } return _data; } override public function set data(item:Object):void { _data = textInput.text = item.text()[0]; textInput.setFocus(); } override public function update(list:IList):void { textInput.text = ""; textInput.validationResultHandler(new ValidationResultEvent(ValidationResultEvent.VALID)); } override public function setFocus():void { super.setFocus(); textInput.setFocus(); } override public function validationResultHandler(event:ValidationResultEvent):void { valid = event.type == ValidationResultEvent.VALID; textInput.validationResultHandler(event); } override public function isValid():Boolean { if(textInput.text == "") { textInput.dispatchEvent(new Event("change")); valid = false; } return valid; } } }