home *** CD-ROM | disk | FTP | other *** search
- package javax.swing.text.html;
-
- import java.awt.Component;
- import java.awt.Container;
- import java.awt.Graphics;
- import java.awt.Rectangle;
- import java.awt.Shape;
- import java.util.BitSet;
- import java.util.Vector;
- import javax.swing.SizeRequirements;
- import javax.swing.event.DocumentEvent;
- import javax.swing.text.AttributeSet;
- import javax.swing.text.BoxView;
- import javax.swing.text.CompositeView;
- import javax.swing.text.Element;
- import javax.swing.text.StyleConstants;
- import javax.swing.text.View;
- import javax.swing.text.ViewFactory;
- import javax.swing.text.html.HTML.Attribute;
- import javax.swing.text.html.HTML.Tag;
-
- class TableView extends BoxView implements ViewFactory {
- private AttributeSet attr;
- private StyleSheet.BoxPainter painter;
- private int cellSpacing;
- private int captionIndex = -1;
- private boolean relativeCells;
- private boolean multiRowCells;
- int[] columnSpans;
- int[] columnOffsets;
- SizeRequirements[] columnRequirements;
- RowIterator rowIterator = new RowIterator(this);
- ColumnIterator colIterator = new ColumnIterator(this);
- Vector rows = new Vector();
- boolean gridValid = false;
- private static final BitSet EMPTY = new BitSet();
-
- public TableView(Element var1) {
- super(var1, 1);
- }
-
- protected RowView createTableRow(Element var1) {
- Object var2 = var1.getAttributes().getAttribute(StyleConstants.NameAttribute);
- return var2 == Tag.TR ? new RowView(this, var1) : null;
- }
-
- public int getColumnCount() {
- return this.columnSpans.length;
- }
-
- public int getColumnSpan(int var1) {
- return var1 < this.columnSpans.length ? this.columnSpans[var1] : 0;
- }
-
- public int getRowCount() {
- return this.rows.size();
- }
-
- public int getMultiRowSpan(int var1, int var2) {
- RowView var3 = this.getRow(var1);
- RowView var4 = this.getRow(var2);
- if (var3 != null && var4 != null) {
- int var5 = var3.viewIndex;
- int var6 = var4.viewIndex;
- int var7 = ((BoxView)this).getOffset(1, var6) - ((BoxView)this).getOffset(1, var5) + ((BoxView)this).getSpan(1, var6);
- return var7;
- } else {
- return 0;
- }
- }
-
- public int getRowSpan(int var1) {
- RowView var2 = this.getRow(var1);
- return var2 != null ? ((BoxView)this).getSpan(1, var2.viewIndex) : 0;
- }
-
- RowView getRow(int var1) {
- return var1 < this.rows.size() ? (RowView)this.rows.elementAt(var1) : null;
- }
-
- protected int getColumnsOccupied(View var1) {
- AttributeSet var2 = var1.getElement().getAttributes();
- String var3 = (String)var2.getAttribute(Attribute.COLSPAN);
- if (var3 != null) {
- try {
- return Integer.parseInt(var3);
- } catch (NumberFormatException var5) {
- }
- }
-
- return 1;
- }
-
- protected int getRowsOccupied(View var1) {
- AttributeSet var2 = var1.getElement().getAttributes();
- String var3 = (String)var2.getAttribute(Attribute.ROWSPAN);
- if (var3 != null) {
- try {
- return Integer.parseInt(var3);
- } catch (NumberFormatException var5) {
- }
- }
-
- return 1;
- }
-
- protected void invalidateGrid() {
- this.gridValid = false;
- }
-
- protected StyleSheet getStyleSheet() {
- HTMLDocument var1 = (HTMLDocument)((View)this).getDocument();
- return var1.getStyleSheet();
- }
-
- void updateInsets() {
- short var1 = (short)((int)this.painter.getInset(1, this));
- short var2 = (short)((int)this.painter.getInset(3, this));
- if (this.captionIndex != -1) {
- View var3 = ((CompositeView)this).getView(this.captionIndex);
- short var4 = (short)((int)var3.getPreferredSpan(1));
- AttributeSet var5 = var3.getAttributes();
- Object var6 = var5.getAttribute(javax.swing.text.html.CSS.Attribute.CAPTION_SIDE);
- if (var6 != null && var6.equals("bottom")) {
- var2 += var4;
- } else {
- var1 += var4;
- }
- }
-
- ((CompositeView)this).setInsets(var1, (short)((int)this.painter.getInset(2, this)), var2, (short)((int)this.painter.getInset(4, this)));
- }
-
- protected void setPropertiesFromAttributes() {
- StyleSheet var1 = this.getStyleSheet();
- this.attr = var1.getViewAttributes(this);
- this.painter = var1.getBoxPainter(this.attr);
- if (this.attr != null) {
- ((CompositeView)this).setInsets((short)((int)this.painter.getInset(1, this)), (short)((int)this.painter.getInset(2, this)), (short)((int)this.painter.getInset(3, this)), (short)((int)this.painter.getInset(4, this)));
- }
-
- }
-
- void updateGrid() {
- if (!this.gridValid) {
- this.relativeCells = false;
- this.multiRowCells = false;
- this.captionIndex = -1;
- this.rows.removeAllElements();
- int var1 = ((CompositeView)this).getViewCount();
-
- for(int var2 = 0; var2 < var1; ++var2) {
- View var3 = ((CompositeView)this).getView(var2);
- if (var3 instanceof RowView) {
- this.rows.addElement(var3);
- RowView var4 = (RowView)var3;
- var4.clearFilledColumns();
- var4.rowIndex = this.rows.size() - 1;
- var4.viewIndex = var2;
- } else {
- Object var17 = var3.getElement().getAttributes().getAttribute(StyleConstants.NameAttribute);
- if (var17 instanceof HTML.Tag) {
- HTML.Tag var5 = (HTML.Tag)var17;
- if (var5 == Tag.CAPTION) {
- this.captionIndex = var2;
- }
- }
- }
- }
-
- int var16 = 0;
- int var18 = this.rows.size();
-
- for(int var19 = 0; var19 < var18; ++var19) {
- RowView var6 = this.getRow(var19);
- int var7 = 0;
-
- for(int var8 = 0; var8 < ((CompositeView)var6).getViewCount(); ++var7) {
- View var9 = ((CompositeView)var6).getView(var8);
- if (!this.relativeCells) {
- AttributeSet var10 = var9.getAttributes();
- CSS.LengthValue var11 = (CSS.LengthValue)var10.getAttribute(javax.swing.text.html.CSS.Attribute.WIDTH);
- if (var11 != null && var11.isPercentage()) {
- this.relativeCells = true;
- }
- }
-
- while(var6.isFilled(var7)) {
- ++var7;
- }
-
- int var21 = this.getRowsOccupied(var9);
- if (var21 > 1) {
- this.multiRowCells = true;
- }
-
- int var22 = this.getColumnsOccupied(var9);
- if (var22 > 1 || var21 > 1) {
- int var12 = var19 + var21;
- int var13 = var7 + var22;
-
- for(int var14 = var19; var14 < var12; ++var14) {
- for(int var15 = var7; var15 < var13; ++var15) {
- if (var14 != var19 || var15 != var7) {
- this.addFill(var14, var15);
- }
- }
- }
-
- if (var22 > 1) {
- var7 += var22 - 1;
- }
- }
-
- ++var8;
- }
-
- var16 = Math.max(var16, var7);
- }
-
- this.columnSpans = new int[var16];
- this.columnOffsets = new int[var16];
- this.columnRequirements = new SizeRequirements[var16];
-
- for(int var20 = 0; var20 < var16; ++var20) {
- this.columnRequirements[var20] = new SizeRequirements();
- }
-
- this.gridValid = true;
- }
-
- }
-
- void addFill(int var1, int var2) {
- RowView var3 = this.getRow(var1);
- if (var3 != null) {
- var3.fillColumn(var2);
- }
-
- }
-
- protected void layoutColumns(int var1, int[] var2, int[] var3, SizeRequirements[] var4) {
- this.colIterator.setLayoutArrays(var2, var3, var1);
- CSS.calculateTiledLayout(this.colIterator, var1);
- }
-
- void calculateColumnRequirements(int var1) {
- boolean var2 = false;
- int var3 = this.getRowCount();
-
- for(int var4 = 0; var4 < var3; ++var4) {
- RowView var5 = this.getRow(var4);
- int var6 = 0;
- int var7 = ((CompositeView)var5).getViewCount();
-
- for(int var8 = 0; var8 < var7; ++var6) {
- View var9;
- for(var9 = ((CompositeView)var5).getView(var8); var5.isFilled(var6); ++var6) {
- }
-
- this.getRowsOccupied(var9);
- int var11 = this.getColumnsOccupied(var9);
- if (var11 == 1) {
- this.checkSingleColumnCell(var1, var6, var9);
- } else {
- var2 = true;
- var6 += var11 - 1;
- }
-
- ++var8;
- }
- }
-
- if (var2) {
- for(int var12 = 0; var12 < var3; ++var12) {
- RowView var13 = this.getRow(var12);
- int var14 = 0;
- int var15 = ((CompositeView)var13).getViewCount();
-
- for(int var16 = 0; var16 < var15; ++var14) {
- View var10;
- for(var10 = ((CompositeView)var13).getView(var16); var13.isFilled(var14); ++var14) {
- }
-
- int var17 = this.getColumnsOccupied(var10);
- if (var17 > 1) {
- this.checkMultiColumnCell(var1, var14, var17, var10);
- var14 += var17 - 1;
- }
-
- ++var16;
- }
- }
- }
-
- }
-
- void checkSingleColumnCell(int var1, int var2, View var3) {
- SizeRequirements var4 = this.columnRequirements[var2];
- var4.minimum = Math.max((int)var3.getMinimumSpan(var1), var4.minimum);
- var4.preferred = Math.max((int)var3.getPreferredSpan(var1), var4.preferred);
- var4.maximum = Math.max((int)var3.getMaximumSpan(var1), var4.maximum);
- }
-
- void checkMultiColumnCell(int var1, int var2, int var3, View var4) {
- long var5 = 0L;
- long var7 = 0L;
- long var9 = 0L;
-
- for(int var11 = 0; var11 < var3; ++var11) {
- SizeRequirements var12 = this.columnRequirements[var2 + var11];
- var5 += (long)var12.minimum;
- var7 += (long)var12.preferred;
- var9 += (long)var12.maximum;
- }
-
- int var20 = (int)var4.getMinimumSpan(var1);
- if ((long)var20 > var5) {
- SizeRequirements[] var13 = new SizeRequirements[var3];
-
- for(int var14 = 0; var14 < var3; ++var14) {
- SizeRequirements var15 = var13[var14] = this.columnRequirements[var2 + var14];
- var15.maximum = Math.max(var15.maximum, (int)var4.getMaximumSpan(var1));
- }
-
- int[] var23 = new int[var3];
- int[] var16 = new int[var3];
- SizeRequirements.calculateTiledPositions(var20, (SizeRequirements)null, var13, var16, var23);
-
- for(int var17 = 0; var17 < var3; ++var17) {
- SizeRequirements var18 = var13[var17];
- var18.minimum = Math.max(var23[var17], var18.minimum);
- var18.preferred = Math.max(var18.minimum, var18.preferred);
- var18.maximum = Math.max(var18.preferred, var18.maximum);
- }
- }
-
- int var21 = (int)var4.getPreferredSpan(var1);
- if ((long)var21 > var7) {
- SizeRequirements[] var22 = new SizeRequirements[var3];
-
- for(int var24 = 0; var24 < var3; ++var24) {
- SizeRequirements var25 = var22[var24] = this.columnRequirements[var2 + var24];
- }
-
- int[] var26 = new int[var3];
- int[] var27 = new int[var3];
- SizeRequirements.calculateTiledPositions(var21, (SizeRequirements)null, var22, var27, var26);
-
- for(int var28 = 0; var28 < var3; ++var28) {
- SizeRequirements var19 = var22[var28];
- var19.preferred = Math.max(var26[var28], var19.preferred);
- var19.maximum = Math.max(var19.preferred, var19.maximum);
- }
- }
-
- }
-
- boolean spanSetFromAttributes(int var1, SizeRequirements var2) {
- AttributeSet var3 = this.getAttributes();
- if (var1 == 0) {
- CSS.LengthValue var4 = (CSS.LengthValue)var3.getAttribute(javax.swing.text.html.CSS.Attribute.WIDTH);
- if (var4 != null && !var4.isPercentage()) {
- var2.minimum = var2.preferred = var2.maximum = (int)var4.getValue();
- return true;
- }
- } else {
- CSS.LengthValue var5 = (CSS.LengthValue)var3.getAttribute(javax.swing.text.html.CSS.Attribute.HEIGHT);
- if (var5 != null && !var5.isPercentage()) {
- var2.minimum = var2.preferred = var2.maximum = (int)var5.getValue();
- return true;
- }
- }
-
- return false;
- }
-
- protected SizeRequirements calculateMinorAxisRequirements(int var1, SizeRequirements var2) {
- this.updateGrid();
- this.calculateColumnRequirements(var1);
- if (var2 == null) {
- var2 = new SizeRequirements();
- }
-
- long var3 = 0L;
- long var5 = 0L;
- long var7 = 0L;
- int var9 = this.columnRequirements.length;
-
- for(int var10 = 0; var10 < var9; ++var10) {
- SizeRequirements var11 = this.columnRequirements[var10];
- var3 += (long)var11.minimum;
- var5 += (long)var11.preferred;
- var7 += (long)var11.maximum;
- }
-
- int var16 = (var9 - 1) * this.cellSpacing;
- var3 += (long)var16;
- var5 += (long)var16;
- var2.minimum = (int)var3;
- var2.preferred = (int)var5;
- var2.maximum = (int)var5;
- this.spanSetFromAttributes(var1, var2);
- Object var12 = this.attr.getAttribute(javax.swing.text.html.CSS.Attribute.TEXT_ALIGN);
- if (var12 != null) {
- String var13 = var12.toString();
- if (var13.equals("left")) {
- var2.alignment = 0.0F;
- } else if (var13.equals("center")) {
- var2.alignment = 0.5F;
- } else if (var13.equals("right")) {
- var2.alignment = 1.0F;
- } else {
- var2.alignment = 0.0F;
- }
- } else {
- var2.alignment = 0.0F;
- }
-
- return var2;
- }
-
- protected SizeRequirements calculateMajorAxisRequirements(int var1, SizeRequirements var2) {
- this.updateInsets();
- this.rowIterator.updateAdjustments();
- var2 = CSS.calculateTiledRequirements(this.rowIterator, var2);
- var2.maximum = var2.preferred;
- return var2;
- }
-
- protected void layoutMinorAxis(int var1, int var2, int[] var3, int[] var4) {
- this.updateGrid();
- int var5 = this.getRowCount();
-
- for(int var6 = 0; var6 < var5; ++var6) {
- RowView var7 = this.getRow(var6);
- ((BoxView)var7).layoutChanged(var2);
- }
-
- this.layoutColumns(var1, this.columnOffsets, this.columnSpans, this.columnRequirements);
- super.layoutMinorAxis(var1, var2, var3, var4);
- }
-
- protected void layoutMajorAxis(int var1, int var2, int[] var3, int[] var4) {
- this.rowIterator.setLayoutArrays(var3, var4);
- CSS.calculateTiledLayout(this.rowIterator, var1);
- if (this.captionIndex != -1) {
- View var5 = ((CompositeView)this).getView(this.captionIndex);
- int var6 = (int)var5.getPreferredSpan(1);
- var4[this.captionIndex] = var6;
- short var7 = (short)((int)this.painter.getInset(3, this));
- if (var7 != ((CompositeView)this).getBottomInset()) {
- var3[this.captionIndex] = var1 + var7;
- } else {
- var3[this.captionIndex] = -((CompositeView)this).getTopInset();
- }
- }
-
- }
-
- protected View getViewAtPosition(int var1, Rectangle var2) {
- int var3 = ((CompositeView)this).getViewCount();
-
- for(int var4 = 0; var4 < var3; ++var4) {
- View var5 = ((CompositeView)this).getView(var4);
- int var6 = var5.getStartOffset();
- int var7 = var5.getEndOffset();
- if (var1 >= var6 && var1 < var7) {
- if (var2 != null) {
- ((BoxView)this).childAllocation(var4, var2);
- }
-
- return var5;
- }
- }
-
- if (var1 == ((View)this).getEndOffset()) {
- View var8 = ((CompositeView)this).getView(var3 - 1);
- if (var2 != null) {
- ((BoxView)this).childAllocation(var3 - 1, var2);
- }
-
- return var8;
- } else {
- return null;
- }
- }
-
- public AttributeSet getAttributes() {
- if (this.attr == null) {
- StyleSheet var1 = this.getStyleSheet();
- this.attr = var1.getViewAttributes(this);
- }
-
- return this.attr;
- }
-
- public void paint(Graphics var1, Shape var2) {
- Rectangle var3 = var2.getBounds();
- ((BoxView)this).setSize((float)var3.width, (float)var3.height);
- if (this.captionIndex != -1) {
- short var4 = (short)((int)this.painter.getInset(1, this));
- short var5 = (short)((int)this.painter.getInset(3, this));
- if (var4 != ((CompositeView)this).getTopInset()) {
- int var6 = ((CompositeView)this).getTopInset() - var4;
- var3.y += var6;
- var3.height -= var6;
- } else {
- var3.height -= ((CompositeView)this).getBottomInset() - var5;
- }
- }
-
- this.painter.paint(var1, (float)var3.x, (float)var3.y, (float)var3.width, (float)var3.height, this);
- int var7 = ((CompositeView)this).getViewCount();
-
- for(int var8 = 0; var8 < var7; ++var8) {
- View var9 = ((CompositeView)this).getView(var8);
- var9.paint(var1, ((BoxView)this).getChildAllocation(var8, var2));
- }
-
- }
-
- public void setParent(View var1) {
- super.setParent(var1);
- this.setPropertiesFromAttributes();
- }
-
- public ViewFactory getViewFactory() {
- return this;
- }
-
- public void insertUpdate(DocumentEvent var1, Shape var2, ViewFactory var3) {
- super.insertUpdate(var1, var2, this);
- }
-
- public void removeUpdate(DocumentEvent var1, Shape var2, ViewFactory var3) {
- super.removeUpdate(var1, var2, this);
- }
-
- public void changedUpdate(DocumentEvent var1, Shape var2, ViewFactory var3) {
- super.changedUpdate(var1, var2, this);
- }
-
- protected void forwardUpdate(DocumentEvent.ElementChange var1, DocumentEvent var2, Shape var3, ViewFactory var4) {
- super.forwardUpdate(var1, var2, var3, var4);
- if (var3 != null) {
- Container var5 = ((View)this).getContainer();
- if (var5 != null) {
- Rectangle var6 = var3 instanceof Rectangle ? (Rectangle)var3 : var3.getBounds();
- ((Component)var5).repaint(var6.x, var6.y, var6.width, var6.height);
- }
- }
-
- }
-
- public void replace(int var1, int var2, View[] var3) {
- super.replace(var1, var2, var3);
- this.invalidateGrid();
- }
-
- public View create(Element var1) {
- Object var2 = var1.getAttributes().getAttribute(StyleConstants.NameAttribute);
- if (var2 instanceof HTML.Tag) {
- HTML.Tag var3 = (HTML.Tag)var2;
- if (var3 == Tag.TR) {
- return this.createTableRow(var1);
- }
-
- if (var3 == Tag.TD || var3 == Tag.TH) {
- return new CellView(this, var1);
- }
-
- if (var3 == Tag.CAPTION) {
- return new ParagraphView(var1);
- }
- }
-
- View var5 = ((View)this).getParent();
- if (var5 != null) {
- ViewFactory var4 = var5.getViewFactory();
- if (var4 != null) {
- return var4.create(var1);
- }
- }
-
- return null;
- }
-
- // $FF: synthetic method
- static boolean access$000(TableView var0) {
- return var0.relativeCells;
- }
-
- // $FF: synthetic method
- static int access$100(TableView var0) {
- return var0.cellSpacing;
- }
-
- // $FF: synthetic method
- static boolean access$200(TableView var0) {
- return var0.multiRowCells;
- }
-
- // $FF: synthetic method
- static BitSet access$300() {
- return EMPTY;
- }
- }
-