1  /*
     2   Copyright aswing.org, see the LICENCE.txt.
     3  */
     4  
     5  import org.aswing.Component;
     6  import org.aswing.geom.Dimension;
     7  import org.aswing.geom.Rectangle;
     8  import org.aswing.graphices.AdvancedPen;
     9  import org.aswing.graphices.Graphics;
    10  import org.aswing.Insets;
    11  import org.aswing.JSeparator;
    12  import org.aswing.LookAndFeel;
    13  import org.aswing.plaf.ComponentUI;
    14  import org.aswing.plaf.SeparatorUI;
    15  
    16  /**
    17   * A Basic L&F implementation of SeparatorUI.  This implementation 
    18   * is a "combined" view/controller.
    19   *
    20   * @author iiley
    21   */
    22  class org.aswing.plaf.basic.BasicSeparatorUI extends SeparatorUI {
    23  	
    24  	
    25  	private static var basicSeparatorUI:BasicSeparatorUI;
    26      // ********************************
    27      //          Create Shared PLAF
    28      // ********************************
    29      public static function createInstance(c:Component):ComponentUI {
    30      	if(basicSeparatorUI == null){
    31      		basicSeparatorUI = new BasicSeparatorUI();
    32      	}
    33          return basicSeparatorUI;
    34      }
    35  	
    36  	
    37  	public function BasicSeparatorUI(){
    38  	}
    39  	
    40  	public function installUI(c:Component):Void{
    41  		installDefaults(JSeparator(c));
    42  		installListeners(JSeparator(c));
    43  	}
    44  	
    45  	public function uninstallUI(c:Component):Void{
    46  		uninstallDefaults(JSeparator(c));
    47  		uninstallListeners(JSeparator(c));
    48  	}
    49  	
    50  	public function installDefaults(s:JSeparator):Void{
    51  		LookAndFeel.installColors(s, "Separator.background", "Separator.foreground");
    52  		LookAndFeel.installBasicProperties(s, "Separator.");
    53  		LookAndFeel.installBorder(s, "Separator.border");
    54  	}
    55  	
    56  	public function uninstallDefaults(s:JSeparator):Void{
    57  		LookAndFeel.uninstallBorder(s);
    58  	}
    59  	public function installListeners(s:JSeparator):Void{
    60  	}
    61  	public function uninstallListeners(s:JSeparator):Void{
    62  	}
    63  	
    64  	public function paint(c:Component, g:Graphics, b:Rectangle):Void{
    65  		var sp:JSeparator = JSeparator(c);
    66  		if (sp.getOrientation() == JSeparator.VERTICAL){
    67  			var pen:AdvancedPen = new AdvancedPen(c.getForeground(), 1, undefined, undefined, "none");
    68  			g.drawLine(pen, b.x+0.5, b.y, b.x+0.5, b.y+b.height);
    69  			pen.setASColor(c.getBackground());
    70  			g.drawLine(pen, b.x+1.5, b.y, b.x+1.5, b.y+b.height);
    71  		}else{
    72  			var pen:AdvancedPen = new AdvancedPen(c.getForeground(), 1, undefined, undefined, "none");
    73  			g.drawLine(pen, b.x, b.y+0.5, b.x+b.width, b.y+0.5);
    74  			pen.setASColor(c.getBackground());
    75  			g.drawLine(pen, b.x, b.y+1.5, b.x+b.width, b.y+1.5);
    76  		}
    77  	}
    78  	
    79  	public function getPreferredSize(c:Component):Dimension{
    80  		var sp:JSeparator = JSeparator(c);
    81  		var insets:Insets = sp.getInsets();
    82  		if (sp.getOrientation() == JSeparator.VERTICAL){
    83  			return insets.roundsSize(new Dimension(2, 0));
    84  		}else{
    85  			return insets.roundsSize(new Dimension(0, 2));
    86  		}
    87  	}
    88      public function getMaximumSize(c:Component):Dimension{
    89  		var sp:JSeparator = JSeparator(c);
    90  		var insets:Insets = sp.getInsets();
    91  		var size:Dimension = insets.roundsSize();
    92  		if (sp.getOrientation() == JSeparator.VERTICAL){
    93  			return new Dimension(2 + size.width, Number.MAX_VALUE);
    94  		}else{
    95  			return new Dimension(Number.MAX_VALUE, 2 + size.height);
    96  		}
    97      } 	
    98  }
    99