home *** CD-ROM | disk | FTP | other *** search
/ Computer Shopper 144 / DPCS0200.iso / Internet / Supanet / system / swing.jar / javax / swing / text / LabelView.class (.txt) < prev    next >
Encoding:
Java Class File  |  1998-11-05  |  9.7 KB  |  455 lines

  1. package javax.swing.text;
  2.  
  3. import java.awt.Color;
  4. import java.awt.Font;
  5. import java.awt.FontMetrics;
  6. import java.awt.Graphics;
  7. import java.awt.Rectangle;
  8. import java.awt.Shape;
  9. import java.awt.Toolkit;
  10. import javax.swing.event.DocumentEvent;
  11. import javax.swing.text.Position.Bias;
  12.  
  13. public class LabelView extends View implements TabableView {
  14.    Font font;
  15.    FontMetrics metrics;
  16.    // $FF: renamed from: fg java.awt.Color
  17.    Color field_0;
  18.    Segment text = new Segment();
  19.    boolean underline;
  20.    boolean strike;
  21.    boolean superscript;
  22.    boolean subscript;
  23.    boolean rightToLeft;
  24.    TabExpander expander;
  25.    // $FF: renamed from: x int
  26.    int field_1;
  27.  
  28.    public LabelView(Element var1) {
  29.       super(var1);
  30.       int var2 = var1.getStartOffset();
  31.       int var3 = var1.getEndOffset();
  32.       Document var4 = ((View)this).getDocument();
  33.       if (var4 instanceof AbstractDocument) {
  34.          this.rightToLeft = ((AbstractDocument)var4).isLeftToRight(var2, var3) ^ true;
  35.       }
  36.  
  37.    }
  38.  
  39.    public View breakView(int var1, int var2, float var3, float var4) {
  40.       if (var1 == 0) {
  41.          this.sync();
  42.          this.loadText(var2, ((View)this).getEndOffset());
  43.          int var5 = Utilities.getBreakLocation(this.text, this.metrics, (int)var3, (int)(var3 + var4), this.expander, var2);
  44.          int var6 = var2 + var5;
  45.          LabelFragment var7 = new LabelFragment(this, ((View)this).getElement(), var2, var6);
  46.          var7.x = (int)var3;
  47.          return var7;
  48.       } else {
  49.          return this;
  50.       }
  51.    }
  52.  
  53.    public void changedUpdate(DocumentEvent var1, Shape var2, ViewFactory var3) {
  54.       this.font = null;
  55.    }
  56.  
  57.    public View createFragment(int var1, int var2) {
  58.       Element var3 = ((View)this).getElement();
  59.       return new LabelFragment(this, var3, var1, var2);
  60.    }
  61.  
  62.    public float getAlignment(int var1) {
  63.       if (var1 == 1) {
  64.          float var2 = (float)this.metrics.getHeight();
  65.          float var3 = (float)this.metrics.getDescent();
  66.          float var4 = (var2 - var3) / var2;
  67.          return var4;
  68.       } else {
  69.          return super.getAlignment(var1);
  70.       }
  71.    }
  72.  
  73.    public int getBreakWeight(int var1, float var2, float var3) {
  74.       return this.getBreakWeight(var1, var2, var3, ((View)this).getStartOffset(), ((View)this).getEndOffset());
  75.    }
  76.  
  77.    int getBreakWeight(int var1, float var2, float var3, int var4, int var5) {
  78.       if (var1 != 0) {
  79.          return super.getBreakWeight(var1, var2, var3);
  80.       } else {
  81.          this.sync();
  82.          this.loadText(var4, var5);
  83.          int var6 = Utilities.getTabbedTextOffset(this.text, this.metrics, (int)var2, (int)(var2 + var3), this.expander, var4);
  84.          if (var6 == 0) {
  85.             return 0;
  86.          } else {
  87.             for(int var7 = this.text.offset + Math.min(var6, this.text.count - 1); var7 >= this.text.offset; --var7) {
  88.                char var8 = this.text.array[var7];
  89.                if (Character.isWhitespace(var8)) {
  90.                   return 2000;
  91.                }
  92.             }
  93.  
  94.             return 1000;
  95.          }
  96.       }
  97.    }
  98.  
  99.    protected Font getFont() {
  100.       this.sync();
  101.       return this.font;
  102.    }
  103.  
  104.    protected FontMetrics getFontMetrics() {
  105.       this.sync();
  106.       return this.metrics;
  107.    }
  108.  
  109.    public int getNextVisualPositionFrom(int var1, Position.Bias var2, Shape var3, int var4, Position.Bias[] var5) throws BadLocationException {
  110.       int var6 = this.getNextVisualPositionFrom(var1, var2, var3, var4, var5, this.rightToLeft, ((View)this).getStartOffset(), ((View)this).getEndOffset());
  111.       return var6;
  112.    }
  113.  
  114.    int getNextVisualPositionFrom(int var1, Position.Bias var2, Shape var3, int var4, Position.Bias[] var5, boolean var6, int var7, int var8) throws BadLocationException {
  115.       switch (var4) {
  116.          case 1:
  117.          case 5:
  118.             return var1;
  119.          case 2:
  120.          case 4:
  121.          case 6:
  122.          default:
  123.             throw new IllegalArgumentException("Bad direction: " + var4);
  124.          case 3:
  125.             if (var7 == ((View)this).getDocument().getLength()) {
  126.                if (var1 == -1) {
  127.                   var5[0] = Bias.Forward;
  128.                   return var7;
  129.                }
  130.  
  131.                return -1;
  132.             } else if (var6) {
  133.                if (var1 == -1) {
  134.                   this.loadText(var8 - 1, var8);
  135.                   if (this.text.array[this.text.offset] == '\n') {
  136.                      var5[0] = Bias.Forward;
  137.                      return var8 - 1;
  138.                   }
  139.  
  140.                   var5[0] = Bias.Backward;
  141.                   return var8;
  142.                } else {
  143.                   if (var1 == var7) {
  144.                      return -1;
  145.                   }
  146.  
  147.                   var5[0] = Bias.Forward;
  148.                   return var1 - 1;
  149.                }
  150.             } else if (var1 == -1) {
  151.                var5[0] = Bias.Forward;
  152.                return var7;
  153.             } else if (var1 == var8) {
  154.                return -1;
  155.             } else {
  156.                ++var1;
  157.                if (var1 == var8) {
  158.                   this.loadText(var8 - 1, var8);
  159.                   if (this.text.array[this.text.offset] == '\n') {
  160.                      return -1;
  161.                   }
  162.  
  163.                   var5[0] = Bias.Backward;
  164.                } else {
  165.                   var5[0] = Bias.Forward;
  166.                }
  167.  
  168.                return var1;
  169.             }
  170.          case 7:
  171.             if (var7 == ((View)this).getDocument().getLength()) {
  172.                if (var1 == -1) {
  173.                   var5[0] = Bias.Forward;
  174.                   return var7;
  175.                } else {
  176.                   return -1;
  177.                }
  178.             } else if (var6) {
  179.                if (var1 == -1) {
  180.                   var5[0] = Bias.Forward;
  181.                   return var7;
  182.                } else if (var1 == var8) {
  183.                   return -1;
  184.                } else {
  185.                   ++var1;
  186.                   if (var1 == var8) {
  187.                      this.loadText(var8 - 1, var8);
  188.                      if (this.text.array[this.text.offset] == '\n') {
  189.                         return -1;
  190.                      }
  191.  
  192.                      var5[0] = Bias.Backward;
  193.                   } else {
  194.                      var5[0] = Bias.Forward;
  195.                   }
  196.  
  197.                   return var1;
  198.                }
  199.             } else if (var1 == -1) {
  200.                this.loadText(var8 - 1, var8);
  201.                if (this.text.array[this.text.offset] == '\n') {
  202.                   var5[0] = Bias.Forward;
  203.                   return var8 - 1;
  204.                } else {
  205.                   var5[0] = Bias.Backward;
  206.                   return var8;
  207.                }
  208.             } else if (var1 == var7) {
  209.                return -1;
  210.             } else {
  211.                var5[0] = Bias.Forward;
  212.                return var1 - 1;
  213.             }
  214.       }
  215.    }
  216.  
  217.    public float getPartialSpan(int var1, int var2) {
  218.       this.sync();
  219.       int var3 = 0;
  220.  
  221.       try {
  222.          Segment var4 = new Segment();
  223.          ((View)this).getDocument().getText(var1, var2 - var1, var4);
  224.          var3 = Utilities.getTabbedTextWidth(var4, this.metrics, this.field_1, this.expander, var1);
  225.       } catch (BadLocationException var5) {
  226.       }
  227.  
  228.       return (float)var3;
  229.    }
  230.  
  231.    public float getPreferredSpan(int var1) {
  232.       return this.getPreferredSpan(var1, ((View)this).getStartOffset(), ((View)this).getEndOffset(), this.field_1);
  233.    }
  234.  
  235.    final float getPreferredSpan(int var1, int var2, int var3, int var4) {
  236.       this.sync();
  237.       switch (var1) {
  238.          case 0:
  239.             this.loadText(var2, var3);
  240.             int var5 = Utilities.getTabbedTextWidth(this.text, this.metrics, var4, this.expander, var2);
  241.             return (float)Math.max(var5, 1);
  242.          case 1:
  243.             return (float)this.metrics.getHeight();
  244.          default:
  245.             throw new IllegalArgumentException("Invalid axis: " + var1);
  246.       }
  247.    }
  248.  
  249.    public float getTabbedSpan(float var1, TabExpander var2) {
  250.       this.expander = var2;
  251.       this.field_1 = (int)var1;
  252.       return this.getPreferredSpan(0, ((View)this).getStartOffset(), ((View)this).getEndOffset(), this.field_1);
  253.    }
  254.  
  255.    public void insertUpdate(DocumentEvent var1, Shape var2, ViewFactory var3) {
  256.       super.insertUpdate(var1, var2, var3);
  257.       int var4 = ((View)this).getStartOffset();
  258.       int var5 = ((View)this).getEndOffset();
  259.       Document var6 = ((View)this).getDocument();
  260.       if (var6 instanceof AbstractDocument) {
  261.          this.rightToLeft = ((AbstractDocument)var6).isLeftToRight(var4, var5) ^ true;
  262.       }
  263.  
  264.    }
  265.  
  266.    final void loadText(int var1, int var2) {
  267.       try {
  268.          Document var3 = ((View)this).getDocument();
  269.          var3.getText(var1, var2 - var1, this.text);
  270.       } catch (BadLocationException var4) {
  271.          throw new StateInvariantError("LabelView: Stale view: " + var4);
  272.       }
  273.    }
  274.  
  275.    Shape modelToView(int var1, Shape var2, int var3, int var4, Position.Bias var5, boolean var6) throws BadLocationException {
  276.       Rectangle var7 = var2.getBounds();
  277.       if (var1 == var4) {
  278.          this.loadText(var3, var3 + 1);
  279.          this.sync();
  280.          return !var6 ? new Rectangle(var7.x + var7.width, var7.y, 0, this.metrics.getHeight()) : new Rectangle(var7.x, var7.y, 0, this.metrics.getHeight());
  281.       } else if (var1 >= var3 && var1 <= var4) {
  282.          this.loadText(var3, var1);
  283.          this.sync();
  284.          int var8 = Utilities.getTabbedTextWidth(this.text, this.metrics, var7.x, this.expander, var3);
  285.          return var6 ? new Rectangle(var7.x + var7.width - var8, var7.y, 0, this.metrics.getHeight()) : new Rectangle(var7.x + var8, var7.y, 0, this.metrics.getHeight());
  286.       } else {
  287.          throw new BadLocationException("modelToView - can't convert", var4);
  288.       }
  289.    }
  290.  
  291.    public Shape modelToView(int var1, Shape var2, Position.Bias var3) throws BadLocationException {
  292.       return this.modelToView(var1, var2, ((View)this).getStartOffset(), ((View)this).getEndOffset(), var3, this.rightToLeft);
  293.    }
  294.  
  295.    public void paint(Graphics var1, Shape var2) {
  296.       JTextComponent var3 = (JTextComponent)((View)this).getContainer();
  297.       Highlighter var4 = var3.getHighlighter();
  298.       if (var4 instanceof LayeredHighlighter) {
  299.          ((LayeredHighlighter)var4).paintLayeredHighlights(var1, ((View)this).getStartOffset(), ((View)this).getEndOffset(), var2, var3, this);
  300.       }
  301.  
  302.       this.paintText(var3, var1, var2, ((View)this).getStartOffset(), ((View)this).getEndOffset(), false, this.rightToLeft);
  303.    }
  304.  
  305.    final void paintText(JTextComponent var1, Graphics var2, Shape var3, int var4, int var5, boolean var6, boolean var7) {
  306.       Rectangle var8 = var3.getBounds();
  307.       this.sync();
  308.       int var9 = var8.y + var8.height - this.metrics.getDescent();
  309.       var2.setFont(this.font);
  310.       boolean var10 = false;
  311.       if (var1 != null) {
  312.          Color var11 = var1.getSelectedTextColor();
  313.          if (var11 != null && !var11.equals(this.field_0)) {
  314.             Position.Bias[] var12 = new Position.Bias[1];
  315.             Position.Bias[] var13 = new Position.Bias[1];
  316.             int var14 = var1.getSelectionStart(var12);
  317.             int var15 = var1.getSelectionEnd(var13);
  318.             if (var14 != var15) {
  319.                int var16;
  320.                if (var14 <= var4) {
  321.                   var16 = var4;
  322.                } else {
  323.                   var16 = Math.min(var14, var5);
  324.                }
  325.  
  326.                int var17;
  327.                if (var15 >= var5) {
  328.                   var17 = var5;
  329.                } else {
  330.                   var17 = Math.max(var15, var4);
  331.                }
  332.  
  333.                if (var16 != var17) {
  334.                   int var18 = var8.x;
  335.                   var10 = true;
  336.                   if (var16 > var4) {
  337.                      var18 = this.paintTextUsingColor(var18, var9, var2, var4, var16, this.field_0, var6);
  338.                   }
  339.  
  340.                   var18 = this.paintTextUsingColor(var18, var9, var2, var16, var17, var11, var6);
  341.                   if (var17 < var5) {
  342.                      this.paintTextUsingColor(var18, var9, var2, var17, var5, this.field_0, var6);
  343.                   }
  344.                }
  345.             }
  346.          }
  347.       }
  348.  
  349.       if (!var10) {
  350.          this.paintTextUsingColor(var8.x, var9, var2, var4, var5, this.field_0, var6);
  351.       }
  352.  
  353.    }
  354.  
  355.    final int paintTextUsingColor(int var1, int var2, Graphics var3, int var4, int var5, Color var6, boolean var7) {
  356.       var3.setColor(var6);
  357.       this.loadText(var4, var5);
  358.       if (this.superscript) {
  359.          var2 -= this.metrics.getAscent() / 2;
  360.       } else if (this.subscript) {
  361.          var2 += this.metrics.getDescent();
  362.       }
  363.  
  364.       var1 = Utilities.drawTabbedText(this.text, var1, var2, var3, this.expander, var4);
  365.       if (this.underline || this.strike) {
  366.          int var9 = var1 - var1;
  367.          if (var7) {
  368.             while(this.text.count > 0 && Character.isWhitespace(this.text.array[this.text.count - 1])) {
  369.                var9 -= this.metrics.charWidth(this.text.array[this.text.count - 1]);
  370.                --this.text.count;
  371.             }
  372.          }
  373.  
  374.          if (this.underline) {
  375.             ++var2;
  376.          } else if (this.strike) {
  377.             var2 -= this.metrics.getAscent() / 2;
  378.          }
  379.  
  380.          var3.drawLine(var1, var2, var1, var2);
  381.       }
  382.  
  383.       return var1;
  384.    }
  385.  
  386.    protected void setPropertiesFromAttributes() {
  387.       AttributeSet var1 = ((View)this).getAttributes();
  388.       if (var1 != null) {
  389.          Document var2 = ((View)this).getDocument();
  390.          if (!(var2 instanceof StyledDocument)) {
  391.             throw new StateInvariantError("LabelView needs StyledDocument");
  392.          }
  393.  
  394.          StyledDocument var3 = (StyledDocument)var2;
  395.          this.font = var3.getFont(var1);
  396.          this.field_0 = var3.getForeground(var1);
  397.          this.setUnderline(StyleConstants.isUnderline(var1));
  398.          this.setStrikeThrough(StyleConstants.isStrikeThrough(var1));
  399.          this.setSuperscript(StyleConstants.isSuperscript(var1));
  400.          this.setSubscript(StyleConstants.isSubscript(var1));
  401.          this.metrics = Toolkit.getDefaultToolkit().getFontMetrics(this.font);
  402.       }
  403.  
  404.    }
  405.  
  406.    protected void setStrikeThrough(boolean var1) {
  407.       this.strike = var1;
  408.    }
  409.  
  410.    protected void setSubscript(boolean var1) {
  411.       this.subscript = var1;
  412.    }
  413.  
  414.    protected void setSuperscript(boolean var1) {
  415.       this.superscript = var1;
  416.    }
  417.  
  418.    protected void setUnderline(boolean var1) {
  419.       this.underline = var1;
  420.    }
  421.  
  422.    final void sync() {
  423.       if (this.font == null) {
  424.          this.setPropertiesFromAttributes();
  425.       }
  426.  
  427.    }
  428.  
  429.    public int viewToModel(float var1, float var2, Shape var3, Position.Bias[] var4) {
  430.       var4[0] = Bias.Forward;
  431.       return this.viewToModel(var1, var2, var3, var4, ((View)this).getStartOffset(), ((View)this).getEndOffset(), this.rightToLeft);
  432.    }
  433.  
  434.    int viewToModel(float var1, float var2, Shape var3, Position.Bias[] var4, int var5, int var6, boolean var7) {
  435.       Rectangle var8 = var3.getBounds();
  436.       this.sync();
  437.       this.loadText(var5, var6);
  438.       int var9 = Utilities.getTabbedTextOffset(this.text, this.metrics, var8.x, (int)var1, this.expander, var5);
  439.       int var10;
  440.       if (var7) {
  441.          var10 = var6 - var9;
  442.       } else {
  443.          var10 = var5 + var9;
  444.       }
  445.  
  446.       if (var10 == var6) {
  447.          var4[0] = Bias.Backward;
  448.       } else {
  449.          var4[0] = Bias.Forward;
  450.       }
  451.  
  452.       return var10;
  453.    }
  454. }
  455.