home *** CD-ROM | disk | FTP | other *** search
Wrap
package javax.swing.text; import java.awt.Graphics; import java.awt.Point; import java.awt.Rectangle; import java.awt.Shape; import javax.swing.event.DocumentEvent; import javax.swing.text.Position.Bias; public class ParagraphView extends FlowView implements TabExpander { private int justification; private float lineSpacing; protected int firstLineIndent; private int tabBase; static Class i18nStrategy; static char[] tabChars = new char[1]; static char[] tabDecimalChars; public ParagraphView(Element var1) { super(var1, 1); this.setPropertiesFromAttributes(); Document var2 = var1.getDocument(); Object var3 = var2.getProperty("i18n"); if (var3 != null && var3.equals(Boolean.TRUE)) { try { if (i18nStrategy == null) { String var4 = "javax.swing.text.TextLayoutStrategy"; ClassLoader var5 = this.getClass().getClassLoader(); if (var5 != null) { i18nStrategy = var5.loadClass(var4); } else { i18nStrategy = Class.forName(var4); } } Object var7 = i18nStrategy.newInstance(); if (var7 instanceof FlowView.FlowStrategy) { super.strategy = (FlowView.FlowStrategy)var7; } } catch (Throwable var6) { throw new StateInvariantError("ParagraphView: Can't create i18n strategy: " + var6.getMessage()); } } } protected void setJustification(int var1) { this.justification = var1; } protected void setLineSpacing(float var1) { this.lineSpacing = var1; } protected void setFirstLineIndent(float var1) { this.firstLineIndent = (int)var1; } protected void setPropertiesFromAttributes() { AttributeSet var1 = ((View)this).getAttributes(); if (var1 != null) { ((CompositeView)this).setParagraphInsets(var1); this.setJustification(StyleConstants.getAlignment(var1)); this.lineSpacing = StyleConstants.getLineSpacing(var1); this.firstLineIndent = (int)StyleConstants.getFirstLineIndent(var1); } } protected int getLayoutViewCount() { return super.layoutPool.getViewCount(); } protected View getLayoutView(int var1) { return super.layoutPool.getView(var1); } protected void adjustRow(Row var1, int var2, int var3) { } protected int getNextNorthSouthVisualPositionFrom(int var1, Position.Bias var2, Shape var3, int var4, Position.Bias[] var5) throws BadLocationException { int var12; if (var1 == -1) { var12 = var4 == 1 ? ((CompositeView)this).getViewCount() - 1 : 0; } else { if (var2 == Bias.Backward && var1 > 0) { var12 = ((FlowView)this).getViewIndexAtPosition(var1 - 1); } else { var12 = ((FlowView)this).getViewIndexAtPosition(var1); } if (var4 == 1) { if (var12 == 0) { return -1; } --var12; } else { ++var12; if (var12 >= ((CompositeView)this).getViewCount()) { return -1; } } } JTextComponent var7 = (JTextComponent)((View)this).getContainer(); Caret var8 = var7.getCaret(); Point var9 = var8 != null ? var8.getMagicCaretPosition() : null; int var10; if (var9 == null) { Rectangle var11 = var7.getUI().modelToView(var7, var1, var2); if (var11 == null) { var10 = 0; } else { var10 = var11.getBounds().x; } } else { var10 = var9.x; } return this.getClosestPositionTo(var1, var2, var3, var4, var5, var12, var10); } protected int getClosestPositionTo(int var1, Position.Bias var2, Shape var3, int var4, Position.Bias[] var5, int var6, int var7) throws BadLocationException { JTextComponent var8 = (JTextComponent)((View)this).getContainer(); Document var9 = ((View)this).getDocument(); AbstractDocument var10 = var9 instanceof AbstractDocument ? (AbstractDocument)var9 : null; View var11 = ((CompositeView)this).getView(var6); int var19 = -1; var5[0] = Bias.Forward; int var13 = 0; for(int var14 = var11.getViewCount(); var13 < var14; ++var13) { View var15 = var11.getView(var13); int var16 = var15.getStartOffset(); boolean var17 = var10 != null ? var10.isLeftToRight(var16, var16 + 1) : true; if (var17) { var19 = var16; for(int var18 = var15.getEndOffset(); var19 < var18; ++var19) { if (var8.modelToView(var19).getBounds().x >= var7) { return var19; } } --var19; } else { for(var19 = var15.getEndOffset() - 1; var19 >= var16; --var19) { if (var8.modelToView(var19).getBounds().x >= var7) { return var19; } } ++var19; } } if (var19 == -1) { return ((View)this).getStartOffset(); } else { return var19; } } protected boolean flipEastAndWestAtEnds(int var1, Position.Bias var2) { Document var3 = ((View)this).getDocument(); return var3 instanceof AbstractDocument && !((AbstractDocument)var3).isLeftToRight(((View)this).getStartOffset(), ((View)this).getStartOffset() + 1); } public int getFlowSpan(int var1) { View var2 = ((CompositeView)this).getView(var1); int var3 = 0; if (var2 instanceof Row) { Row var4 = (Row)var2; var3 = ((CompositeView)var4).getLeftInset() + ((CompositeView)var4).getRightInset(); } int var5 = super.layoutSpan - var3; return var5; } public int getFlowStart(int var1) { View var2 = ((CompositeView)this).getView(var1); short var3 = 0; if (var2 instanceof Row) { Row var4 = (Row)var2; var3 = ((CompositeView)var4).getLeftInset(); } return this.tabBase + var3; } protected View createRow() { Element var1 = ((View)this).getElement(); Row var2 = new Row(this, var1); if (this.lineSpacing > 1.0F) { float var3 = ((BoxView)var2).getPreferredSpan(1); float var4 = var3 * this.lineSpacing - var3; if (var4 > 0.0F) { ((CompositeView)var2).setInsets(((CompositeView)var2).getTopInset(), ((CompositeView)var2).getLeftInset(), (short)((int)var4), ((CompositeView)var2).getRightInset()); } } return var2; } public float nextTabStop(float var1, int var2) { if (this.justification != 0) { return var1 + 10.0F; } else { var1 -= (float)this.tabBase; TabSet var3 = this.getTabSet(); 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 TabSet getTabSet() { return StyleConstants.getTabSet(((View)this).getElement().getAttributes()); } 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 = super.layoutPool.getViewCount(); var1 < var2 && var4 < var9; var1 = var7) { View var6 = super.layoutPool.getView(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; } protected float getTabBase() { return (float)this.tabBase; } public void paint(Graphics var1, Shape var2) { Rectangle var3 = var2 instanceof Rectangle ? (Rectangle)var2 : var2.getBounds(); this.tabBase = var3.x + ((CompositeView)this).getLeftInset(); super.paint(var1, var2); } public float getAlignment(int var1) { switch (var1) { case 0: return 0.5F; case 1: float var2 = 0.5F; if (((CompositeView)this).getViewCount() != 0) { int var3 = (int)((BoxView)this).getPreferredSpan(1); View var4 = ((CompositeView)this).getView(0); int var5 = (int)var4.getPreferredSpan(1); var2 = var3 != 0 ? (float)(var5 / 2) / (float)var3 : 0.0F; } return var2; 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 changedUpdate(DocumentEvent var1, Shape var2, ViewFactory var3) { this.setPropertiesFromAttributes(); ((BoxView)this).layoutChanged(0); ((BoxView)this).layoutChanged(1); super.changedUpdate(var1, var2, var3); } // $FF: synthetic method static int access$000(ParagraphView var0) { return var0.justification; } static { tabChars[0] = '\t'; tabDecimalChars = new char[2]; tabDecimalChars[0] = '\t'; tabDecimalChars[1] = '.'; } }