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 / TableView.class (.txt) < prev    next >
Encoding:
Java Class File  |  1979-12-31  |  5.9 KB  |  361 lines

  1. package javax.swing.text;
  2.  
  3. import java.awt.Component;
  4. import java.awt.Container;
  5. import java.awt.Rectangle;
  6. import java.awt.Shape;
  7. import java.util.BitSet;
  8. import java.util.Vector;
  9. import javax.swing.SizeRequirements;
  10. import javax.swing.event.DocumentEvent;
  11. import javax.swing.text.html.HTML.Attribute;
  12.  
  13. public abstract class TableView extends BoxView {
  14.    int[] columnSpans;
  15.    int[] columnOffsets;
  16.    SizeRequirements[] columnRequirements;
  17.    Vector rows = new Vector();
  18.    boolean gridValid = false;
  19.    private static final BitSet EMPTY = new BitSet();
  20.  
  21.    public TableView(Element var1) {
  22.       super(var1, 1);
  23.    }
  24.  
  25.    protected TableRow createTableRow(Element var1) {
  26.       return new TableRow(this, var1);
  27.    }
  28.  
  29.    protected TableCell createTableCell(Element var1) {
  30.       return new TableCell(this, var1);
  31.    }
  32.  
  33.    int getColumnCount() {
  34.       return this.columnSpans.length;
  35.    }
  36.  
  37.    int getColumnSpan(int var1) {
  38.       return this.columnSpans[var1];
  39.    }
  40.  
  41.    int getRowCount() {
  42.       return this.rows.size();
  43.    }
  44.  
  45.    int getRowSpan(int var1) {
  46.       TableRow var2 = this.getRow(var1);
  47.       return var2 != null ? (int)((View)var2).getPreferredSpan(1) : 0;
  48.    }
  49.  
  50.    TableRow getRow(int var1) {
  51.       return var1 < this.rows.size() ? (TableRow)this.rows.elementAt(var1) : null;
  52.    }
  53.  
  54.    int getColumnsOccupied(View var1) {
  55.       AttributeSet var2 = var1.getElement().getAttributes();
  56.       String var3 = (String)var2.getAttribute(Attribute.COLSPAN);
  57.       if (var3 != null) {
  58.          try {
  59.             return Integer.parseInt(var3);
  60.          } catch (NumberFormatException var5) {
  61.          }
  62.       }
  63.  
  64.       return 1;
  65.    }
  66.  
  67.    int getRowsOccupied(View var1) {
  68.       AttributeSet var2 = var1.getElement().getAttributes();
  69.       String var3 = (String)var2.getAttribute(Attribute.ROWSPAN);
  70.       if (var3 != null) {
  71.          try {
  72.             return Integer.parseInt(var3);
  73.          } catch (NumberFormatException var5) {
  74.          }
  75.       }
  76.  
  77.       return 1;
  78.    }
  79.  
  80.    void invalidateGrid() {
  81.       this.gridValid = false;
  82.    }
  83.  
  84.    protected void forwardUpdate(DocumentEvent.ElementChange var1, DocumentEvent var2, Shape var3, ViewFactory var4) {
  85.       super.forwardUpdate(var1, var2, var3, var4);
  86.       if (var3 != null) {
  87.          Container var5 = ((View)this).getContainer();
  88.          if (var5 != null) {
  89.             Rectangle var6 = var3 instanceof Rectangle ? (Rectangle)var3 : var3.getBounds();
  90.             ((Component)var5).repaint(var6.x, var6.y, var6.width, var6.height);
  91.          }
  92.       }
  93.  
  94.    }
  95.  
  96.    public void replace(int var1, int var2, View[] var3) {
  97.       super.replace(var1, var2, var3);
  98.       this.invalidateGrid();
  99.    }
  100.  
  101.    void updateGrid() {
  102.       if (!this.gridValid) {
  103.          this.rows.removeAllElements();
  104.          int var1 = ((CompositeView)this).getViewCount();
  105.  
  106.          for(int var2 = 0; var2 < var1; ++var2) {
  107.             View var3 = ((CompositeView)this).getView(var2);
  108.             if (var3 instanceof TableRow) {
  109.                this.rows.addElement(var3);
  110.                TableRow var4 = (TableRow)var3;
  111.                var4.clearFilledColumns();
  112.                var4.setRow(var2);
  113.             }
  114.          }
  115.  
  116.          int var16 = 0;
  117.          int var17 = this.rows.size();
  118.  
  119.          for(int var5 = 0; var5 < var17; ++var5) {
  120.             TableRow var6 = this.getRow(var5);
  121.             int var7 = 0;
  122.  
  123.             for(int var8 = 0; var8 < ((CompositeView)var6).getViewCount(); ++var7) {
  124.                View var9;
  125.                for(var9 = ((CompositeView)var6).getView(var8); var6.isFilled(var7); ++var7) {
  126.                }
  127.  
  128.                int var10 = this.getRowsOccupied(var9);
  129.                int var11 = this.getColumnsOccupied(var9);
  130.                if (var11 > 1 || var10 > 1) {
  131.                   int var12 = var5 + var10;
  132.                   int var13 = var7 + var11;
  133.  
  134.                   for(int var14 = var5; var14 < var12; ++var14) {
  135.                      for(int var15 = var7; var15 < var13; ++var15) {
  136.                         if (var14 != var5 || var15 != var7) {
  137.                            this.addFill(var14, var15);
  138.                         }
  139.                      }
  140.                   }
  141.  
  142.                   if (var11 > 1) {
  143.                      var7 += var11 - 1;
  144.                   }
  145.                }
  146.  
  147.                ++var8;
  148.             }
  149.  
  150.             var16 = Math.max(var16, var7);
  151.          }
  152.  
  153.          this.columnSpans = new int[var16];
  154.          this.columnOffsets = new int[var16];
  155.          this.columnRequirements = new SizeRequirements[var16];
  156.  
  157.          for(int var18 = 0; var18 < var16; ++var18) {
  158.             this.columnRequirements[var18] = new SizeRequirements();
  159.          }
  160.  
  161.          this.gridValid = true;
  162.       }
  163.  
  164.    }
  165.  
  166.    void addFill(int var1, int var2) {
  167.       TableRow var3 = this.getRow(var1);
  168.       if (var3 != null) {
  169.          var3.fillColumn(var2);
  170.       }
  171.  
  172.    }
  173.  
  174.    protected void layoutColumns(int var1, int[] var2, int[] var3, SizeRequirements[] var4) {
  175.       SizeRequirements.calculateTiledPositions(var1, (SizeRequirements)null, var4, var2, var3);
  176.    }
  177.  
  178.    protected void layoutMinorAxis(int var1, int var2, int[] var3, int[] var4) {
  179.       this.updateGrid();
  180.       int var5 = this.getRowCount();
  181.  
  182.       for(int var6 = 0; var6 < var5; ++var6) {
  183.          TableRow var7 = this.getRow(var6);
  184.          ((BoxView)var7).layoutChanged(var2);
  185.       }
  186.  
  187.       this.layoutColumns(var1, this.columnOffsets, this.columnSpans, this.columnRequirements);
  188.       super.layoutMinorAxis(var1, var2, var3, var4);
  189.    }
  190.  
  191.    protected SizeRequirements calculateMinorAxisRequirements(int var1, SizeRequirements var2) {
  192.       this.updateGrid();
  193.       this.calculateColumnRequirements(var1);
  194.       if (var2 == null) {
  195.          var2 = new SizeRequirements();
  196.       }
  197.  
  198.       long var3 = 0L;
  199.       long var5 = 0L;
  200.       long var7 = 0L;
  201.  
  202.       for(int var9 = 0; var9 < this.columnRequirements.length; ++var9) {
  203.          SizeRequirements var10 = this.columnRequirements[var9];
  204.          var3 += (long)var10.minimum;
  205.          var5 += (long)var10.preferred;
  206.          var7 += (long)var10.maximum;
  207.       }
  208.  
  209.       var2.minimum = (int)var3;
  210.       var2.preferred = (int)var5;
  211.       var2.maximum = (int)var7;
  212.       var2.alignment = 0.0F;
  213.       return var2;
  214.    }
  215.  
  216.    void calculateColumnRequirements(int var1) {
  217.       boolean var2 = false;
  218.       int var3 = this.getRowCount();
  219.  
  220.       for(int var4 = 0; var4 < var3; ++var4) {
  221.          TableRow var5 = this.getRow(var4);
  222.          int var6 = 0;
  223.          int var7 = ((CompositeView)var5).getViewCount();
  224.  
  225.          for(int var8 = 0; var8 < var7; ++var6) {
  226.             View var9;
  227.             for(var9 = ((CompositeView)var5).getView(var8); var5.isFilled(var6); ++var6) {
  228.             }
  229.  
  230.             this.getRowsOccupied(var9);
  231.             int var11 = this.getColumnsOccupied(var9);
  232.             if (var11 == 1) {
  233.                this.checkSingleColumnCell(var1, var6, var9);
  234.             } else {
  235.                var2 = true;
  236.                var6 += var11 - 1;
  237.             }
  238.  
  239.             ++var8;
  240.          }
  241.       }
  242.  
  243.       if (var2) {
  244.          for(int var12 = 0; var12 < var3; ++var12) {
  245.             TableRow var13 = this.getRow(var12);
  246.             int var14 = 0;
  247.             int var15 = ((CompositeView)var13).getViewCount();
  248.  
  249.             for(int var16 = 0; var16 < var15; ++var14) {
  250.                View var10;
  251.                for(var10 = ((CompositeView)var13).getView(var16); var13.isFilled(var14); ++var14) {
  252.                }
  253.  
  254.                int var17 = this.getColumnsOccupied(var10);
  255.                if (var17 > 1) {
  256.                   this.checkMultiColumnCell(var1, var14, var17, var10);
  257.                   var14 += var17 - 1;
  258.                }
  259.  
  260.                ++var16;
  261.             }
  262.          }
  263.       }
  264.  
  265.    }
  266.  
  267.    void checkSingleColumnCell(int var1, int var2, View var3) {
  268.       SizeRequirements var4 = this.columnRequirements[var2];
  269.       var4.minimum = Math.max((int)var3.getMinimumSpan(var1), var4.minimum);
  270.       var4.preferred = Math.max((int)var3.getPreferredSpan(var1), var4.preferred);
  271.       var4.maximum = Math.max((int)var3.getMaximumSpan(var1), var4.maximum);
  272.    }
  273.  
  274.    void checkMultiColumnCell(int var1, int var2, int var3, View var4) {
  275.       long var5 = 0L;
  276.       long var7 = 0L;
  277.       long var9 = 0L;
  278.  
  279.       for(int var11 = 0; var11 < var3; ++var11) {
  280.          SizeRequirements var12 = this.columnRequirements[var2 + var11];
  281.          var5 += (long)var12.minimum;
  282.          var7 += (long)var12.preferred;
  283.          var9 += (long)var12.maximum;
  284.       }
  285.  
  286.       int var20 = (int)var4.getMinimumSpan(var1);
  287.       if ((long)var20 > var5) {
  288.          SizeRequirements[] var13 = new SizeRequirements[var3];
  289.  
  290.          for(int var14 = 0; var14 < var3; ++var14) {
  291.             SizeRequirements var15 = var13[var14] = this.columnRequirements[var2 + var14];
  292.             var15.maximum = Math.max(var15.maximum, (int)var4.getMaximumSpan(var1));
  293.          }
  294.  
  295.          int[] var23 = new int[var3];
  296.          int[] var16 = new int[var3];
  297.          SizeRequirements.calculateTiledPositions(var20, (SizeRequirements)null, var13, var16, var23);
  298.  
  299.          for(int var17 = 0; var17 < var3; ++var17) {
  300.             SizeRequirements var18 = var13[var17];
  301.             var18.minimum = Math.max(var23[var17], var18.minimum);
  302.             var18.preferred = Math.max(var18.minimum, var18.preferred);
  303.             var18.maximum = Math.max(var18.preferred, var18.maximum);
  304.          }
  305.       }
  306.  
  307.       int var21 = (int)var4.getPreferredSpan(var1);
  308.       if ((long)var21 > var7) {
  309.          SizeRequirements[] var22 = new SizeRequirements[var3];
  310.  
  311.          for(int var24 = 0; var24 < var3; ++var24) {
  312.             SizeRequirements var25 = var22[var24] = this.columnRequirements[var2 + var24];
  313.          }
  314.  
  315.          int[] var26 = new int[var3];
  316.          int[] var27 = new int[var3];
  317.          SizeRequirements.calculateTiledPositions(var21, (SizeRequirements)null, var22, var27, var26);
  318.  
  319.          for(int var28 = 0; var28 < var3; ++var28) {
  320.             SizeRequirements var19 = var22[var28];
  321.             var19.preferred = Math.max(var26[var28], var19.preferred);
  322.             var19.maximum = Math.max(var19.preferred, var19.maximum);
  323.          }
  324.       }
  325.  
  326.    }
  327.  
  328.    protected View getViewAtPosition(int var1, Rectangle var2) {
  329.       int var3 = ((CompositeView)this).getViewCount();
  330.  
  331.       for(int var4 = 0; var4 < var3; ++var4) {
  332.          View var5 = ((CompositeView)this).getView(var4);
  333.          int var6 = var5.getStartOffset();
  334.          int var7 = var5.getEndOffset();
  335.          if (var1 >= var6 && var1 < var7) {
  336.             if (var2 != null) {
  337.                ((BoxView)this).childAllocation(var4, var2);
  338.             }
  339.  
  340.             return var5;
  341.          }
  342.       }
  343.  
  344.       if (var1 == ((View)this).getEndOffset()) {
  345.          View var8 = ((CompositeView)this).getView(var3 - 1);
  346.          if (var2 != null) {
  347.             ((BoxView)this).childAllocation(var3 - 1, var2);
  348.          }
  349.  
  350.          return var8;
  351.       } else {
  352.          return null;
  353.       }
  354.    }
  355.  
  356.    // $FF: synthetic method
  357.    static BitSet access$000() {
  358.       return EMPTY;
  359.    }
  360. }
  361.