1 import org.aswing.ComboBoxEditor;
2 import org.aswing.Component;
3 import org.aswing.EventDispatcher;
4 import org.aswing.JTextField;
5 import org.aswing.UIManager;
6 import org.aswing.utils.Delegate;
7
8
12 class org.aswing.DefaultComboBoxEditor extends EventDispatcher implements ComboBoxEditor {
13
14
19 public static var ON_ACT:String = EventDispatcher.ON_ACT;
20
21 private var textField:JTextField;
22 private var value:Object;
23
24 public function DefaultComboBoxEditor(){
25 value = null;
26 }
27
28 public function addActionListener(func:Function, obj:Object):Object{
29 return addEventListener(ON_ACT, func, obj);
30 }
31
32 public function setEditable(b:Boolean):Void{
33 getTextField().setEditable(b);
34 getTextField().setEnabled(b);
35 if(b){
36 value = null;
37 }
38 }
39
40 public function isEditable():Boolean{
41 return getTextField().isEditable();
42 }
43
44 public function getEditorComponent() : Component {
45 return getTextField();
46 }
47
48 public function setValue(v : Object) : Void {
49 getTextField().setText(v.toString());
50 if(!isEditable()){
51 value = v;
52 }
53 }
54
55 public function getValue() : Object {
56 if(!isEditable() && value != null){
57 return value;
58 }else{
59 return getTextField().getText();
60 }
61 }
62
63 public function selectAll() : Void {
64
65 }
66
67
68
69
70 private function getTextField():JTextField{
71 if(textField == null){
72 textField = new JTextField(null, 1);
73 textField.setBorder(null);
74 textField.setForeground(UIManager.getColor("ComboBox.foreground"));
75 textField.setTriggerEnabled(false);
76 textField.setOpaque(false);
77 initHandler();
78 }
79 return textField;
80 }
81 private function initHandler():Void{
82 var lis:Object = new Object();
83 lis[JTextField.ON_SHOWN] = lis[JTextField.ON_CREATED] = Delegate.create(this, __textShown);
84 lis[JTextField.ON_DESTROY] = lis[JTextField.ON_HIDDEN] = Delegate.create(this, __textHide);
85 textField.addEventListener(lis);
86 }
87 private function __textShown():Void{
88 Key.removeListener(this);
89 Key.addListener(this);
90 }
91 private function __textHide():Void{
92 Key.removeListener(this);
93 }
94
95 private function onKeyDown():Void{
96 if(Key.getCode() == Key.ENTER){
97 if(getTextField().isFocused()){
98 dispatchEvent(ON_ACT, createEventObj(ON_ACT));
99 }
100 }
101 }
102 }