93 lines
2.7 KiB
Haxe
Executable File
93 lines
2.7 KiB
Haxe
Executable File
package haxework.gui;
|
|
|
|
import haxework.dispath.Dispatcher;
|
|
import haxework.dispath.IDispatcher;
|
|
import flash.events.Event;
|
|
import flash.text.TextFormat;
|
|
import flash.text.TextFieldAutoSize;
|
|
import flash.text.TextField;
|
|
import haxework.core.IDisposable;
|
|
import haxework.core.Const;
|
|
import flash.events.KeyboardEvent;
|
|
import flash.events.TextEvent;
|
|
import flash.text.TextFieldType;
|
|
|
|
class InputView extends TextView implements IDisposable {
|
|
|
|
public var hint(default, set):String;
|
|
public var dispatcher(default, null):IDispatcher<InputViewListener>;
|
|
public var onKeyUp(null, set):InputViewListener;
|
|
|
|
private var hintTextField:TextField;
|
|
|
|
public function new() {
|
|
super();
|
|
dispatcher = new Dispatcher<InputViewListener>();
|
|
textField.addEventListener(Event.CHANGE, onTextChange);
|
|
textField.addEventListener(KeyboardEvent.KEY_UP, _onKeyUp);
|
|
textField.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);
|
|
|
|
hintTextField = buildHintTextField();
|
|
content.addChild(hintTextField);
|
|
}
|
|
|
|
override private function buildTextField():TextField {
|
|
return new InputTextField();
|
|
}
|
|
|
|
private function set_hint(value:String):String {
|
|
if (hint != value) {
|
|
hint = value;
|
|
invalidate();
|
|
}
|
|
return hint;
|
|
}
|
|
|
|
private function buildHintTextField():TextField {
|
|
var textField:TextField = new TextField();
|
|
textField.autoSize = TextFieldAutoSize.NONE;
|
|
textField.type = TextFieldType.DYNAMIC;
|
|
textField.multiline = false;
|
|
textField.defaultTextFormat = new TextFormat("Arial", 16, 0xa0a0a0);
|
|
textField.mouseEnabled = false;
|
|
return textField;
|
|
}
|
|
|
|
private function onTextChange(event:Event):Void {
|
|
hintTextField.visible = (textField.text == "");
|
|
}
|
|
|
|
private function _onKeyUp(event:KeyboardEvent):Void {
|
|
event.stopImmediatePropagation();
|
|
dispatcher.dispatch(function(listener) listener.onKeyUp(textField.text));
|
|
}
|
|
|
|
private function onKeyDown(event:KeyboardEvent):Void {
|
|
event.stopImmediatePropagation();
|
|
}
|
|
|
|
override public function update():Void {
|
|
super.update();
|
|
var htf:TextFormat = textField.defaultTextFormat;
|
|
htf.color = 0xa0a0a0;
|
|
htf.size -= 2;
|
|
hintTextField.defaultTextFormat = htf;
|
|
hintTextField.text = hint == null ? "" : hint;
|
|
placeTextField(hintTextField);
|
|
}
|
|
|
|
public function dispose():Void {
|
|
textField.removeEventListener(Event.CHANGE, onTextChange);
|
|
textField.removeEventListener(KeyboardEvent.KEY_UP, _onKeyUp);
|
|
textField.removeEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);
|
|
}
|
|
|
|
private function set_onKeyUp(value:InputViewListener):InputViewListener {
|
|
dispatcher.addListener(value);
|
|
return value;
|
|
}
|
|
}
|
|
|
|
typedef InputViewListener = {
|
|
public function onKeyUp(text:String):Void;
|
|
} |