home *** CD-ROM | disk | FTP | other *** search
- package com.sun.java.swing.text;
-
- import com.sun.java.swing.event.DocumentEvent;
- import java.awt.Component;
- import java.awt.Container;
- import java.awt.Graphics;
- import java.awt.Rectangle;
- import java.awt.Shape;
- import java.util.Vector;
-
- public class ParagraphView extends BoxView implements TabExpander {
- private int justification;
- private int lineSpacing;
- private int tabBase;
- private int layoutSpan;
- private Vector layoutPool;
- static char[] tabChars = new char[1];
- static char[] tabDecimalChars;
-
- public ParagraphView(Element var1) {
- super(var1, 1);
- AttributeSet var2 = var1.getAttributes();
- ((CompositeView)this).setParagraphInsets(var2);
- this.justification = StyleConstants.getAlignment(var2);
- this.lineSpacing = (int)StyleConstants.getLineSpacing(var2);
- this.layoutSpan = Integer.MAX_VALUE;
- }
-
- protected void loadChildren(ViewFactory var1) {
- this.layoutPool = new Vector();
- Element var2 = ((View)this).getElement();
- int var3 = var2.getElementCount();
-
- for(int var4 = 0; var4 < var3; ++var4) {
- this.layoutPool.addElement(var1.create(var2.getElement(var4)));
- }
-
- }
-
- 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) {
- ((BoxView)this).childAllocation(var4, var2);
- return var5;
- }
- }
-
- return null;
- }
-
- protected void layout(int var1, int var2) {
- if (this.layoutSpan != var1) {
- int var3 = (int)this.getPreferredSpan(1);
- this.rebuildRows(var1);
- int var4 = (int)this.getPreferredSpan(1);
- if (var3 != var4) {
- View var5 = ((View)this).getParent();
- var5.preferenceChanged(this, false, true);
- }
- }
-
- super.layout(var1, var2);
- }
-
- void rebuildRows(int var1) {
- this.layoutSpan = var1;
- int var2 = ((View)this).getStartOffset();
- int var3 = ((View)this).getEndOffset();
- ((CompositeView)this).removeAll();
-
- while(var2 < var3) {
- int var4 = var2;
- Row var5 = new Row(this, ((View)this).getElement());
- ((CompositeView)this).append(var5);
- this.layoutRow(var5, var2);
- var2 = var5.getEndOffset();
- if (var2 <= var4) {
- throw new StateInvariantError("infinite loop in formatting");
- }
- }
-
- }
-
- void layoutRow(Row var1, int var2) {
- int var3 = this.tabBase;
- int var4 = this.layoutSpan;
-
- View var6;
- for(int var5 = ((View)this).getEndOffset(); var2 < var5 && var4 > 0; var2 = var6.getEndOffset()) {
- var6 = this.createView(var2);
- int var7;
- if (var6 instanceof TabableView) {
- var7 = (int)((TabableView)var6).getTabbedSpan((float)var3, this);
- } else {
- var7 = (int)var6.getPreferredSpan(0);
- }
-
- var4 -= var7;
- var3 += var7;
- ((CompositeView)var1).append(var6);
- }
-
- if (var4 < 0) {
- this.adjustRow(var1, this.layoutSpan);
- } else {
- if (((CompositeView)var1).getViewCount() == 0) {
- var6 = this.createView(var2);
- ((CompositeView)var1).append(var6);
- }
-
- }
- }
-
- protected void adjustRow(Row var1, int var2) {
- int var3 = ((CompositeView)var1).getViewCount();
- int var4 = 0;
- int var5 = 0;
- int var6 = 0;
- int var7 = -1;
-
- for(int var9 = 0; var9 < var3; ++var9) {
- View var8 = ((CompositeView)var1).getView(var9);
- int var10 = var2 - var4;
- int var11 = var8.getBreakWeight(0, (float)var4, (float)var10);
- if (var11 >= var5) {
- var5 = var11;
- var7 = var9;
- var6 = var4;
- if (var11 >= 3000) {
- break;
- }
- }
-
- var4 = (int)((float)var4 + var8.getPreferredSpan(0));
- }
-
- if (var7 >= 0) {
- int var14 = var2 - var6;
- View var12 = ((CompositeView)var1).getView(var7);
- var12 = var12.breakView(0, var12.getStartOffset(), (float)var6, (float)var14);
- View[] var15 = new View[]{var12};
- ((BoxView)var1).replace(var7, var3 - var7, var15);
- }
- }
-
- View createView(int var1) {
- int var2 = ((View)this).getElement().getElementIndex(var1);
- View var3 = (View)this.layoutPool.elementAt(var2);
- if (var1 == var3.getStartOffset()) {
- return var3;
- } else {
- var3 = var3.createFragment(var1, var3.getEndOffset());
- return var3;
- }
- }
-
- public float nextTabStop(float var1, int var2) {
- var1 -= (float)this.tabBase;
- TabSet var3 = StyleConstants.getTabSet(((View)this).getElement().getAttributes());
- if (var3 == null) {
- return (float)(this.tabBase + ((int)var1 / 72 + 1) * 72);
- } else {
- TabStop var4 = var3.getTabAfter(var1 + 0.01F);
- if (var4 == null) {
- return (float)this.tabBase + var1 + 5.0F;
- } else {
- int var5 = var4.getAlignment();
- int var6;
- switch (var5) {
- case 0:
- case 3:
- default:
- return (float)this.tabBase + var4.getPosition();
- case 1:
- case 2:
- var6 = this.findOffsetToCharactersInString(tabChars, var2 + 1);
- break;
- case 4:
- var6 = this.findOffsetToCharactersInString(tabDecimalChars, var2 + 1);
- break;
- case 5:
- return (float)this.tabBase + var4.getPosition();
- }
-
- if (var6 == -1) {
- var6 = ((View)this).getEndOffset();
- }
-
- float var7 = this.getPartialSize(var2 + 1, var6);
- switch (var5) {
- case 1:
- case 4:
- return (float)this.tabBase + Math.max(var1, var4.getPosition() - var7);
- case 2:
- return (float)this.tabBase + Math.max(var1, var4.getPosition() - var7 / 2.0F);
- case 3:
- default:
- return var1;
- }
- }
- }
- }
-
- protected float getPartialSize(int var1, int var2) {
- float var3 = 0.0F;
- int var5 = ((CompositeView)this).getViewCount();
- int var4 = ((View)this).getElement().getElementIndex(var1);
-
- int var7;
- for(int var9 = this.layoutPool.size(); var1 < var2 && var4 < var9; var1 = var7) {
- View var6 = (View)this.layoutPool.elementAt(var4++);
- var7 = var6.getEndOffset();
- int var8 = Math.min(var2, var7);
- if (var6 instanceof TabableView) {
- var3 += ((TabableView)var6).getPartialSpan(var1, var8);
- } else {
- if (var1 != var6.getStartOffset() || var8 != var6.getEndOffset()) {
- return 0.0F;
- }
-
- var3 += var6.getPreferredSpan(0);
- }
- }
-
- return var3;
- }
-
- protected int findOffsetToCharactersInString(char[] var1, int var2) {
- int var3 = var1.length;
- int var4 = ((View)this).getEndOffset();
- Segment var5 = new Segment();
-
- try {
- ((View)this).getDocument().getText(var2, var4 - var2, var5);
- } catch (BadLocationException var10) {
- return -1;
- }
-
- int var6 = var5.offset;
-
- for(int var7 = var5.offset + var5.count; var6 < var7; ++var6) {
- char var8 = var5.array[var6];
-
- for(int var9 = 0; var9 < var3; ++var9) {
- if (var8 == var1[var9]) {
- return var6 - var5.offset + var2;
- }
- }
- }
-
- return -1;
- }
-
- public void paint(Graphics var1, Shape var2) {
- Rectangle var3 = var2.getBounds();
- this.tabBase = var3.x + ((CompositeView)this).getLeftInset();
- super.paint(var1, var2);
- }
-
- public float getPreferredSpan(int var1) {
- switch (var1) {
- case 0:
- int var2 = (int)Math.min((long)this.layoutSpan + (long)((CompositeView)this).getLeftInset() + (long)((CompositeView)this).getRightInset(), 2147483647L);
- if (this.layoutSpan != Integer.MAX_VALUE) {
- return (float)var2;
- }
-
- return super.getPreferredSpan(var1);
- case 1:
- return super.getPreferredSpan(var1);
- default:
- throw new IllegalArgumentException("Invalid axis: " + var1);
- }
- }
-
- public float getAlignment(int var1) {
- switch (var1) {
- case 1:
- int var2 = (int)this.getPreferredSpan(1);
- View var3 = ((CompositeView)this).getView(0);
- int var4 = (int)var3.getPreferredSpan(1);
- float var5 = var2 != 0 ? (float)(var4 / 2) / (float)var2 : 0.0F;
- return var5;
- default:
- return super.getAlignment(var1);
- }
- }
-
- public int getResizeWeight(int var1) {
- switch (var1) {
- case 0:
- return 1;
- case 1:
- return 0;
- default:
- throw new IllegalArgumentException("Invalid axis: " + var1);
- }
- }
-
- public View breakView(int var1, float var2, Shape var3) {
- if (var1 == 1) {
- if (var3 != null) {
- Rectangle var4 = var3.getBounds();
- ((BoxView)this).setSize((float)var4.width, (float)var4.height);
- }
-
- return this;
- } else {
- return this;
- }
- }
-
- public int getBreakWeight(int var1, float var2) {
- return var1 == 1 ? 0 : 0;
- }
-
- public void insertUpdate(DocumentEvent var1, Shape var2, ViewFactory var3) {
- Element var4 = ((View)this).getElement();
- DocumentEvent.ElementChange var5 = var1.getChange(var4);
- if (var5 != null) {
- this.updateLogicalChildren(var5, var3);
- }
-
- if (var5 == null || var5.getChildrenRemoved().length == 0) {
- int var6 = var1.getOffset();
- int var7 = var4.getElementIndex(var6);
- View var8 = (View)this.layoutPool.elementAt(var7);
- var8.insertUpdate(var1, (Shape)null, var3);
- }
-
- this.layoutSpan = Integer.MAX_VALUE;
- ((BoxView)this).preferenceChanged((View)null, false, true);
- Rectangle var9 = ((CompositeView)this).getInsideAllocation(var2);
- if (var9 != null) {
- this.layout(var9.width, var9.height);
- Container var10 = ((View)this).getContainer();
- ((Component)var10).repaint(var9.x, var9.y, var9.width, var9.height);
- }
-
- }
-
- void updateLogicalChildren(DocumentEvent.ElementChange var1, ViewFactory var2) {
- int var3 = var1.getIndex();
- Element[] var4 = var1.getChildrenRemoved();
-
- for(int var5 = 0; var5 < var4.length; ++var5) {
- View var6 = (View)this.layoutPool.elementAt(var3);
- var6.setParent((View)null);
- this.layoutPool.removeElementAt(var3);
- }
-
- Element[] var8 = var1.getChildrenAdded();
-
- for(int var7 = 0; var7 < var8.length; ++var7) {
- this.layoutPool.insertElementAt(var2.create(var8[var7]), var3 + var7);
- }
-
- }
-
- public void removeUpdate(DocumentEvent var1, Shape var2, ViewFactory var3) {
- Element var4 = ((View)this).getElement();
- DocumentEvent.ElementChange var5 = var1.getChange(var4);
- if (var5 != null) {
- this.updateLogicalChildren(var5, var3);
- }
-
- if (var5 == null || var5.getChildrenAdded().length == 0) {
- int var6 = var1.getOffset();
- int var7 = var4.getElementIndex(var6);
- View var8 = (View)this.layoutPool.elementAt(var7);
- var8.removeUpdate(var1, (Shape)null, var3);
- }
-
- this.layoutSpan = Integer.MAX_VALUE;
- ((BoxView)this).preferenceChanged((View)null, false, true);
- if (var2 != null) {
- Rectangle var9 = ((CompositeView)this).getInsideAllocation(var2);
- this.layout(var9.width, var9.height);
- Container var10 = ((View)this).getContainer();
- ((Component)var10).repaint(var9.x, var9.y, var9.width, var9.height);
- }
-
- }
-
- public void changedUpdate(DocumentEvent var1, Shape var2, ViewFactory var3) {
- AttributeSet var4 = ((View)this).getElement().getAttributes();
- ((CompositeView)this).setParagraphInsets(var4);
- this.justification = StyleConstants.getAlignment(var4);
- this.lineSpacing = (int)StyleConstants.getLineSpacing(var4);
- Element var5 = ((View)this).getElement();
- DocumentEvent.ElementChange var6 = var1.getChange(var5);
- if (var6 != null) {
- this.updateLogicalChildren(var6, var3);
- }
-
- int var7 = var1.getOffset();
- int var8 = var7 + var1.getLength();
- int var9 = var5.getElementIndex(var7);
- int var10 = var5.getElementIndex(var8 - 1);
-
- for(int var11 = var9; var11 <= var10; ++var11) {
- View var12 = (View)this.layoutPool.elementAt(var11);
- var12.changedUpdate(var1, (Shape)null, var3);
- }
-
- this.layoutSpan = Integer.MAX_VALUE;
- ((BoxView)this).preferenceChanged((View)null, false, true);
- if (var2 != null) {
- Rectangle var14 = ((CompositeView)this).getInsideAllocation(var2);
- this.layout(var14.width, var14.height);
- Container var13 = ((View)this).getContainer();
- ((Component)var13).repaint(var14.x, var14.y, var14.width, var14.height);
- }
-
- }
-
- // $FF: synthetic method
- static int access$0(ParagraphView var0) {
- return var0.justification;
- }
-
- static {
- tabChars[0] = '\t';
- tabDecimalChars = new char[2];
- tabDecimalChars[0] = '\t';
- tabDecimalChars[1] = '.';
- }
- }
-