home *** CD-ROM | disk | FTP | other *** search
/ S283 Planetary Science &n…he Search for Life DVD 2 / DVD-ROM.iso / install / jre1_3 / lib / rt.jar / javax / swing / border / TitledBorder.class (.txt) < prev   
Encoding:
Java Class File  |  1979-12-31  |  6.5 KB  |  385 lines

  1. package javax.swing.border;
  2.  
  3. import java.awt.Color;
  4. import java.awt.Component;
  5. import java.awt.Dimension;
  6. import java.awt.Font;
  7. import java.awt.FontMetrics;
  8. import java.awt.Graphics;
  9. import java.awt.Insets;
  10. import java.awt.Point;
  11. import java.awt.Rectangle;
  12. import javax.swing.UIManager;
  13.  
  14. public class TitledBorder extends AbstractBorder {
  15.    protected String title;
  16.    protected Border border;
  17.    protected int titlePosition;
  18.    protected int titleJustification;
  19.    protected Font titleFont;
  20.    protected Color titleColor;
  21.    private Point textLoc;
  22.    public static final int DEFAULT_POSITION = 0;
  23.    public static final int ABOVE_TOP = 1;
  24.    public static final int TOP = 2;
  25.    public static final int BELOW_TOP = 3;
  26.    public static final int ABOVE_BOTTOM = 4;
  27.    public static final int BOTTOM = 5;
  28.    public static final int BELOW_BOTTOM = 6;
  29.    public static final int DEFAULT_JUSTIFICATION = 0;
  30.    public static final int LEFT = 1;
  31.    public static final int CENTER = 2;
  32.    public static final int RIGHT = 3;
  33.    public static final int LEADING = 4;
  34.    public static final int TRAILING = 5;
  35.    protected static final int EDGE_SPACING = 2;
  36.    protected static final int TEXT_SPACING = 2;
  37.    protected static final int TEXT_INSET_H = 5;
  38.  
  39.    public TitledBorder(String var1) {
  40.       this((Border)null, var1, 4, 2, (Font)null, (Color)null);
  41.    }
  42.  
  43.    public TitledBorder(Border var1) {
  44.       this(var1, "", 4, 2, (Font)null, (Color)null);
  45.    }
  46.  
  47.    public TitledBorder(Border var1, String var2) {
  48.       this(var1, var2, 4, 2, (Font)null, (Color)null);
  49.    }
  50.  
  51.    public TitledBorder(Border var1, String var2, int var3, int var4) {
  52.       this(var1, var2, var3, var4, (Font)null, (Color)null);
  53.    }
  54.  
  55.    public TitledBorder(Border var1, String var2, int var3, int var4, Font var5) {
  56.       this(var1, var2, var3, var4, var5, (Color)null);
  57.    }
  58.  
  59.    public TitledBorder(Border var1, String var2, int var3, int var4, Font var5, Color var6) {
  60.       this.textLoc = new Point();
  61.       this.title = var2;
  62.       this.border = var1;
  63.       this.titleFont = var5;
  64.       this.titleColor = var6;
  65.       this.setTitleJustification(var3);
  66.       this.setTitlePosition(var4);
  67.    }
  68.  
  69.    public void paintBorder(Component var1, Graphics var2, int var3, int var4, int var5, int var6) {
  70.       Border var7 = this.getBorder();
  71.       if (this.getTitle() != null && !this.getTitle().equals("")) {
  72.          Rectangle var8 = new Rectangle(var3 + 2, var4 + 2, var5 - 4, var6 - 4);
  73.          Font var9 = var2.getFont();
  74.          Color var10 = var2.getColor();
  75.          var2.setFont(this.getFont(var1));
  76.          FontMetrics var11 = var2.getFontMetrics();
  77.          int var12 = var11.getHeight();
  78.          int var13 = var11.getDescent();
  79.          int var14 = var11.getAscent();
  80.          int var16 = var11.stringWidth(this.getTitle());
  81.          Insets var17;
  82.          if (var7 != null) {
  83.             var17 = var7.getBorderInsets(var1);
  84.          } else {
  85.             var17 = new Insets(0, 0, 0, 0);
  86.          }
  87.  
  88.          int var18 = this.getTitlePosition();
  89.          switch (var18) {
  90.             case 0:
  91.             case 2:
  92.                int var22 = Math.max(0, var14 / 2 + 2 - 2);
  93.                var8.y += var22;
  94.                var8.height -= var22;
  95.                this.textLoc.y = var8.y - var13 + (var17.top + var14 + var13) / 2;
  96.                break;
  97.             case 1:
  98.                int var15 = var14 + var13 + (Math.max(2, 4) - 2);
  99.                var8.y += var15;
  100.                var8.height -= var15;
  101.                this.textLoc.y = var8.y - (var13 + 2);
  102.                break;
  103.             case 3:
  104.                this.textLoc.y = var8.y + var17.top + var14 + 2;
  105.                break;
  106.             case 4:
  107.                this.textLoc.y = var8.y + var8.height - (var17.bottom + var13 + 2);
  108.                break;
  109.             case 5:
  110.                var8.height -= var12 / 2;
  111.                this.textLoc.y = var8.y + var8.height - var13 + (var14 + var13 - var17.bottom) / 2;
  112.                break;
  113.             case 6:
  114.                var8.height -= var12;
  115.                this.textLoc.y = var8.y + var8.height + var14 + 2;
  116.          }
  117.  
  118.          int var19 = this.getTitleJustification();
  119.          if (AbstractBorder.isLeftToRight(var1)) {
  120.             if (var19 != 4 && var19 != 0) {
  121.                if (var19 == 5) {
  122.                   var19 = 3;
  123.                }
  124.             } else {
  125.                var19 = 1;
  126.             }
  127.          } else if (var19 != 4 && var19 != 0) {
  128.             if (var19 == 5) {
  129.                var19 = 1;
  130.             }
  131.          } else {
  132.             var19 = 3;
  133.          }
  134.  
  135.          switch (var19) {
  136.             case 1:
  137.                this.textLoc.x = var8.x + 5 + var17.left;
  138.                break;
  139.             case 2:
  140.                this.textLoc.x = var8.x + (var8.width - var16) / 2;
  141.                break;
  142.             case 3:
  143.                this.textLoc.x = var8.x + var8.width - (var16 + 5 + var17.right);
  144.          }
  145.  
  146.          if (var7 != null) {
  147.             if (var18 != 2 && var18 != 5 && var18 != 0) {
  148.                var7.paintBorder(var1, var2, var8.x, var8.y, var8.width, var8.height);
  149.             } else {
  150.                Rectangle var20 = new Rectangle();
  151.                Rectangle var21 = var2.getClipBounds();
  152.                var20.setBounds(var21);
  153.                if (computeIntersection(var20, var3, var4, this.textLoc.x, var6)) {
  154.                   var2.setClip(var20);
  155.                   var7.paintBorder(var1, var2, var8.x, var8.y, var8.width, var8.height);
  156.                }
  157.  
  158.                var20.setBounds(var21);
  159.                if (computeIntersection(var20, this.textLoc.x + var16, 0, var5 - var16 - this.textLoc.x, var6)) {
  160.                   var2.setClip(var20);
  161.                   var7.paintBorder(var1, var2, var8.x, var8.y, var8.width, var8.height);
  162.                }
  163.  
  164.                var20.setBounds(var21);
  165.                if (var18 != 2 && var18 != 0) {
  166.                   if (computeIntersection(var20, this.textLoc.x, var4, var16, var6 - var17.bottom - (var6 - var8.height - var8.y))) {
  167.                      var2.setClip(var20);
  168.                      var7.paintBorder(var1, var2, var8.x, var8.y, var8.width, var8.height);
  169.                   }
  170.                } else if (computeIntersection(var20, this.textLoc.x, var8.y + var17.top, var16, var6 - var8.y - var17.top)) {
  171.                   var2.setClip(var20);
  172.                   var7.paintBorder(var1, var2, var8.x, var8.y, var8.width, var8.height);
  173.                }
  174.  
  175.                var2.setClip(var21);
  176.             }
  177.          }
  178.  
  179.          var2.setColor(this.getTitleColor());
  180.          var2.drawString(this.getTitle(), this.textLoc.x, this.textLoc.y);
  181.          var2.setFont(var9);
  182.          var2.setColor(var10);
  183.       } else {
  184.          if (var7 != null) {
  185.             var7.paintBorder(var1, var2, var3, var4, var5, var6);
  186.          }
  187.  
  188.       }
  189.    }
  190.  
  191.    public Insets getBorderInsets(Component var1) {
  192.       return this.getBorderInsets(var1, new Insets(0, 0, 0, 0));
  193.    }
  194.  
  195.    public Insets getBorderInsets(Component var1, Insets var2) {
  196.       int var4 = 0;
  197.       int var5 = 16;
  198.       Border var6 = this.getBorder();
  199.       if (var6 != null) {
  200.          if (var6 instanceof AbstractBorder) {
  201.             ((AbstractBorder)var6).getBorderInsets(var1, var2);
  202.          } else {
  203.             Insets var7 = var6.getBorderInsets(var1);
  204.             var2.top = var7.top;
  205.             var2.right = var7.right;
  206.             var2.bottom = var7.bottom;
  207.             var2.left = var7.left;
  208.          }
  209.       } else {
  210.          var2.left = var2.top = var2.right = var2.bottom = 0;
  211.       }
  212.  
  213.       var2.left += 4;
  214.       var2.right += 4;
  215.       var2.top += 4;
  216.       var2.bottom += 4;
  217.       if (var1 != null && this.getTitle() != null && !this.getTitle().equals("")) {
  218.          Font var8 = this.getFont(var1);
  219.          FontMetrics var3 = var1.getFontMetrics(var8);
  220.          if (var3 != null) {
  221.             var4 = var3.getDescent();
  222.             var5 = var3.getAscent();
  223.          }
  224.  
  225.          switch (this.getTitlePosition()) {
  226.             case 0:
  227.             case 2:
  228.                var2.top += var5 + var4;
  229.                break;
  230.             case 1:
  231.                var2.top += var5 + var4 + (Math.max(2, 4) - 2);
  232.                break;
  233.             case 3:
  234.                var2.top += var5 + var4 + 2;
  235.                break;
  236.             case 4:
  237.                var2.bottom += var5 + var4 + 2;
  238.                break;
  239.             case 5:
  240.                var2.bottom += var5 + var4;
  241.                break;
  242.             case 6:
  243.                var2.bottom += var5 + 2;
  244.          }
  245.  
  246.          return var2;
  247.       } else {
  248.          return var2;
  249.       }
  250.    }
  251.  
  252.    public boolean isBorderOpaque() {
  253.       return false;
  254.    }
  255.  
  256.    public String getTitle() {
  257.       return this.title;
  258.    }
  259.  
  260.    public Border getBorder() {
  261.       Border var1 = this.border;
  262.       if (var1 == null) {
  263.          var1 = UIManager.getBorder("TitledBorder.border");
  264.       }
  265.  
  266.       return var1;
  267.    }
  268.  
  269.    public int getTitlePosition() {
  270.       return this.titlePosition;
  271.    }
  272.  
  273.    public int getTitleJustification() {
  274.       return this.titleJustification;
  275.    }
  276.  
  277.    public Font getTitleFont() {
  278.       Font var1 = this.titleFont;
  279.       if (var1 == null) {
  280.          var1 = UIManager.getFont("TitledBorder.font");
  281.       }
  282.  
  283.       return var1;
  284.    }
  285.  
  286.    public Color getTitleColor() {
  287.       Color var1 = this.titleColor;
  288.       if (var1 == null) {
  289.          var1 = UIManager.getColor("TitledBorder.titleColor");
  290.       }
  291.  
  292.       return var1;
  293.    }
  294.  
  295.    public void setTitle(String var1) {
  296.       this.title = var1;
  297.    }
  298.  
  299.    public void setBorder(Border var1) {
  300.       this.border = var1;
  301.    }
  302.  
  303.    public void setTitlePosition(int var1) {
  304.       switch (var1) {
  305.          case 0:
  306.          case 1:
  307.          case 2:
  308.          case 3:
  309.          case 4:
  310.          case 5:
  311.          case 6:
  312.             this.titlePosition = var1;
  313.             return;
  314.          default:
  315.             throw new IllegalArgumentException(var1 + " is not a valid title position.");
  316.       }
  317.    }
  318.  
  319.    public void setTitleJustification(int var1) {
  320.       switch (var1) {
  321.          case 0:
  322.          case 1:
  323.          case 2:
  324.          case 3:
  325.          case 4:
  326.          case 5:
  327.             this.titleJustification = var1;
  328.             return;
  329.          default:
  330.             throw new IllegalArgumentException(var1 + " is not a valid title justification.");
  331.       }
  332.    }
  333.  
  334.    public void setTitleFont(Font var1) {
  335.       this.titleFont = var1;
  336.    }
  337.  
  338.    public void setTitleColor(Color var1) {
  339.       this.titleColor = var1;
  340.    }
  341.  
  342.    public Dimension getMinimumSize(Component var1) {
  343.       Insets var2 = this.getBorderInsets(var1);
  344.       Dimension var3 = new Dimension(var2.right + var2.left, var2.top + var2.bottom);
  345.       Font var4 = this.getFont(var1);
  346.       FontMetrics var5 = var1.getFontMetrics(var4);
  347.       switch (this.titlePosition) {
  348.          case 0:
  349.          case 2:
  350.          case 3:
  351.          case 4:
  352.          case 5:
  353.          default:
  354.             var3.width += var5.stringWidth(this.getTitle());
  355.             break;
  356.          case 1:
  357.          case 6:
  358.             var3.width = Math.max(var5.stringWidth(this.getTitle()), var3.width);
  359.       }
  360.  
  361.       return var3;
  362.    }
  363.  
  364.    protected Font getFont(Component var1) {
  365.       Font var2;
  366.       if ((var2 = this.getTitleFont()) != null) {
  367.          return var2;
  368.       } else {
  369.          return var1 != null && (var2 = var1.getFont()) != null ? var2 : new Font("Dialog", 0, 12);
  370.       }
  371.    }
  372.  
  373.    private static boolean computeIntersection(Rectangle var0, int var1, int var2, int var3, int var4) {
  374.       int var5 = Math.max(var1, var0.x);
  375.       int var6 = Math.min(var1 + var3, var0.x + var0.width);
  376.       int var7 = Math.max(var2, var0.y);
  377.       int var8 = Math.min(var2 + var4, var0.y + var0.height);
  378.       var0.x = var5;
  379.       var0.y = var7;
  380.       var0.width = var6 - var5;
  381.       var0.height = var8 - var7;
  382.       return var0.width > 0 && var0.height > 0;
  383.    }
  384. }
  385.