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

  1. package javax.swing.text;
  2.  
  3. import java.awt.Graphics;
  4. import java.awt.Point;
  5. import java.awt.Rectangle;
  6. import java.awt.Shape;
  7. import javax.swing.event.DocumentEvent;
  8. import javax.swing.text.Position.Bias;
  9.  
  10. public class ParagraphView extends FlowView implements TabExpander {
  11.    private int justification;
  12.    private float lineSpacing;
  13.    protected int firstLineIndent;
  14.    private int tabBase;
  15.    static Class i18nStrategy;
  16.    static char[] tabChars = new char[1];
  17.    static char[] tabDecimalChars;
  18.  
  19.    public ParagraphView(Element var1) {
  20.       super(var1, 1);
  21.       this.setPropertiesFromAttributes();
  22.       Document var2 = var1.getDocument();
  23.       Object var3 = var2.getProperty("i18n");
  24.       if (var3 != null && var3.equals(Boolean.TRUE)) {
  25.          try {
  26.             if (i18nStrategy == null) {
  27.                String var4 = "javax.swing.text.TextLayoutStrategy";
  28.                ClassLoader var5 = this.getClass().getClassLoader();
  29.                if (var5 != null) {
  30.                   i18nStrategy = var5.loadClass(var4);
  31.                } else {
  32.                   i18nStrategy = Class.forName(var4);
  33.                }
  34.             }
  35.  
  36.             Object var7 = i18nStrategy.newInstance();
  37.             if (var7 instanceof FlowView.FlowStrategy) {
  38.                super.strategy = (FlowView.FlowStrategy)var7;
  39.             }
  40.          } catch (Throwable var6) {
  41.             throw new StateInvariantError("ParagraphView: Can't create i18n strategy: " + var6.getMessage());
  42.          }
  43.       }
  44.  
  45.    }
  46.  
  47.    protected void setJustification(int var1) {
  48.       this.justification = var1;
  49.    }
  50.  
  51.    protected void setLineSpacing(float var1) {
  52.       this.lineSpacing = var1;
  53.    }
  54.  
  55.    protected void setFirstLineIndent(float var1) {
  56.       this.firstLineIndent = (int)var1;
  57.    }
  58.  
  59.    protected void setPropertiesFromAttributes() {
  60.       AttributeSet var1 = ((View)this).getAttributes();
  61.       if (var1 != null) {
  62.          ((CompositeView)this).setParagraphInsets(var1);
  63.          this.setJustification(StyleConstants.getAlignment(var1));
  64.          this.lineSpacing = StyleConstants.getLineSpacing(var1);
  65.          this.firstLineIndent = (int)StyleConstants.getFirstLineIndent(var1);
  66.       }
  67.  
  68.    }
  69.  
  70.    protected int getLayoutViewCount() {
  71.       return super.layoutPool.getViewCount();
  72.    }
  73.  
  74.    protected View getLayoutView(int var1) {
  75.       return super.layoutPool.getView(var1);
  76.    }
  77.  
  78.    protected void adjustRow(Row var1, int var2, int var3) {
  79.    }
  80.  
  81.    protected int getNextNorthSouthVisualPositionFrom(int var1, Position.Bias var2, Shape var3, int var4, Position.Bias[] var5) throws BadLocationException {
  82.       int var12;
  83.       if (var1 == -1) {
  84.          var12 = var4 == 1 ? ((CompositeView)this).getViewCount() - 1 : 0;
  85.       } else {
  86.          if (var2 == Bias.Backward && var1 > 0) {
  87.             var12 = ((FlowView)this).getViewIndexAtPosition(var1 - 1);
  88.          } else {
  89.             var12 = ((FlowView)this).getViewIndexAtPosition(var1);
  90.          }
  91.  
  92.          if (var4 == 1) {
  93.             if (var12 == 0) {
  94.                return -1;
  95.             }
  96.  
  97.             --var12;
  98.          } else {
  99.             ++var12;
  100.             if (var12 >= ((CompositeView)this).getViewCount()) {
  101.                return -1;
  102.             }
  103.          }
  104.       }
  105.  
  106.       JTextComponent var7 = (JTextComponent)((View)this).getContainer();
  107.       Caret var8 = var7.getCaret();
  108.       Point var9 = var8 != null ? var8.getMagicCaretPosition() : null;
  109.       int var10;
  110.       if (var9 == null) {
  111.          Rectangle var11 = var7.getUI().modelToView(var7, var1, var2);
  112.          if (var11 == null) {
  113.             var10 = 0;
  114.          } else {
  115.             var10 = var11.getBounds().x;
  116.          }
  117.       } else {
  118.          var10 = var9.x;
  119.       }
  120.  
  121.       return this.getClosestPositionTo(var1, var2, var3, var4, var5, var12, var10);
  122.    }
  123.  
  124.    protected int getClosestPositionTo(int var1, Position.Bias var2, Shape var3, int var4, Position.Bias[] var5, int var6, int var7) throws BadLocationException {
  125.       JTextComponent var8 = (JTextComponent)((View)this).getContainer();
  126.       Document var9 = ((View)this).getDocument();
  127.       AbstractDocument var10 = var9 instanceof AbstractDocument ? (AbstractDocument)var9 : null;
  128.       View var11 = ((CompositeView)this).getView(var6);
  129.       int var19 = -1;
  130.       var5[0] = Bias.Forward;
  131.       int var13 = 0;
  132.  
  133.       for(int var14 = var11.getViewCount(); var13 < var14; ++var13) {
  134.          View var15 = var11.getView(var13);
  135.          int var16 = var15.getStartOffset();
  136.          boolean var17 = var10 != null ? var10.isLeftToRight(var16, var16 + 1) : true;
  137.          if (var17) {
  138.             var19 = var16;
  139.  
  140.             for(int var18 = var15.getEndOffset(); var19 < var18; ++var19) {
  141.                if (var8.modelToView(var19).getBounds().x >= var7) {
  142.                   return var19;
  143.                }
  144.             }
  145.  
  146.             --var19;
  147.          } else {
  148.             for(var19 = var15.getEndOffset() - 1; var19 >= var16; --var19) {
  149.                if (var8.modelToView(var19).getBounds().x >= var7) {
  150.                   return var19;
  151.                }
  152.             }
  153.  
  154.             ++var19;
  155.          }
  156.       }
  157.  
  158.       if (var19 == -1) {
  159.          return ((View)this).getStartOffset();
  160.       } else {
  161.          return var19;
  162.       }
  163.    }
  164.  
  165.    protected boolean flipEastAndWestAtEnds(int var1, Position.Bias var2) {
  166.       Document var3 = ((View)this).getDocument();
  167.       return var3 instanceof AbstractDocument && !((AbstractDocument)var3).isLeftToRight(((View)this).getStartOffset(), ((View)this).getStartOffset() + 1);
  168.    }
  169.  
  170.    public int getFlowSpan(int var1) {
  171.       View var2 = ((CompositeView)this).getView(var1);
  172.       int var3 = 0;
  173.       if (var2 instanceof Row) {
  174.          Row var4 = (Row)var2;
  175.          var3 = ((CompositeView)var4).getLeftInset() + ((CompositeView)var4).getRightInset();
  176.       }
  177.  
  178.       int var5 = super.layoutSpan - var3;
  179.       return var5;
  180.    }
  181.  
  182.    public int getFlowStart(int var1) {
  183.       View var2 = ((CompositeView)this).getView(var1);
  184.       short var3 = 0;
  185.       if (var2 instanceof Row) {
  186.          Row var4 = (Row)var2;
  187.          var3 = ((CompositeView)var4).getLeftInset();
  188.       }
  189.  
  190.       return this.tabBase + var3;
  191.    }
  192.  
  193.    protected View createRow() {
  194.       Element var1 = ((View)this).getElement();
  195.       Row var2 = new Row(this, var1);
  196.       if (this.lineSpacing > 1.0F) {
  197.          float var3 = ((BoxView)var2).getPreferredSpan(1);
  198.          float var4 = var3 * this.lineSpacing - var3;
  199.          if (var4 > 0.0F) {
  200.             ((CompositeView)var2).setInsets(((CompositeView)var2).getTopInset(), ((CompositeView)var2).getLeftInset(), (short)((int)var4), ((CompositeView)var2).getRightInset());
  201.          }
  202.       }
  203.  
  204.       return var2;
  205.    }
  206.  
  207.    public float nextTabStop(float var1, int var2) {
  208.       if (this.justification != 0) {
  209.          return var1 + 10.0F;
  210.       } else {
  211.          var1 -= (float)this.tabBase;
  212.          TabSet var3 = this.getTabSet();
  213.          if (var3 == null) {
  214.             return (float)(this.tabBase + ((int)var1 / 72 + 1) * 72);
  215.          } else {
  216.             TabStop var4 = var3.getTabAfter(var1 + 0.01F);
  217.             if (var4 == null) {
  218.                return (float)this.tabBase + var1 + 5.0F;
  219.             } else {
  220.                int var5 = var4.getAlignment();
  221.                int var6;
  222.                switch (var5) {
  223.                   case 0:
  224.                   case 3:
  225.                   default:
  226.                      return (float)this.tabBase + var4.getPosition();
  227.                   case 1:
  228.                   case 2:
  229.                      var6 = this.findOffsetToCharactersInString(tabChars, var2 + 1);
  230.                      break;
  231.                   case 4:
  232.                      var6 = this.findOffsetToCharactersInString(tabDecimalChars, var2 + 1);
  233.                      break;
  234.                   case 5:
  235.                      return (float)this.tabBase + var4.getPosition();
  236.                }
  237.  
  238.                if (var6 == -1) {
  239.                   var6 = ((View)this).getEndOffset();
  240.                }
  241.  
  242.                float var7 = this.getPartialSize(var2 + 1, var6);
  243.                switch (var5) {
  244.                   case 1:
  245.                   case 4:
  246.                      return (float)this.tabBase + Math.max(var1, var4.getPosition() - var7);
  247.                   case 2:
  248.                      return (float)this.tabBase + Math.max(var1, var4.getPosition() - var7 / 2.0F);
  249.                   case 3:
  250.                   default:
  251.                      return var1;
  252.                }
  253.             }
  254.          }
  255.       }
  256.    }
  257.  
  258.    protected TabSet getTabSet() {
  259.       return StyleConstants.getTabSet(((View)this).getElement().getAttributes());
  260.    }
  261.  
  262.    protected float getPartialSize(int var1, int var2) {
  263.       float var3 = 0.0F;
  264.       int var5 = ((CompositeView)this).getViewCount();
  265.       int var4 = ((View)this).getElement().getElementIndex(var1);
  266.  
  267.       int var7;
  268.       for(int var9 = super.layoutPool.getViewCount(); var1 < var2 && var4 < var9; var1 = var7) {
  269.          View var6 = super.layoutPool.getView(var4++);
  270.          var7 = var6.getEndOffset();
  271.          int var8 = Math.min(var2, var7);
  272.          if (var6 instanceof TabableView) {
  273.             var3 += ((TabableView)var6).getPartialSpan(var1, var8);
  274.          } else {
  275.             if (var1 != var6.getStartOffset() || var8 != var6.getEndOffset()) {
  276.                return 0.0F;
  277.             }
  278.  
  279.             var3 += var6.getPreferredSpan(0);
  280.          }
  281.       }
  282.  
  283.       return var3;
  284.    }
  285.  
  286.    protected int findOffsetToCharactersInString(char[] var1, int var2) {
  287.       int var3 = var1.length;
  288.       int var4 = ((View)this).getEndOffset();
  289.       Segment var5 = new Segment();
  290.  
  291.       try {
  292.          ((View)this).getDocument().getText(var2, var4 - var2, var5);
  293.       } catch (BadLocationException var10) {
  294.          return -1;
  295.       }
  296.  
  297.       int var6 = var5.offset;
  298.  
  299.       for(int var7 = var5.offset + var5.count; var6 < var7; ++var6) {
  300.          char var8 = var5.array[var6];
  301.  
  302.          for(int var9 = 0; var9 < var3; ++var9) {
  303.             if (var8 == var1[var9]) {
  304.                return var6 - var5.offset + var2;
  305.             }
  306.          }
  307.       }
  308.  
  309.       return -1;
  310.    }
  311.  
  312.    protected float getTabBase() {
  313.       return (float)this.tabBase;
  314.    }
  315.  
  316.    public void paint(Graphics var1, Shape var2) {
  317.       Rectangle var3 = var2 instanceof Rectangle ? (Rectangle)var2 : var2.getBounds();
  318.       this.tabBase = var3.x + ((CompositeView)this).getLeftInset();
  319.       super.paint(var1, var2);
  320.    }
  321.  
  322.    public float getAlignment(int var1) {
  323.       switch (var1) {
  324.          case 0:
  325.             return 0.5F;
  326.          case 1:
  327.             float var2 = 0.5F;
  328.             if (((CompositeView)this).getViewCount() != 0) {
  329.                int var3 = (int)((BoxView)this).getPreferredSpan(1);
  330.                View var4 = ((CompositeView)this).getView(0);
  331.                int var5 = (int)var4.getPreferredSpan(1);
  332.                var2 = var3 != 0 ? (float)(var5 / 2) / (float)var3 : 0.0F;
  333.             }
  334.  
  335.             return var2;
  336.          default:
  337.             throw new IllegalArgumentException("Invalid axis: " + var1);
  338.       }
  339.    }
  340.  
  341.    public View breakView(int var1, float var2, Shape var3) {
  342.       if (var1 == 1) {
  343.          if (var3 != null) {
  344.             Rectangle var4 = var3.getBounds();
  345.             ((BoxView)this).setSize((float)var4.width, (float)var4.height);
  346.          }
  347.  
  348.          return this;
  349.       } else {
  350.          return this;
  351.       }
  352.    }
  353.  
  354.    public int getBreakWeight(int var1, float var2) {
  355.       return var1 == 1 ? 0 : 0;
  356.    }
  357.  
  358.    public void changedUpdate(DocumentEvent var1, Shape var2, ViewFactory var3) {
  359.       this.setPropertiesFromAttributes();
  360.       ((BoxView)this).layoutChanged(0);
  361.       ((BoxView)this).layoutChanged(1);
  362.       super.changedUpdate(var1, var2, var3);
  363.    }
  364.  
  365.    // $FF: synthetic method
  366.    static int access$000(ParagraphView var0) {
  367.       return var0.justification;
  368.    }
  369.  
  370.    static {
  371.       tabChars[0] = '\t';
  372.       tabDecimalChars = new char[2];
  373.       tabDecimalChars[0] = '\t';
  374.       tabDecimalChars[1] = '.';
  375.    }
  376. }
  377.