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  /**
     9   * Default to use a JTextField to be the editor. Just works with string values well.
    10   * @author iiley
    11   */
    12  class org.aswing.DefaultComboBoxEditor extends EventDispatcher implements ComboBoxEditor {
    13  	
    14  	/**
    15  	 * When the editing entered.
    16  	 *<br>
    17  	 * onActionPerformed Event{source:DefaultComboBoxEditor}
    18  	 */	
    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  		//TODO selectAll after FocusManager is down
    65  	}
    66  	
    67  	//------------------------------------------------------
    68  
    69  	
    70  	private function getTextField():JTextField{
    71  		if(textField == null){
    72  			textField = new JTextField(null, 1); //set rows 1 to ensure the JTextField has a perfer height when empty
    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  }