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

  1. package javax.swing.text;
  2.  
  3. import java.awt.Color;
  4. import java.awt.Component;
  5. import java.awt.Container;
  6. import java.awt.Font;
  7. import java.awt.FontMetrics;
  8. import java.awt.Graphics;
  9. import java.awt.Rectangle;
  10. import java.awt.Shape;
  11. import javax.swing.event.DocumentEvent;
  12. import javax.swing.event.DocumentEvent.EventType;
  13. import javax.swing.text.Position.Bias;
  14.  
  15. public class PlainView extends View implements TabExpander {
  16.    protected FontMetrics metrics;
  17.    Element longLine;
  18.    Font font;
  19.    Segment lineBuffer = new Segment();
  20.    int tabSize;
  21.    int tabBase;
  22.    int sel0;
  23.    int sel1;
  24.    Color unselected;
  25.    Color selected;
  26.  
  27.    public PlainView(Element var1) {
  28.       super(var1);
  29.    }
  30.  
  31.    protected int getTabSize() {
  32.       Integer var1 = (Integer)((View)this).getDocument().getProperty("tabSize");
  33.       int var2 = var1 != null ? var1 : 8;
  34.       return var2;
  35.    }
  36.  
  37.    protected void drawLine(int var1, Graphics var2, int var3, int var4) {
  38.       Element var5 = ((View)this).getElement().getElement(var1);
  39.  
  40.       try {
  41.          if (var5.isLeaf()) {
  42.             this.drawElement(var5, var2, var3, var4);
  43.          } else {
  44.             int var7 = var5.getElementCount();
  45.  
  46.             for(int var8 = 0; var8 < var7; ++var8) {
  47.                Element var6 = var5.getElement(var8);
  48.                var3 = this.drawElement(var6, var2, var3, var4);
  49.             }
  50.          }
  51.  
  52.       } catch (BadLocationException var9) {
  53.          throw new StateInvariantError("Can't render line: " + var1);
  54.       }
  55.    }
  56.  
  57.    private int drawElement(Element var1, Graphics var2, int var3, int var4) throws BadLocationException {
  58.       int var5 = var1.getStartOffset();
  59.       int var6 = var1.getEndOffset();
  60.       var6 = Math.min(((View)this).getDocument().getLength(), var6);
  61.       AttributeSet var7 = var1.getAttributes();
  62.       if (Utilities.isComposedTextAttributeDefined(var7)) {
  63.          var2.setColor(this.unselected);
  64.          var3 = Utilities.drawComposedText(var7, var2, var3, var4, var5 - var1.getStartOffset(), var6 - var1.getStartOffset());
  65.       } else if (this.sel0 == this.sel1) {
  66.          var3 = this.drawUnselectedText(var2, var3, var4, var5, var6);
  67.       } else if (var5 >= this.sel0 && var5 <= this.sel1 && var6 >= this.sel0 && var6 <= this.sel1) {
  68.          var3 = this.drawSelectedText(var2, var3, var4, var5, var6);
  69.       } else if (this.sel0 >= var5 && this.sel0 <= var6) {
  70.          if (this.sel1 >= var5 && this.sel1 <= var6) {
  71.             var3 = this.drawUnselectedText(var2, var3, var4, var5, this.sel0);
  72.             var3 = this.drawSelectedText(var2, var3, var4, this.sel0, this.sel1);
  73.             var3 = this.drawUnselectedText(var2, var3, var4, this.sel1, var6);
  74.          } else {
  75.             var3 = this.drawUnselectedText(var2, var3, var4, var5, this.sel0);
  76.             var3 = this.drawSelectedText(var2, var3, var4, this.sel0, var6);
  77.          }
  78.       } else if (this.sel1 >= var5 && this.sel1 <= var6) {
  79.          var3 = this.drawSelectedText(var2, var3, var4, var5, this.sel1);
  80.          var3 = this.drawUnselectedText(var2, var3, var4, this.sel1, var6);
  81.       } else {
  82.          var3 = this.drawUnselectedText(var2, var3, var4, var5, var6);
  83.       }
  84.  
  85.       return var3;
  86.    }
  87.  
  88.    protected int drawUnselectedText(Graphics var1, int var2, int var3, int var4, int var5) throws BadLocationException {
  89.       var1.setColor(this.unselected);
  90.       Document var6 = ((View)this).getDocument();
  91.       var6.getText(var4, var5 - var4, this.lineBuffer);
  92.       return Utilities.drawTabbedText(this.lineBuffer, var2, var3, var1, this, var4);
  93.    }
  94.  
  95.    protected int drawSelectedText(Graphics var1, int var2, int var3, int var4, int var5) throws BadLocationException {
  96.       var1.setColor(this.selected);
  97.       Document var6 = ((View)this).getDocument();
  98.       var6.getText(var4, var5 - var4, this.lineBuffer);
  99.       return Utilities.drawTabbedText(this.lineBuffer, var2, var3, var1, this, var4);
  100.    }
  101.  
  102.    protected final Segment getLineBuffer() {
  103.       return this.lineBuffer;
  104.    }
  105.  
  106.    final void updateMetrics() {
  107.       Container var1 = ((View)this).getContainer();
  108.       Font var2 = ((Component)var1).getFont();
  109.       if (this.font != var2) {
  110.          this.calculateLongestLine();
  111.          this.tabSize = this.getTabSize() * this.metrics.charWidth('m');
  112.       }
  113.  
  114.    }
  115.  
  116.    public float getPreferredSpan(int var1) {
  117.       this.updateMetrics();
  118.       switch (var1) {
  119.          case 0:
  120.             return (float)this.getLineWidth(this.longLine);
  121.          case 1:
  122.             return (float)(((View)this).getElement().getElementCount() * this.metrics.getHeight());
  123.          default:
  124.             throw new IllegalArgumentException("Invalid axis: " + var1);
  125.       }
  126.    }
  127.  
  128.    public void paint(Graphics var1, Shape var2) {
  129.       Shape var3 = var2;
  130.       var2 = this.adjustPaintRegion(var2);
  131.       Rectangle var4 = (Rectangle)var2;
  132.       this.tabBase = var4.x;
  133.       JTextComponent var5 = (JTextComponent)((View)this).getContainer();
  134.       var1.setFont(((Component)var5).getFont());
  135.       this.sel0 = var5.getSelectionStart();
  136.       this.sel1 = var5.getSelectionEnd();
  137.       this.unselected = ((Component)var5).isEnabled() ? ((Component)var5).getForeground() : var5.getDisabledTextColor();
  138.       Caret var6 = var5.getCaret();
  139.       this.selected = var6.isSelectionVisible() ? var5.getSelectedTextColor() : this.unselected;
  140.       this.updateMetrics();
  141.       Rectangle var7 = var1.getClipBounds();
  142.       int var8 = this.metrics.getHeight();
  143.       int var9 = var4.y + var4.height - (var7.y + var7.height);
  144.       int var10 = Math.max(0, var9 / var8);
  145.       int var11 = var7.y - var4.y;
  146.       int var12 = Math.max(0, var11 / var8);
  147.       int var13 = var4.height / var8;
  148.       if (var4.height % var8 != 0) {
  149.          ++var13;
  150.       }
  151.  
  152.       Rectangle var14 = this.lineToRect(var2, var12);
  153.       int var15 = var14.y + this.metrics.getAscent();
  154.       int var16 = var14.x;
  155.       Element var17 = ((View)this).getElement();
  156.       int var18 = var17.getElementCount();
  157.       int var19 = Math.min(var18, var13 - var10);
  158.       --var18;
  159.       Highlighter var20 = var5.getHighlighter();
  160.       LayeredHighlighter var21 = var20 instanceof LayeredHighlighter ? (LayeredHighlighter)var20 : null;
  161.  
  162.       for(int var22 = var12; var22 < var19; ++var22) {
  163.          if (var21 != null) {
  164.             Element var23 = var17.getElement(var22);
  165.             if (var22 == var18) {
  166.                var21.paintLayeredHighlights(var1, var23.getStartOffset(), var23.getEndOffset(), var3, var5, this);
  167.             } else {
  168.                var21.paintLayeredHighlights(var1, var23.getStartOffset(), var23.getEndOffset() - 1, var3, var5, this);
  169.             }
  170.          }
  171.  
  172.          this.drawLine(var22, var1, var16, var15);
  173.          var15 += var8;
  174.       }
  175.  
  176.    }
  177.  
  178.    Shape adjustPaintRegion(Shape var1) {
  179.       return var1;
  180.    }
  181.  
  182.    public Shape modelToView(int var1, Shape var2, Position.Bias var3) throws BadLocationException {
  183.       Document var4 = ((View)this).getDocument();
  184.       Element var5 = ((View)this).getElement();
  185.       int var6 = var5.getElementIndex(var1);
  186.       Rectangle var7 = this.lineToRect(var2, var6);
  187.       this.tabBase = var7.x;
  188.       Element var8 = var5.getElement(var6);
  189.       int var9 = var8.getStartOffset();
  190.       var4.getText(var9, var1 - var9, this.lineBuffer);
  191.       int var10 = Utilities.getTabbedTextWidth(this.lineBuffer, this.metrics, this.tabBase, this, var9);
  192.       var7.x += var10;
  193.       var7.width = 1;
  194.       var7.height = this.metrics.getHeight();
  195.       return var7;
  196.    }
  197.  
  198.    public int viewToModel(float var1, float var2, Shape var3, Position.Bias[] var4) {
  199.       var4[0] = Bias.Forward;
  200.       Rectangle var5 = var3.getBounds();
  201.       Document var6 = ((View)this).getDocument();
  202.       int var7 = (int)var1;
  203.       int var8 = (int)var2;
  204.       if (var8 < var5.y) {
  205.          return ((View)this).getStartOffset();
  206.       } else if (var8 > var5.y + var5.height) {
  207.          return ((View)this).getEndOffset() - 1;
  208.       } else {
  209.          Element var9 = var6.getDefaultRootElement();
  210.          int var10 = Math.abs((var8 - var5.y) / this.metrics.getHeight());
  211.          if (var10 >= var9.getElementCount()) {
  212.             return ((View)this).getEndOffset() - 1;
  213.          } else {
  214.             Element var11 = var9.getElement(var10);
  215.             if (var7 < var5.x) {
  216.                return var11.getStartOffset();
  217.             } else if (var7 > var5.x + var5.width) {
  218.                return var11.getEndOffset() - 1;
  219.             } else {
  220.                try {
  221.                   int var12 = var11.getStartOffset();
  222.                   int var13 = var11.getEndOffset() - 1;
  223.                   var6.getText(var12, var13 - var12, this.lineBuffer);
  224.                   this.tabBase = var5.x;
  225.                   int var14 = var12 + Utilities.getTabbedTextOffset(this.lineBuffer, this.metrics, this.tabBase, var7, this, var12);
  226.                   return var14;
  227.                } catch (BadLocationException var15) {
  228.                   return -1;
  229.                }
  230.             }
  231.          }
  232.       }
  233.    }
  234.  
  235.    public void insertUpdate(DocumentEvent var1, Shape var2, ViewFactory var3) {
  236.       this.updateDamage(var1, var2, var3);
  237.    }
  238.  
  239.    public void removeUpdate(DocumentEvent var1, Shape var2, ViewFactory var3) {
  240.       this.updateDamage(var1, var2, var3);
  241.    }
  242.  
  243.    public void changedUpdate(DocumentEvent var1, Shape var2, ViewFactory var3) {
  244.       this.updateDamage(var1, var2, var3);
  245.    }
  246.  
  247.    public float nextTabStop(float var1, int var2) {
  248.       if (this.tabSize == 0) {
  249.          return var1;
  250.       } else {
  251.          int var3 = ((int)var1 - this.tabBase) / this.tabSize;
  252.          return (float)(this.tabBase + (var3 + 1) * this.tabSize);
  253.       }
  254.    }
  255.  
  256.    void updateDamage(DocumentEvent var1, Shape var2, ViewFactory var3) {
  257.       Container var4 = ((View)this).getContainer();
  258.       this.updateMetrics();
  259.       Element var5 = ((View)this).getElement();
  260.       DocumentEvent.ElementChange var6 = var1.getChange(var5);
  261.       Element[] var7 = var6 != null ? var6.getChildrenAdded() : null;
  262.       Element[] var8 = var6 != null ? var6.getChildrenRemoved() : null;
  263.       if (var7 != null && var7.length > 0 || var8 != null && var8.length > 0) {
  264.          if (var7 != null) {
  265.             int var13 = this.getLineWidth(this.longLine);
  266.  
  267.             for(int var15 = 0; var15 < var7.length; ++var15) {
  268.                int var16 = this.getLineWidth(var7[var15]);
  269.                if (var16 > var13) {
  270.                   var13 = var16;
  271.                   this.longLine = var7[var15];
  272.                }
  273.             }
  274.          }
  275.  
  276.          if (var8 != null) {
  277.             for(int var14 = 0; var14 < var8.length; ++var14) {
  278.                if (var8[var14] == this.longLine) {
  279.                   this.calculateLongestLine();
  280.                   break;
  281.                }
  282.             }
  283.          }
  284.  
  285.          ((View)this).preferenceChanged((View)null, true, true);
  286.          ((Component)var4).repaint();
  287.       } else {
  288.          Element var9 = ((View)this).getElement();
  289.          int var10 = var9.getElementIndex(var1.getOffset());
  290.          this.damageLineRange(var10, var10, var2, var4);
  291.          if (var1.getType() == EventType.INSERT) {
  292.             int var11 = this.getLineWidth(this.longLine);
  293.             Element var12 = var9.getElement(var10);
  294.             if (var12 == this.longLine) {
  295.                ((View)this).preferenceChanged((View)null, true, false);
  296.             } else if (this.getLineWidth(var12) > var11) {
  297.                this.longLine = var12;
  298.                ((View)this).preferenceChanged((View)null, true, false);
  299.             }
  300.          } else if (var1.getType() == EventType.REMOVE && var9.getElement(var10) == this.longLine) {
  301.             this.calculateLongestLine();
  302.             ((View)this).preferenceChanged((View)null, true, false);
  303.          }
  304.       }
  305.  
  306.    }
  307.  
  308.    private void damageLineRange(int var1, int var2, Shape var3, Component var4) {
  309.       if (var3 != null) {
  310.          Rectangle var5 = this.lineToRect(var3, var1);
  311.          Rectangle var6 = this.lineToRect(var3, var2);
  312.          if (var5 != null && var6 != null) {
  313.             Rectangle var7 = var5.union(var6);
  314.             var4.repaint(var7.x, var7.y, var7.width, var7.height);
  315.          } else {
  316.             var4.repaint();
  317.          }
  318.       }
  319.  
  320.    }
  321.  
  322.    private Rectangle lineToRect(Shape var1, int var2) {
  323.       Rectangle var3 = null;
  324.       this.updateMetrics();
  325.       if (this.metrics != null) {
  326.          Rectangle var4 = var1.getBounds();
  327.          var3 = new Rectangle(var4.x, var4.y + var2 * this.metrics.getHeight(), var4.width, this.metrics.getHeight());
  328.       }
  329.  
  330.       return var3;
  331.    }
  332.  
  333.    private void calculateLongestLine() {
  334.       Container var1 = ((View)this).getContainer();
  335.       this.font = ((Component)var1).getFont();
  336.       this.metrics = ((Component)var1).getFontMetrics(this.font);
  337.       Document var2 = ((View)this).getDocument();
  338.       Element var3 = ((View)this).getElement();
  339.       int var4 = var3.getElementCount();
  340.       int var5 = -1;
  341.  
  342.       for(int var6 = 0; var6 < var4; ++var6) {
  343.          Element var7 = var3.getElement(var6);
  344.          int var8 = this.getLineWidth(var7);
  345.          if (var8 > var5) {
  346.             var5 = var8;
  347.             this.longLine = var7;
  348.          }
  349.       }
  350.  
  351.    }
  352.  
  353.    private int getLineWidth(Element var1) {
  354.       int var2 = var1.getStartOffset();
  355.       int var3 = var1.getEndOffset();
  356.  
  357.       int var4;
  358.       try {
  359.          var1.getDocument().getText(var2, var3 - var2, this.lineBuffer);
  360.          var4 = Utilities.getTabbedTextWidth(this.lineBuffer, this.metrics, this.tabBase, this, var2);
  361.       } catch (BadLocationException var6) {
  362.          var4 = 0;
  363.       }
  364.  
  365.       return var4;
  366.    }
  367. }
  368.