home *** CD-ROM | disk | FTP | other *** search
- package com.sun.java.swing.text;
-
- import com.sun.java.swing.event.DocumentEvent;
- import java.awt.Color;
- import java.awt.Component;
- import java.awt.Container;
- import java.awt.Font;
- import java.awt.FontMetrics;
- import java.awt.Graphics;
- import java.awt.Rectangle;
- import java.awt.Shape;
-
- public class PlainView extends View implements TabExpander {
- protected FontMetrics metrics;
- Segment lineBuffer = new Segment();
- int width;
- int tabSize;
- int tabBase;
- JTextComponent host;
- int sel0;
- int sel1;
- Color unselected;
- Color selected;
-
- public PlainView(Element var1) {
- super(var1);
- }
-
- protected int getTabSize() {
- Integer var1 = (Integer)((View)this).getDocument().getProperty("tabSize");
- int var2 = var1 != null ? var1 : 8;
- return var2;
- }
-
- protected int getLineLimit() {
- Integer var1 = (Integer)((View)this).getDocument().getProperty("lineLimit");
- if (var1 == null) {
- int var2 = 0;
- int var3 = ((View)this).getElement().getElementCount();
-
- for(int var4 = 0; var4 < var3; ++var4) {
- Element var5 = ((View)this).getElement().getElement(var4);
- int var6 = var5.getStartOffset();
- int var7 = var5.getEndOffset();
- if (var7 - var6 > var2) {
- var2 = var7 - var6;
- }
- }
-
- var1 = new Integer(var2);
- ((View)this).getDocument().putProperty("lineLimit", var1);
- }
-
- return var1;
- }
-
- protected void drawLine(int var1, Graphics var2, int var3, int var4) {
- try {
- Element var5 = ((View)this).getElement().getElement(var1);
- int var6 = var5.getStartOffset();
- int var7 = var5.getEndOffset();
- var7 = Math.min(((View)this).getDocument().getLength(), var7);
- if (this.sel0 == this.sel1) {
- this.drawUnselectedText(var2, var3, var4, var6, var7);
- } else if (var6 >= this.sel0 && var6 <= this.sel1 && var7 >= this.sel0 && var7 <= this.sel1) {
- this.drawSelectedText(var2, var3, var4, var6, var7);
- } else if (this.sel0 >= var6 && this.sel0 <= var7) {
- if (this.sel1 >= var6 && this.sel1 <= var7) {
- var3 = this.drawUnselectedText(var2, var3, var4, var6, this.sel0);
- var3 = this.drawSelectedText(var2, var3, var4, this.sel0, this.sel1);
- this.drawUnselectedText(var2, var3, var4, this.sel1, var7);
- } else {
- var3 = this.drawUnselectedText(var2, var3, var4, var6, this.sel0);
- this.drawSelectedText(var2, var3, var4, this.sel0, var7);
- }
- } else if (this.sel1 >= var6 && this.sel1 <= var7) {
- var3 = this.drawSelectedText(var2, var3, var4, var6, this.sel1);
- this.drawUnselectedText(var2, var3, var4, this.sel1, var7);
- } else {
- this.drawUnselectedText(var2, var3, var4, var6, var7);
- }
- } catch (BadLocationException var8) {
- throw new StateInvariantError("Can't render line: " + var1);
- }
- }
-
- protected int drawUnselectedText(Graphics var1, int var2, int var3, int var4, int var5) throws BadLocationException {
- var1.setColor(this.unselected);
- Document var6 = ((View)this).getDocument();
- var6.getText(var4, var5 - var4, this.lineBuffer);
- return Utilities.drawTabbedText(this.lineBuffer, var2, var3, var1, this, var4);
- }
-
- protected int drawSelectedText(Graphics var1, int var2, int var3, int var4, int var5) throws BadLocationException {
- var1.setColor(this.selected);
- Document var6 = ((View)this).getDocument();
- var6.getText(var4, var5 - var4, this.lineBuffer);
- return Utilities.drawTabbedText(this.lineBuffer, var2, var3, var1, this, var4);
- }
-
- protected final Segment getLineBuffer() {
- return this.lineBuffer;
- }
-
- final void updateMetrics() {
- Container var1 = ((View)this).getContainer();
- Font var2 = ((Component)var1).getFont();
- this.metrics = ((Component)var1).getFontMetrics(var2);
- int var3 = this.metrics.charWidth('m');
- this.width = this.getLineLimit() * var3;
- this.tabSize = this.getTabSize() * var3;
- }
-
- public void setParent(View var1) {
- super.setParent(var1);
- this.host = (JTextComponent)((View)this).getContainer();
- }
-
- public float getPreferredSpan(int var1) {
- this.updateMetrics();
- switch (var1) {
- case 0:
- return (float)this.width;
- case 1:
- return (float)(((View)this).getElement().getElementCount() * this.metrics.getHeight());
- default:
- throw new IllegalArgumentException("Invalid axis: " + var1);
- }
- }
-
- public void paint(Graphics var1, Shape var2) {
- Rectangle var3 = var2.getBounds();
- this.tabBase = var3.x;
- var1.setFont(this.host.getFont());
- this.sel0 = this.host.getSelectionStart();
- this.sel1 = this.host.getSelectionEnd();
- this.unselected = this.host.isEnabled() ? this.host.getForeground() : this.host.getDisabledTextColor();
- Caret var4 = this.host.getCaret();
- this.selected = var4.isSelectionVisible() ? this.host.getSelectedTextColor() : this.unselected;
- this.updateMetrics();
- Rectangle var5 = var1.getClipBounds();
- int var6 = this.metrics.getHeight();
- int var7 = var3.y + var3.height - (var5.y + var5.height);
- int var8 = Math.max(0, var7 / var6);
- int var9 = var5.y - var3.y;
- int var10 = Math.max(0, var9 / var6);
- int var11 = var3.height / var6;
- Rectangle var12 = this.lineToRect(var2, var10);
- int var13 = var12.y + this.metrics.getAscent();
- int var14 = var12.x;
- Element var15 = ((View)this).getElement();
- int var16 = Math.min(var15.getElementCount(), var11 - var8);
-
- for(int var17 = var10; var17 < var16; ++var17) {
- this.drawLine(var17, var1, var14, var13);
- var13 += var6;
- }
-
- }
-
- public void preferenceChanged(View var1, boolean var2, boolean var3) {
- ((View)this).getDocument().putProperty("lineLimit", (Object)null);
- super.preferenceChanged(var1, var2, var3);
- }
-
- public Shape modelToView(int var1, Shape var2) throws BadLocationException {
- Document var3 = ((View)this).getDocument();
- Element var4 = ((View)this).getElement();
- int var5 = var4.getElementIndex(var1);
- Rectangle var6 = this.lineToRect(var2, var5);
- this.tabBase = var6.x;
- this.tabBase = var6.x;
- Element var7 = var4.getElement(var5);
- int var8 = var7.getStartOffset();
- var3.getText(var8, var1 - var8, this.lineBuffer);
- int var9 = Utilities.getTabbedTextWidth(this.lineBuffer, this.metrics, 0, this, var8);
- var6.x += var9;
- var6.width = 1;
- var6.height = this.metrics.getHeight();
- return var6;
- }
-
- public int viewToModel(float var1, float var2, Shape var3) {
- Rectangle var4 = var3.getBounds();
- Document var5 = ((View)this).getDocument();
- int var6 = (int)var1;
- int var7 = (int)var2;
- if (var7 < var4.y) {
- return ((View)this).getStartOffset();
- } else if (var7 > var4.y + var4.height) {
- return ((View)this).getEndOffset() - 1;
- } else {
- Element var8 = var5.getDefaultRootElement();
- int var9 = Math.abs((var7 - var4.y) / this.metrics.getHeight());
- if (var9 >= var8.getElementCount()) {
- return ((View)this).getEndOffset() - 1;
- } else {
- Element var10 = var8.getElement(var9);
- if (var6 < var4.x) {
- return var10.getStartOffset();
- } else if (var6 > var4.x + var4.width) {
- return var10.getEndOffset() - 1;
- } else {
- try {
- int var11 = var10.getStartOffset();
- int var12 = var10.getEndOffset() - 1;
- var5.getText(var11, var12 - var11, this.lineBuffer);
- this.tabBase = var4.x;
- int var13 = var11 + Utilities.getTabbedTextOffset(this.lineBuffer, this.metrics, this.tabBase, var6, this, var11);
- return var13;
- } catch (BadLocationException var14) {
- return -1;
- }
- }
- }
- }
- }
-
- public void insertUpdate(DocumentEvent var1, Shape var2, ViewFactory var3) {
- this.updateDamage(var1, var2, var3);
- }
-
- public void removeUpdate(DocumentEvent var1, Shape var2, ViewFactory var3) {
- this.updateDamage(var1, var2, var3);
- }
-
- public void changedUpdate(DocumentEvent var1, Shape var2, ViewFactory var3) {
- this.updateDamage(var1, var2, var3);
- }
-
- public float nextTabStop(float var1, int var2) {
- int var3 = ((int)var1 - this.tabBase) / this.tabSize;
- return (float)((var3 + 1) * this.tabSize);
- }
-
- void updateDamage(DocumentEvent var1, Shape var2, ViewFactory var3) {
- if (this.host.isShowing()) {
- this.updateMetrics();
- Element var4 = ((View)this).getElement();
- DocumentEvent.ElementChange var5 = var1.getChange(var4);
- Element[] var6 = var5 != null ? var5.getChildrenAdded() : null;
- Element[] var7 = var5 != null ? var5.getChildrenRemoved() : null;
- if (var6 != null && var6.length > 0 || var7 != null && var7.length > 0) {
- this.preferenceChanged((View)null, true, true);
- this.host.repaint();
- return;
- }
-
- this.preferenceChanged((View)null, true, false);
- Element var8 = ((View)this).getElement();
- int var9 = var8.getElementIndex(var1.getOffset());
- this.damageLineRange(var9, var9, var2, this.host);
- }
-
- }
-
- private void damageLineRange(int var1, int var2, Shape var3, Component var4) {
- if (var3 != null) {
- Rectangle var5 = this.lineToRect(var3, var1);
- Rectangle var6 = this.lineToRect(var3, var2);
- if (var5 != null && var6 != null) {
- Rectangle var7 = var5.union(var6);
- var4.repaint(var7.x, var7.y, var7.width, var7.height);
- return;
- }
-
- var4.repaint();
- }
-
- }
-
- private Rectangle lineToRect(Shape var1, int var2) {
- Rectangle var3 = null;
- if (this.metrics != null) {
- Rectangle var4 = var1.getBounds();
- var3 = new Rectangle(var4.x, var4.y + var2 * this.metrics.getHeight(), var4.width, this.metrics.getHeight());
- }
-
- return var3;
- }
- }
-