home *** CD-ROM | disk | FTP | other *** search
/ PC Plus SuperCD (UK) 2000 March / pcp161a.iso / handson / files / copyjava.exe / com / sun / java / swing / text / WrappedPlainView.class (.txt) < prev    next >
Encoding:
Java Class File  |  1998-02-26  |  6.2 KB  |  181 lines

  1. package com.sun.java.swing.text;
  2.  
  3. import com.sun.java.swing.event.DocumentEvent;
  4. import java.awt.Color;
  5. import java.awt.Component;
  6. import java.awt.Container;
  7. import java.awt.Font;
  8. import java.awt.FontMetrics;
  9. import java.awt.Graphics;
  10. import java.awt.Rectangle;
  11. import java.awt.Shape;
  12.  
  13. public class WrappedPlainView extends BoxView implements TabExpander {
  14.    FontMetrics metrics;
  15.    Segment lineBuffer = new Segment();
  16.    int layoutWidth = 32767;
  17.    int tabSize;
  18.    int sel0;
  19.    int sel1;
  20.    Color unselected;
  21.    Color selected;
  22.  
  23.    public WrappedPlainView(Element var1) {
  24.       super(var1, 1);
  25.    }
  26.  
  27.    protected int getTabSize() {
  28.       Integer var1 = (Integer)((View)this).getDocument().getProperty("tabSize");
  29.       int var2 = var1 != null ? var1 : 8;
  30.       return var2;
  31.    }
  32.  
  33.    protected void drawLine(int var1, int var2, Graphics var3, int var4, int var5) {
  34.       try {
  35.          var2 = Math.min(((View)this).getDocument().getLength(), var2);
  36.          if (this.sel0 == this.sel1) {
  37.             this.drawUnselectedText(var3, var4, var5, var1, var2);
  38.          } else if (var1 >= this.sel0 && var1 <= this.sel1 && var2 >= this.sel0 && var2 <= this.sel1) {
  39.             this.drawSelectedText(var3, var4, var5, var1, var2);
  40.          } else if (this.sel0 >= var1 && this.sel0 <= var2) {
  41.             if (this.sel1 >= var1 && this.sel1 <= var2) {
  42.                var4 = this.drawUnselectedText(var3, var4, var5, var1, this.sel0);
  43.                var4 = this.drawSelectedText(var3, var4, var5, this.sel0, this.sel1);
  44.                this.drawUnselectedText(var3, var4, var5, this.sel1, var2);
  45.             } else {
  46.                var4 = this.drawUnselectedText(var3, var4, var5, var1, this.sel0);
  47.                this.drawSelectedText(var3, var4, var5, this.sel0, var2);
  48.             }
  49.          } else if (this.sel1 >= var1 && this.sel1 <= var2) {
  50.             var4 = this.drawSelectedText(var3, var4, var5, var1, this.sel1);
  51.             this.drawUnselectedText(var3, var4, var5, this.sel1, var2);
  52.          } else {
  53.             this.drawUnselectedText(var3, var4, var5, var1, var2);
  54.          }
  55.       } catch (BadLocationException var6) {
  56.          throw new StateInvariantError("Can't render: " + var1 + "," + var2);
  57.       }
  58.    }
  59.  
  60.    protected int drawUnselectedText(Graphics var1, int var2, int var3, int var4, int var5) throws BadLocationException {
  61.       var1.setColor(this.unselected);
  62.       Document var6 = ((View)this).getDocument();
  63.       var6.getText(var4, var5 - var4, this.lineBuffer);
  64.       return Utilities.drawTabbedText(this.lineBuffer, var2, var3, var1, this, var4);
  65.    }
  66.  
  67.    protected int drawSelectedText(Graphics var1, int var2, int var3, int var4, int var5) throws BadLocationException {
  68.       var1.setColor(this.selected);
  69.       Document var6 = ((View)this).getDocument();
  70.       var6.getText(var4, var5 - var4, this.lineBuffer);
  71.       return Utilities.drawTabbedText(this.lineBuffer, var2, var3, var1, this, var4);
  72.    }
  73.  
  74.    protected final Segment getLineBuffer() {
  75.       return this.lineBuffer;
  76.    }
  77.  
  78.    protected void loadChildren(ViewFactory var1) {
  79.       Element var2 = ((View)this).getElement();
  80.       int var3 = var2.getElementCount();
  81.       if (var3 > 0) {
  82.          View[] var4 = new View[var3];
  83.  
  84.          for(int var5 = 0; var5 < var3; ++var5) {
  85.             var4[var5] = new WrappedLine(this, var2.getElement(var5));
  86.          }
  87.  
  88.          ((BoxView)this).replace(0, 0, var4);
  89.       }
  90.  
  91.    }
  92.  
  93.    void updateChildren(DocumentEvent var1, Shape var2) {
  94.       Element var3 = ((View)this).getElement();
  95.       DocumentEvent.ElementChange var4 = var1.getChange(var3);
  96.       if (var4 != null) {
  97.          Element[] var5 = var4.getChildrenRemoved();
  98.          Element[] var6 = var4.getChildrenAdded();
  99.          View[] var7 = new View[var6.length];
  100.  
  101.          for(int var8 = 0; var8 < var6.length; ++var8) {
  102.             var7[var8] = new WrappedLine(this, var6[var8]);
  103.          }
  104.  
  105.          ((BoxView)this).replace(var4.getIndex(), var5.length, var7);
  106.          if (var2 != null) {
  107.             ((BoxView)this).preferenceChanged((View)null, true, true);
  108.             ((View)this).getContainer().repaint();
  109.          }
  110.       }
  111.  
  112.       this.updateMetrics();
  113.    }
  114.  
  115.    final void updateMetrics() {
  116.       Container var1 = ((View)this).getContainer();
  117.       Font var2 = ((Component)var1).getFont();
  118.       this.metrics = ((Component)var1).getFontMetrics(var2);
  119.       this.tabSize = this.getTabSize() * this.metrics.charWidth('m');
  120.    }
  121.  
  122.    public float nextTabStop(float var1, int var2) {
  123.       int var3 = (int)var1 / this.tabSize;
  124.       return (float)((var3 + 1) * this.tabSize);
  125.    }
  126.  
  127.    public void paint(Graphics var1, Shape var2) {
  128.       Rectangle var3 = var2.getBounds();
  129.       if (var3.width != this.layoutWidth) {
  130.          this.layoutWidth = var3.width;
  131.          ((BoxView)this).preferenceChanged((View)null, true, true);
  132.       }
  133.  
  134.       JTextComponent var4 = (JTextComponent)((View)this).getContainer();
  135.       this.sel0 = var4.getSelectionStart();
  136.       this.sel1 = var4.getSelectionEnd();
  137.       this.unselected = ((Component)var4).isEnabled() ? ((Component)var4).getForeground() : var4.getDisabledTextColor();
  138.       Caret var5 = var4.getCaret();
  139.       this.selected = var5.isSelectionVisible() ? var4.getSelectedTextColor() : this.unselected;
  140.       this.updateMetrics();
  141.       var1.setFont(((Component)var4).getFont());
  142.       super.paint(var1, var2);
  143.    }
  144.  
  145.    public void setSize(float var1, float var2) {
  146.       this.updateMetrics();
  147.       super.setSize(var1, var2);
  148.    }
  149.  
  150.    public float getPreferredSpan(int var1) {
  151.       this.updateMetrics();
  152.       return super.getPreferredSpan(var1);
  153.    }
  154.  
  155.    public void insertUpdate(DocumentEvent var1, Shape var2, ViewFactory var3) {
  156.       this.updateChildren(var1, var2);
  157.       Rectangle var4 = var2 != null && ((BoxView)this).isAllocationValid() ? ((CompositeView)this).getInsideAllocation(var2) : null;
  158.       int var5 = var1.getOffset();
  159.       View var6 = ((CompositeView)this).getViewAtPosition(var5, var4);
  160.       if (var6 != null) {
  161.          var6.insertUpdate(var1, var4, var3);
  162.       }
  163.  
  164.    }
  165.  
  166.    public void removeUpdate(DocumentEvent var1, Shape var2, ViewFactory var3) {
  167.       this.updateChildren(var1, var2);
  168.       Rectangle var4 = var2 != null && ((BoxView)this).isAllocationValid() ? ((CompositeView)this).getInsideAllocation(var2) : null;
  169.       int var5 = var1.getOffset();
  170.       View var6 = ((CompositeView)this).getViewAtPosition(var5, var4);
  171.       if (var6 != null) {
  172.          var6.removeUpdate(var1, var4, var3);
  173.       }
  174.  
  175.    }
  176.  
  177.    public void changedUpdate(DocumentEvent var1, Shape var2, ViewFactory var3) {
  178.       this.updateChildren(var1, var2);
  179.    }
  180. }
  181.