home *** CD-ROM | disk | FTP | other *** search
/ PC Plus SuperCD (UK) 2000 March / pcp161a.iso / handson / files / copyjava.exe / com / sun / java / swing / text / LabelView.class (.txt) < prev    next >
Encoding:
Java Class File  |  1998-02-26  |  6.0 KB  |  204 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.Font;
  6. import java.awt.FontMetrics;
  7. import java.awt.Graphics;
  8. import java.awt.Rectangle;
  9. import java.awt.Shape;
  10. import java.awt.Toolkit;
  11.  
  12. public class LabelView extends View implements TabableView {
  13.    Font font;
  14.    FontMetrics metrics;
  15.    // $FF: renamed from: fg java.awt.Color
  16.    Color field_0;
  17.    Segment text = new Segment();
  18.    boolean underline;
  19.    TabExpander expander;
  20.    // $FF: renamed from: x int
  21.    int field_1;
  22.  
  23.    public LabelView(Element var1) {
  24.       super(var1);
  25.    }
  26.  
  27.    final void loadText(int var1, int var2) {
  28.       try {
  29.          Document var3 = ((View)this).getDocument();
  30.          var3.getText(var1, var2 - var1, this.text);
  31.       } catch (BadLocationException var4) {
  32.          throw new StateInvariantError("LabelView: Stale view: " + var4);
  33.       }
  34.    }
  35.  
  36.    final void paintText(Graphics var1, Shape var2, int var3, int var4) {
  37.       Rectangle var5 = var2.getBounds();
  38.       this.sync();
  39.       this.loadText(var3, var4);
  40.       int var6 = var5.y + var5.height - this.metrics.getDescent();
  41.       var1.setFont(this.font);
  42.       var1.setColor(this.field_0);
  43.       Utilities.drawTabbedText(this.text, var5.x, var6, var1, this.expander, var3);
  44.       if (this.underline) {
  45.          ++var6;
  46.          var1.drawLine(var5.x, var6, var5.x + var5.width, var6);
  47.       }
  48.  
  49.    }
  50.  
  51.    final void sync() {
  52.       if (this.font == null) {
  53.          Element var1 = ((View)this).getElement();
  54.          Document var2 = ((View)this).getDocument();
  55.          if (var2 instanceof StyledDocument) {
  56.             StyledDocument var3 = (StyledDocument)var2;
  57.             AttributeSet var4 = var1.getAttributes();
  58.             this.font = var3.getFont(var4);
  59.             this.field_0 = var3.getForeground(var4);
  60.             this.underline = StyleConstants.isUnderline(var4);
  61.             this.metrics = Toolkit.getDefaultToolkit().getFontMetrics(this.font);
  62.          } else {
  63.             throw new StateInvariantError("LabelView needs StyledDocument");
  64.          }
  65.       }
  66.    }
  67.  
  68.    final float getPreferredSpan(int var1, int var2, int var3, int var4) {
  69.       this.sync();
  70.       switch (var1) {
  71.          case 0:
  72.             this.loadText(var2, var3);
  73.             int var5 = Utilities.getTabbedTextWidth(this.text, this.metrics, var4, this.expander, var2);
  74.             return (float)Math.max(var5, 1);
  75.          case 1:
  76.             return (float)this.metrics.getHeight();
  77.          default:
  78.             throw new IllegalArgumentException("Invalid axis: " + var1);
  79.       }
  80.    }
  81.  
  82.    Shape modelToView(int var1, Shape var2, int var3, int var4) throws BadLocationException {
  83.       Rectangle var5 = var2.getBounds();
  84.       if (var1 >= var3 && var1 <= var4) {
  85.          this.loadText(var3, var1);
  86.          this.sync();
  87.          int var6 = Utilities.getTabbedTextWidth(this.text, this.metrics, var5.x, this.expander, var3);
  88.          return new Rectangle(var5.x + var6, var5.y, 0, this.metrics.getHeight());
  89.       } else {
  90.          throw new BadLocationException("modelToView - can't convert", var4);
  91.       }
  92.    }
  93.  
  94.    int viewToModel(float var1, float var2, Shape var3, int var4, int var5) {
  95.       Rectangle var6 = var3.getBounds();
  96.       this.sync();
  97.       this.loadText(var4, var5);
  98.       int var7 = Utilities.getTabbedTextOffset(this.text, this.metrics, var6.x, (int)var1, this.expander, var4);
  99.       return var4 + var7;
  100.    }
  101.  
  102.    int getBreakWeight(int var1, float var2, float var3, int var4, int var5) {
  103.       if (var1 != 0) {
  104.          return super.getBreakWeight(var1, var2, var3);
  105.       } else {
  106.          this.sync();
  107.          this.loadText(var4, var5);
  108.          int var6 = Utilities.getTabbedTextOffset(this.text, this.metrics, (int)var2, (int)(var2 + var3), this.expander, var4);
  109.          if (var6 == 0) {
  110.             return 0;
  111.          } else {
  112.             for(int var7 = this.text.offset + Math.min(var6, this.text.count - 1); var7 >= this.text.offset; --var7) {
  113.                char var8 = this.text.array[var7];
  114.                if (Character.isWhitespace(var8)) {
  115.                   return 2000;
  116.                }
  117.             }
  118.  
  119.             return 1000;
  120.          }
  121.       }
  122.    }
  123.  
  124.    public float getTabbedSpan(float var1, TabExpander var2) {
  125.       this.expander = var2;
  126.       this.field_1 = (int)var1;
  127.       return this.getPreferredSpan(0, ((View)this).getStartOffset(), ((View)this).getEndOffset(), this.field_1);
  128.    }
  129.  
  130.    public float getPartialSpan(int var1, int var2) {
  131.       int var3 = 0;
  132.  
  133.       try {
  134.          Segment var4 = new Segment();
  135.          ((View)this).getDocument().getText(var1, var2, var4);
  136.          var3 = Utilities.getTabbedTextWidth(var4, this.metrics, this.field_1, this.expander, var1);
  137.       } catch (BadLocationException var5) {
  138.       }
  139.  
  140.       return (float)var3;
  141.    }
  142.  
  143.    public void paint(Graphics var1, Shape var2) {
  144.       this.paintText(var1, var2, ((View)this).getStartOffset(), ((View)this).getEndOffset());
  145.    }
  146.  
  147.    public float getPreferredSpan(int var1) {
  148.       return this.getPreferredSpan(var1, ((View)this).getStartOffset(), ((View)this).getEndOffset(), this.field_1);
  149.    }
  150.  
  151.    public float getAlignment(int var1) {
  152.       if (var1 == 1) {
  153.          float var2 = (float)this.metrics.getHeight();
  154.          float var3 = (float)this.metrics.getDescent();
  155.          float var4 = (var2 - var3) / var2;
  156.          return var4;
  157.       } else {
  158.          return super.getAlignment(var1);
  159.       }
  160.    }
  161.  
  162.    public Shape modelToView(int var1, Shape var2) throws BadLocationException {
  163.       return this.modelToView(var1, var2, ((View)this).getStartOffset(), ((View)this).getEndOffset());
  164.    }
  165.  
  166.    public int viewToModel(float var1, float var2, Shape var3) {
  167.       return this.viewToModel(var1, var2, var3, ((View)this).getStartOffset(), ((View)this).getEndOffset());
  168.    }
  169.  
  170.    public void changedUpdate(DocumentEvent var1, Shape var2, ViewFactory var3) {
  171.       this.font = null;
  172.    }
  173.  
  174.    public int getBreakWeight(int var1, float var2, float var3) {
  175.       return this.getBreakWeight(var1, var2, var3, ((View)this).getStartOffset(), ((View)this).getEndOffset());
  176.    }
  177.  
  178.    public View breakView(int var1, int var2, float var3, float var4) {
  179.       if (var1 != 0) {
  180.          return this;
  181.       } else {
  182.          this.sync();
  183.          this.loadText(var2, ((View)this).getEndOffset());
  184.          int var5 = Utilities.getTabbedTextOffset(this.text, this.metrics, (int)var3, (int)(var3 + var4), this.expander, var2);
  185.  
  186.          for(int var6 = this.text.offset + Math.min(var5, this.text.count - 1); var6 >= this.text.offset; --var6) {
  187.             char var7 = this.text.array[var6];
  188.             if (Character.isWhitespace(var7)) {
  189.                var5 = var6 - this.text.offset + 1;
  190.                break;
  191.             }
  192.          }
  193.  
  194.          int var8 = var2 + var5;
  195.          return new LabelFragment(this, ((View)this).getElement(), var2, var8);
  196.       }
  197.    }
  198.  
  199.    public View createFragment(int var1, int var2) {
  200.       Element var3 = ((View)this).getElement();
  201.       return new LabelFragment(this, var3, var1, var2);
  202.    }
  203. }
  204.