1  /*
     2   Copyright aswing.org, see the LICENCE.txt.
     3  */
     4  import org.aswing.BorderLayout;
     5  import org.aswing.Component;
     6  import org.aswing.Event;
     7  import org.aswing.JLabel;
     8  import org.aswing.JToolTip;
     9  import org.aswing.LookAndFeel;
    10  import org.aswing.plaf.ComponentUI;
    11  import org.aswing.plaf.ToolTipUI;
    12  import org.aswing.utils.HashMap;
    13  
    14  /**
    15   *
    16   * @author iiley
    17   */
    18  class org.aswing.plaf.basic.BasicToolTipUI extends ToolTipUI {
    19  	
    20  	//shared instance
    21  	private static var toolTipUI:ToolTipUI;
    22      public static function createInstance(c:Component):ComponentUI {
    23      	if(toolTipUI == null){
    24      		toolTipUI = new BasicToolTipUI();
    25      	}
    26          return toolTipUI;
    27      }
    28  	
    29  	private var labels:HashMap;
    30  	private var tipListeners:HashMap;
    31  	
    32  	public function BasicToolTipUI() {
    33  		super();
    34  		labels = new HashMap();
    35  		tipListeners = new HashMap();
    36  	}
    37  	
    38      public function installUI(c:Component):Void{
    39      	var b:JToolTip = JToolTip(c);
    40          installDefaults(b);
    41          initallComponents(b);
    42          installListeners(b);
    43      }
    44  
    45  	private function installDefaults(b:JToolTip):Void{
    46          // load shared instance defaults
    47          var pp:String = "ToolTip.";
    48          LookAndFeel.installColorsAndFont(b, pp + "background", pp + "foreground", pp + "font");
    49          LookAndFeel.installBorder(b, pp + "border");
    50          LookAndFeel.installBasicProperties(b, pp);
    51  	}
    52  		
    53  	private function getLabel(c:Component):JLabel{
    54  		return JLabel(labels.get(c.getID()));
    55  	}
    56  	
    57  	private function initallComponents(b:JToolTip):Void{
    58  		b.setLayout(new BorderLayout());
    59  		var label:JLabel = new JLabel(b.getTipText());
    60  		b.append(label, BorderLayout.CENTER);
    61  		labels.put(b.getID(), label);
    62  	}
    63  	
    64  	private function installListeners(b:JToolTip):Void{
    65  		var lis:Object = b.addEventListener(JToolTip.ON_TIP_TEXT_CHANGED, __tipTextChanged, this);
    66  		tipListeners.put(b.getID(), lis);
    67  	}
    68  	
    69  	private function __tipTextChanged(e:Event):Void{
    70  		var toolTip:JToolTip = JToolTip(e.getSource());
    71  		getLabel(toolTip).setText(toolTip.getTipText());
    72  	}
    73  	
    74      public function uninstallUI(c:Component):Void{
    75      	var b:JToolTip = JToolTip(c);
    76          uninstallDefaults(b);
    77          uninstallListeners(b);
    78          uninstallComponents(b);
    79      }
    80      
    81      private function uninstallDefaults(b:JToolTip):Void{
    82      	LookAndFeel.uninstallBorder(b);
    83      }
    84      
    85      private function uninstallComponents(b:JToolTip):Void{
    86      	var label:JLabel = JLabel(labels.remove(b.getID()));
    87      	b.remove(label);
    88      }    
    89      
    90      private function uninstallListeners(b:JToolTip):Void{
    91      	b.removeEventListener(tipListeners.remove(b.getID()));
    92      }
    93  
    94  }
    95