home *** CD-ROM | disk | FTP | other *** search
/ PC Plus SuperCD (UK) 2000 March / pcp161a.iso / handson / files / copyjava.exe / com / sun / java / swing / ScrollPaneLayout.class (.txt) < prev    next >
Encoding:
Java Class File  |  1998-02-26  |  7.6 KB  |  404 lines

  1. package com.sun.java.swing;
  2.  
  3. import com.sun.java.swing.border.Border;
  4. import java.awt.Component;
  5. import java.awt.Container;
  6. import java.awt.Dimension;
  7. import java.awt.Insets;
  8. import java.awt.LayoutManager;
  9. import java.awt.Rectangle;
  10. import java.io.Serializable;
  11.  
  12. public class ScrollPaneLayout implements LayoutManager, ScrollPaneConstants, Serializable {
  13.    protected JViewport viewport;
  14.    protected JScrollBar vsb;
  15.    protected JScrollBar hsb;
  16.    protected JViewport rowHead;
  17.    protected JViewport colHead;
  18.    protected Component lowerLeft;
  19.    protected Component lowerRight;
  20.    protected Component upperLeft;
  21.    protected Component upperRight;
  22.    protected int vsbPolicy = 20;
  23.    protected int hsbPolicy = 30;
  24.  
  25.    protected Component addSingletonComponent(Component var1, Component var2) {
  26.       if (var1 != null && var1 != var2) {
  27.          var1.getParent().remove(var1);
  28.       }
  29.  
  30.       return var2;
  31.    }
  32.  
  33.    public void addLayoutComponent(String var1, Component var2) {
  34.       if (var1.equals("VIEWPORT")) {
  35.          this.viewport = (JViewport)this.addSingletonComponent(this.viewport, var2);
  36.       } else if (var1.equals("VERTICAL_SCROLLBAR")) {
  37.          this.vsb = (JScrollBar)this.addSingletonComponent(this.vsb, var2);
  38.       } else if (var1.equals("HORIZONTAL_SCROLLBAR")) {
  39.          this.hsb = (JScrollBar)this.addSingletonComponent(this.hsb, var2);
  40.       } else if (var1.equals("ROW_HEADER")) {
  41.          this.rowHead = (JViewport)this.addSingletonComponent(this.rowHead, var2);
  42.       } else if (var1.equals("COLUMN_HEADER")) {
  43.          this.colHead = (JViewport)this.addSingletonComponent(this.colHead, var2);
  44.       } else if (var1.equals("LOWER_LEFT_CORNER")) {
  45.          this.lowerLeft = this.addSingletonComponent(this.lowerLeft, var2);
  46.       } else if (var1.equals("LOWER_RIGHT_CORNER")) {
  47.          this.lowerRight = this.addSingletonComponent(this.lowerRight, var2);
  48.       } else if (var1.equals("UPPER_LEFT_CORNER")) {
  49.          this.upperLeft = this.addSingletonComponent(this.upperLeft, var2);
  50.       } else if (var1.equals("UPPER_RIGHT_CORNER")) {
  51.          this.upperRight = this.addSingletonComponent(this.upperRight, var2);
  52.       } else {
  53.          throw new IllegalArgumentException("invalid layout key " + var1);
  54.       }
  55.    }
  56.  
  57.    public void removeLayoutComponent(Component var1) {
  58.       if (var1 == this.viewport) {
  59.          this.viewport = null;
  60.       } else if (var1 == this.vsb) {
  61.          this.vsb = null;
  62.       } else if (var1 == this.hsb) {
  63.          this.hsb = null;
  64.       } else if (var1 == this.rowHead) {
  65.          this.rowHead = null;
  66.       } else if (var1 == this.colHead) {
  67.          this.colHead = null;
  68.       } else if (var1 == this.lowerLeft) {
  69.          this.lowerLeft = null;
  70.       } else if (var1 == this.upperLeft) {
  71.          this.upperLeft = null;
  72.       } else {
  73.          if (var1 == this.upperRight) {
  74.             this.upperRight = null;
  75.          }
  76.  
  77.       }
  78.    }
  79.  
  80.    public int getVerticalScrollBarPolicy() {
  81.       return this.vsbPolicy;
  82.    }
  83.  
  84.    public void setVerticalScrollBarPolicy(int var1) {
  85.       switch (var1) {
  86.          case 20:
  87.          case 21:
  88.          case 22:
  89.             this.vsbPolicy = var1;
  90.             return;
  91.          default:
  92.             throw new IllegalArgumentException("invalid verticalScrollBarPolicy");
  93.       }
  94.    }
  95.  
  96.    public int getHorizontalScrollBarPolicy() {
  97.       return this.hsbPolicy;
  98.    }
  99.  
  100.    public void setHorizontalScrollBarPolicy(int var1) {
  101.       switch (var1) {
  102.          case 30:
  103.          case 31:
  104.          case 32:
  105.             this.hsbPolicy = var1;
  106.             return;
  107.          default:
  108.             throw new IllegalArgumentException("invalid horizontalScrollBarPolicy");
  109.       }
  110.    }
  111.  
  112.    public JViewport getViewport() {
  113.       return this.viewport;
  114.    }
  115.  
  116.    public JScrollBar getHorizontalScrollBar() {
  117.       return this.hsb;
  118.    }
  119.  
  120.    public JScrollBar getVerticalScrollBar() {
  121.       return this.vsb;
  122.    }
  123.  
  124.    public JViewport getRowHeader() {
  125.       return this.rowHead;
  126.    }
  127.  
  128.    public JViewport getColumnHeader() {
  129.       return this.colHead;
  130.    }
  131.  
  132.    public Component getCorner(String var1) {
  133.       if (var1.equals("LOWER_LEFT_CORNER")) {
  134.          return this.lowerLeft;
  135.       } else if (var1.equals("LOWER_RIGHT_CORNER")) {
  136.          return this.lowerRight;
  137.       } else if (var1.equals("UPPER_LEFT_CORNER")) {
  138.          return this.upperLeft;
  139.       } else {
  140.          return var1.equals("UPPER_RIGHT_CORNER") ? this.upperRight : null;
  141.       }
  142.    }
  143.  
  144.    public Dimension preferredLayoutSize(Container var1) {
  145.       Insets var2 = var1.getInsets();
  146.       int var3 = var2.left + var2.right;
  147.       int var4 = var2.top + var2.bottom;
  148.       Dimension var5 = null;
  149.       Dimension var6 = null;
  150.       Component var7 = null;
  151.       if (this.viewport != null) {
  152.          var5 = this.viewport.getPreferredSize();
  153.          var6 = this.viewport.getViewSize();
  154.          var7 = this.viewport.getView();
  155.       }
  156.  
  157.       if (var5 != null) {
  158.          var3 += var5.width;
  159.          var4 += var5.height;
  160.       }
  161.  
  162.       Border var8 = ((JScrollPane)var1).getViewportBorder();
  163.       if (var8 != null) {
  164.          Insets var9 = var8.getBorderInsets(var1);
  165.          var3 += var9.left + var9.right;
  166.          var4 += var9.top + var9.bottom;
  167.       }
  168.  
  169.       if (this.rowHead != null && this.rowHead.isVisible()) {
  170.          var3 += this.rowHead.getPreferredSize().width;
  171.       }
  172.  
  173.       if (this.colHead != null && this.colHead.isVisible()) {
  174.          var4 += this.colHead.getPreferredSize().height;
  175.       }
  176.  
  177.       if (this.vsb != null && this.vsbPolicy != 21) {
  178.          if (this.vsbPolicy == 22) {
  179.             var3 += this.vsb.getPreferredSize().width;
  180.          } else if (var6 != null && var5 != null) {
  181.             boolean var10 = true;
  182.             if (var7 instanceof Scrollable) {
  183.                var10 = !((Scrollable)var7).getScrollableTracksViewportHeight();
  184.             }
  185.  
  186.             if (var10 && var6.height > var5.height) {
  187.                var3 += this.vsb.getPreferredSize().width;
  188.             }
  189.          }
  190.       }
  191.  
  192.       if (this.hsb != null && this.hsbPolicy != 31) {
  193.          if (this.hsbPolicy == 32) {
  194.             var4 += this.hsb.getPreferredSize().height;
  195.          } else if (var6 != null && var5 != null) {
  196.             boolean var11 = true;
  197.             if (var7 instanceof Scrollable) {
  198.                var11 = !((Scrollable)var7).getScrollableTracksViewportWidth();
  199.             }
  200.  
  201.             if (var11 && var6.width > var5.width) {
  202.                var4 += this.hsb.getPreferredSize().height;
  203.             }
  204.          }
  205.       }
  206.  
  207.       return new Dimension(var3, var4);
  208.    }
  209.  
  210.    public Dimension minimumLayoutSize(Container var1) {
  211.       Insets var2 = var1.getInsets();
  212.       int var3 = var2.left + var2.right;
  213.       int var4 = var2.top + var2.bottom;
  214.       if (this.viewport != null) {
  215.          Dimension var5 = this.viewport.getMinimumSize();
  216.          var3 += var5.width;
  217.          var4 += var5.height;
  218.       }
  219.  
  220.       Border var7 = ((JScrollPane)var1).getViewportBorder();
  221.       if (var7 != null) {
  222.          Insets var6 = var7.getBorderInsets(var1);
  223.          var3 += var6.left + var6.right;
  224.          var4 += var6.top + var6.bottom;
  225.       }
  226.  
  227.       if (this.rowHead != null && this.rowHead.isVisible()) {
  228.          Dimension var8 = this.rowHead.getMinimumSize();
  229.          var3 += var8.width;
  230.          var4 = Math.max(var4, var8.height);
  231.       }
  232.  
  233.       if (this.colHead != null && this.colHead.isVisible()) {
  234.          Dimension var9 = this.colHead.getMinimumSize();
  235.          var3 = Math.max(var3, var9.width);
  236.          var4 += var9.height;
  237.       }
  238.  
  239.       if (this.vsb != null && this.vsbPolicy != 21) {
  240.          Dimension var10 = this.vsb.getMinimumSize();
  241.          var3 += var10.width;
  242.          var4 = Math.max(var4, var10.height);
  243.       }
  244.  
  245.       if (this.hsb != null && this.hsbPolicy != 21) {
  246.          Dimension var11 = this.hsb.getMinimumSize();
  247.          var3 = Math.max(var3, var11.width);
  248.          var4 += var11.height;
  249.       }
  250.  
  251.       return new Dimension(var3, var4);
  252.    }
  253.  
  254.    public void layoutContainer(Container var1) {
  255.       Rectangle var2 = new Rectangle(((Component)var1).getSize());
  256.       Insets var3 = var1.getInsets();
  257.       var2.x = var3.left;
  258.       var2.y = var3.top;
  259.       var2.width -= var3.left + var3.right;
  260.       var2.height -= var3.top + var3.bottom;
  261.       Rectangle var4 = new Rectangle(0, var2.y, 0, 0);
  262.       if (this.colHead != null && this.colHead.isVisible()) {
  263.          int var5 = this.colHead.getPreferredSize().height;
  264.          var4.height = var5;
  265.          var2.y += var5;
  266.          var2.height -= var5;
  267.       }
  268.  
  269.       Rectangle var17 = new Rectangle(var2.x, 0, 0, 0);
  270.       if (this.rowHead != null && this.rowHead.isVisible()) {
  271.          int var6 = this.rowHead.getPreferredSize().width;
  272.          var17.width = var6;
  273.          var2.x += var6;
  274.          var2.width -= var6;
  275.       }
  276.  
  277.       Border var18 = ((JScrollPane)var1).getViewportBorder();
  278.       Insets var7;
  279.       if (var18 != null) {
  280.          var7 = var18.getBorderInsets(var1);
  281.          var2.x += var7.left;
  282.          var2.y += var7.top;
  283.          var2.width -= var7.left + var7.right;
  284.          var2.height -= var7.top + var7.bottom;
  285.       } else {
  286.          var7 = new Insets(0, 0, 0, 0);
  287.       }
  288.  
  289.       var4.x = var2.x;
  290.       var17.y = var2.y;
  291.       Component var8 = this.viewport != null ? this.viewport.getView() : null;
  292.       Dimension var9 = var8 != null ? var8.getPreferredSize() : new Dimension(0, 0);
  293.       Dimension var10 = this.viewport != null ? this.viewport.toViewCoordinates(var2.getSize()) : new Dimension(0, 0);
  294.       Rectangle var11 = new Rectangle(0, var2.y - var7.top, 0, 0);
  295.       boolean var12 = this.vsbPolicy == 22 || var9.height > var10.height && this.vsbPolicy == 20;
  296.       if (this.vsb != null && var12) {
  297.          int var13 = this.vsb.getPreferredSize().width;
  298.          var2.width -= var13;
  299.          var11.x = var2.x + var2.width + var7.right;
  300.          var11.width = var13;
  301.       }
  302.  
  303.       Rectangle var20 = new Rectangle(var2.x - var7.left, 0, 0, 0);
  304.       boolean var14 = this.hsbPolicy == 32 || var9.width > var10.width && this.hsbPolicy == 30;
  305.       if (this.hsb != null && var14) {
  306.          int var15 = this.hsb.getPreferredSize().height;
  307.          var2.height -= var15;
  308.          var20.y = var2.y + var2.height + var7.bottom;
  309.          var20.height = var15;
  310.          if (this.vsb != null && !var12 && this.vsbPolicy != 21) {
  311.             var10 = this.viewport.toViewCoordinates(var2.getSize());
  312.             var12 = var9.height > var10.height;
  313.             if (var12) {
  314.                int var16 = this.vsb.getPreferredSize().width;
  315.                var2.width -= var16;
  316.                var11.x = var2.x + var2.width + var7.right;
  317.                var11.width = var16;
  318.             }
  319.          }
  320.       }
  321.  
  322.       var11.height = var2.height + var7.top + var7.bottom;
  323.       var20.width = var2.width + var7.left + var7.right;
  324.       var17.height = var2.height;
  325.       var4.width = var2.width;
  326.       if (this.viewport != null) {
  327.          this.viewport.setBounds(var2);
  328.       }
  329.  
  330.       if (this.rowHead != null) {
  331.          this.rowHead.setBounds(var17);
  332.       }
  333.  
  334.       if (this.colHead != null) {
  335.          this.colHead.setBounds(var4);
  336.       }
  337.  
  338.       if (this.vsb != null) {
  339.          if (var12) {
  340.             this.vsb.setVisible(true);
  341.             this.vsb.setBounds(var11);
  342.          } else {
  343.             this.vsb.setVisible(false);
  344.          }
  345.       }
  346.  
  347.       if (this.hsb != null) {
  348.          if (var14) {
  349.             this.hsb.setVisible(true);
  350.             this.hsb.setBounds(var20);
  351.          } else {
  352.             this.hsb.setVisible(false);
  353.          }
  354.       }
  355.  
  356.       if (this.lowerLeft != null) {
  357.          this.lowerLeft.setBounds(var17.x, var20.y, var17.width, var20.height);
  358.       }
  359.  
  360.       if (this.lowerRight != null) {
  361.          this.lowerRight.setBounds(var11.x, var20.y, var11.width, var20.height);
  362.       }
  363.  
  364.       if (this.upperLeft != null) {
  365.          this.upperLeft.setBounds(var17.x, var4.y, var17.width, var4.height);
  366.       }
  367.  
  368.       if (this.upperRight != null) {
  369.          this.upperRight.setBounds(var11.x, var4.y, var11.width, var4.height);
  370.       }
  371.  
  372.    }
  373.  
  374.    public Rectangle getViewportBorderBounds(JScrollPane var1) {
  375.       Rectangle var2 = new Rectangle(((Component)var1).getSize());
  376.       Insets var3 = ((JComponent)var1).getInsets();
  377.       var2.x = var3.left;
  378.       var2.y = var3.top;
  379.       var2.width -= var3.left + var3.right;
  380.       var2.height -= var3.top + var3.bottom;
  381.       if (this.colHead != null && this.colHead.isVisible()) {
  382.          int var4 = this.colHead.getHeight();
  383.          var2.y += var4;
  384.          var2.height -= var4;
  385.       }
  386.  
  387.       if (this.rowHead != null && this.rowHead.isVisible()) {
  388.          int var5 = this.rowHead.getWidth();
  389.          var2.x += var5;
  390.          var2.width -= var5;
  391.       }
  392.  
  393.       if (this.vsb != null && this.vsb.isVisible()) {
  394.          var2.width -= this.vsb.getWidth();
  395.       }
  396.  
  397.       if (this.hsb != null && this.hsb.isVisible()) {
  398.          var2.height -= this.hsb.getHeight();
  399.       }
  400.  
  401.       return var2;
  402.    }
  403. }
  404.