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 / text / html / FrameSetView.class (.txt) < prev    next >
Encoding:
Java Class File  |  1979-12-31  |  3.4 KB  |  201 lines

  1. package javax.swing.text.html;
  2.  
  3. import java.util.StringTokenizer;
  4. import javax.swing.SizeRequirements;
  5. import javax.swing.text.AttributeSet;
  6. import javax.swing.text.BoxView;
  7. import javax.swing.text.CompositeView;
  8. import javax.swing.text.Element;
  9. import javax.swing.text.View;
  10. import javax.swing.text.html.HTML.Attribute;
  11.  
  12. class FrameSetView extends BoxView {
  13.    String[] children;
  14.    int[] percentChildren;
  15.    int[] absoluteChildren;
  16.    int[] relativeChildren;
  17.    int percentTotals;
  18.    int absoluteTotals;
  19.    int relativeTotals;
  20.  
  21.    public FrameSetView(Element var1, int var2) {
  22.       super(var1, var2);
  23.       if (var2 == 1) {
  24.          this.children = this.parseRowColSpec(Attribute.ROWS);
  25.       } else {
  26.          this.children = this.parseRowColSpec(Attribute.COLS);
  27.       }
  28.  
  29.       this.init();
  30.    }
  31.  
  32.    private String[] parseRowColSpec(HTML.Attribute var1) {
  33.       AttributeSet var2 = ((View)this).getElement().getAttributes();
  34.       String var3 = "*";
  35.       if (var2 != null && var2.getAttribute(var1) != null) {
  36.          var3 = (String)var2.getAttribute(var1);
  37.       }
  38.  
  39.       StringTokenizer var4 = new StringTokenizer(var3, ",");
  40.       int var5 = var4.countTokens();
  41.       String[] var6 = new String[var5];
  42.  
  43.       for(int var7 = 0; var7 < var5; ++var7) {
  44.          var6[var7] = var4.nextToken().trim();
  45.          if (var6[var7].equals("100%")) {
  46.             var6[var7] = "*";
  47.          }
  48.       }
  49.  
  50.       return var6;
  51.    }
  52.  
  53.    private void init() {
  54.       this.percentChildren = new int[this.children.length];
  55.       this.relativeChildren = new int[this.children.length];
  56.       this.absoluteChildren = new int[this.children.length];
  57.  
  58.       for(int var1 = 0; var1 < this.children.length; ++var1) {
  59.          this.percentChildren[var1] = -1;
  60.          this.relativeChildren[var1] = -1;
  61.          this.absoluteChildren[var1] = -1;
  62.          if (this.children[var1].endsWith("*")) {
  63.             if (this.children[var1].length() > 1) {
  64.                this.relativeChildren[var1] = Integer.parseInt(this.children[var1].substring(0, this.children[var1].length() - 1));
  65.                this.relativeTotals += this.relativeChildren[var1];
  66.             } else {
  67.                this.relativeChildren[var1] = 1;
  68.                ++this.relativeTotals;
  69.             }
  70.          } else if (this.children[var1].indexOf(37) != -1) {
  71.             this.percentChildren[var1] = this.parseDigits(this.children[var1]);
  72.             this.percentTotals += this.percentChildren[var1];
  73.          } else {
  74.             this.absoluteChildren[var1] = Integer.parseInt(this.children[var1]);
  75.          }
  76.       }
  77.  
  78.       if (this.percentTotals > 100) {
  79.          for(int var2 = 0; var2 < this.percentChildren.length; ++var2) {
  80.             if (this.percentChildren[var2] > 0) {
  81.                this.percentChildren[var2] = this.percentChildren[var2] * 100 / this.percentTotals;
  82.             }
  83.          }
  84.  
  85.          this.percentTotals = 100;
  86.       }
  87.  
  88.    }
  89.  
  90.    protected void layoutMajorAxis(int var1, int var2, int[] var3, int[] var4) {
  91.       SizeRequirements.calculateTiledPositions(var1, (SizeRequirements)null, this.getChildRequests(var1, var2), var3, var4);
  92.    }
  93.  
  94.    protected SizeRequirements[] getChildRequests(int var1, int var2) {
  95.       int[] var3 = new int[this.children.length];
  96.       this.spread(var1, var3);
  97.       int var4 = ((CompositeView)this).getViewCount();
  98.       SizeRequirements[] var5 = new SizeRequirements[var4];
  99.  
  100.       for(int var6 = 0; var6 < var4; ++var6) {
  101.          View var7 = ((CompositeView)this).getView(var6);
  102.          if (!(var7 instanceof NoFramesView)) {
  103.             var5[var6] = new SizeRequirements((int)var7.getMinimumSpan(var2), var3[var6], (int)var7.getMaximumSpan(var2), 0.5F);
  104.          } else {
  105.             int var8 = (int)var7.getMinimumSpan(var2);
  106.             int var9 = (int)var7.getPreferredSpan(var2);
  107.             int var10 = (int)var7.getMaximumSpan(var2);
  108.             float var11 = var7.getAlignment(var2);
  109.             var5[var6] = new SizeRequirements(var8, var9, var10, var11);
  110.          }
  111.       }
  112.  
  113.       return var5;
  114.    }
  115.  
  116.    private void spread(int var1, int[] var2) {
  117.       if (var1 != 0) {
  118.          int var3 = 0;
  119.          int var4 = var1;
  120.  
  121.          for(int var5 = 0; var5 < var2.length; ++var5) {
  122.             if (this.absoluteChildren[var5] > 0) {
  123.                var2[var5] = this.absoluteChildren[var5];
  124.                var4 -= var2[var5];
  125.             }
  126.          }
  127.  
  128.          var3 = var4;
  129.  
  130.          for(int var6 = 0; var6 < var2.length; ++var6) {
  131.             if (this.percentChildren[var6] > 0 && var3 > 0) {
  132.                var2[var6] = this.percentChildren[var6] * var3 / 100;
  133.                var4 -= var2[var6];
  134.             } else if (this.percentChildren[var6] > 0 && var3 <= 0) {
  135.                var2[var6] = var1 / var2.length;
  136.                var4 -= var2[var6];
  137.             }
  138.          }
  139.  
  140.          if (var4 > 0 && this.relativeTotals > 0) {
  141.             for(int var13 = 0; var13 < var2.length; ++var13) {
  142.                if (this.relativeChildren[var13] > 0) {
  143.                   var2[var13] = var4 * this.relativeChildren[var13] / this.relativeTotals;
  144.                }
  145.             }
  146.          } else if (var4 > 0) {
  147.             float var7 = (float)(var1 - var4);
  148.             float[] var8 = new float[var2.length];
  149.             var4 = var1;
  150.  
  151.             for(int var9 = 0; var9 < var2.length; ++var9) {
  152.                var8[var9] = (float)var2[var9] / var7 * 100.0F;
  153.                var2[var9] = (int)((float)var1 * var8[var9] / 100.0F);
  154.                var4 -= var2[var9];
  155.             }
  156.  
  157.             int var10 = 0;
  158.  
  159.             while(var4 != 0) {
  160.                if (var4 < 0) {
  161.                   int var10002 = var2[var10++]--;
  162.                   ++var4;
  163.                } else {
  164.                   int var15 = var2[var10++]++;
  165.                   --var4;
  166.                }
  167.  
  168.                if (var10 == var2.length) {
  169.                   var10 = 0;
  170.                }
  171.             }
  172.          }
  173.  
  174.       }
  175.    }
  176.  
  177.    private int parseDigits(String var1) {
  178.       int var2 = 0;
  179.  
  180.       for(int var3 = 0; var3 < var1.length(); ++var3) {
  181.          char var4 = var1.charAt(var3);
  182.          if (Character.isDigit(var4)) {
  183.             var2 = var2 * 10 + Character.digit(var4, 10);
  184.          }
  185.       }
  186.  
  187.       return var2;
  188.    }
  189.  
  190.    public void setParent(View var1) {
  191.       super.setParent(var1);
  192.       if (var1 == null) {
  193.          for(int var2 = 0; var2 < ((CompositeView)this).getViewCount(); ++var2) {
  194.             View var3 = ((CompositeView)this).getView(var2);
  195.             var3.setParent((View)null);
  196.          }
  197.       }
  198.  
  199.    }
  200. }
  201.