home *** CD-ROM | disk | FTP | other *** search
- package javax.swing.text;
-
- import java.awt.Component;
- import java.awt.Graphics;
- import java.awt.Point;
- import java.awt.Rectangle;
- import java.awt.event.ActionEvent;
- import java.awt.event.FocusEvent;
- import java.awt.event.FocusListener;
- import java.awt.event.InputEvent;
- import java.awt.event.MouseEvent;
- import java.awt.event.MouseListener;
- import java.awt.event.MouseMotionListener;
- import java.io.IOException;
- import java.io.ObjectInputStream;
- import java.io.ObjectOutputStream;
- import java.util.EventListener;
- import javax.swing.JComponent;
- import javax.swing.SwingUtilities;
- import javax.swing.Timer;
- import javax.swing.event.ChangeEvent;
- import javax.swing.event.ChangeListener;
- import javax.swing.event.EventListenerList;
- import javax.swing.plaf.TextUI;
- import javax.swing.text.Position.Bias;
-
- public class DefaultCaret extends Rectangle implements Caret, FocusListener, MouseListener, MouseMotionListener {
- protected EventListenerList listenerList = new EventListenerList();
- protected transient ChangeEvent changeEvent = null;
- JTextComponent component;
- boolean async = false;
- boolean visible;
- int dot;
- int mark;
- Object selectionTag;
- boolean selectionVisible;
- Timer flasher;
- Point magicCaretPosition;
- transient Position.Bias dotBias;
- transient Position.Bias markBias;
- boolean dotLTR;
- boolean markLTR;
- transient UpdateHandler updateHandler = new UpdateHandler(this);
- private transient int[] flagXPoints = new int[3];
- private transient int[] flagYPoints = new int[3];
- private transient FocusListener focusListener;
- // $FF: synthetic field
- static Class class$javax$swing$event$ChangeListener;
-
- boolean getAsynchronousMovement() {
- return this.async;
- }
-
- void setAsynchronousMovement(boolean var1) {
- this.async = var1;
- }
-
- protected final JTextComponent getComponent() {
- return this.component;
- }
-
- protected final synchronized void repaint() {
- if (this.component != null) {
- this.component.repaint(super.x, super.y, super.width, super.height);
- }
-
- }
-
- protected synchronized void damage(Rectangle var1) {
- if (var1 != null) {
- super.x = var1.x - 4;
- super.y = var1.y;
- super.width = 10;
- super.height = var1.height;
- this.repaint();
- }
-
- }
-
- protected void adjustVisibility(Rectangle var1) {
- SwingUtilities.invokeLater(new SafeScroller(this, var1));
- }
-
- protected Highlighter.HighlightPainter getSelectionPainter() {
- return DefaultHighlighter.DefaultPainter;
- }
-
- protected void positionCaret(MouseEvent var1) {
- Point var2 = new Point(var1.getX(), var1.getY());
- Position.Bias[] var3 = new Position.Bias[1];
- int var4 = this.component.getUI().viewToModel(this.component, var2, var3);
- if (var3[0] == null) {
- var3[0] = Bias.Forward;
- }
-
- if (var4 >= 0) {
- this.setDot(var4, var3[0]);
- }
-
- }
-
- protected void moveCaret(MouseEvent var1) {
- Point var2 = new Point(var1.getX(), var1.getY());
- Position.Bias[] var3 = new Position.Bias[1];
- int var4 = this.component.getUI().viewToModel(this.component, var2, var3);
- if (var3[0] == null) {
- var3[0] = Bias.Forward;
- }
-
- if (var4 >= 0) {
- this.moveDot(var4, var3[0]);
- }
-
- }
-
- public void focusGained(FocusEvent var1) {
- if (this.component.isEnabled()) {
- if (this.component.isEditable()) {
- this.setVisible(true);
- }
-
- this.setSelectionVisible(true);
- }
-
- }
-
- public void focusLost(FocusEvent var1) {
- this.setVisible(false);
- this.setSelectionVisible(var1.isTemporary());
- }
-
- public void mouseClicked(MouseEvent var1) {
- if ((((InputEvent)var1).getModifiers() & 16) != 0) {
- if (var1.getClickCount() == 2) {
- DefaultEditorKit.SelectWordAction var2 = new DefaultEditorKit.SelectWordAction();
- var2.actionPerformed((ActionEvent)null);
- } else if (var1.getClickCount() == 3) {
- DefaultEditorKit.SelectLineAction var3 = new DefaultEditorKit.SelectLineAction();
- var3.actionPerformed((ActionEvent)null);
- }
- }
-
- }
-
- public void mousePressed(MouseEvent var1) {
- if (SwingUtilities.isLeftMouseButton(var1)) {
- if ((((InputEvent)var1).getModifiers() & 1) != 0 && this.getDot() != -1) {
- this.moveCaret(var1);
- } else {
- this.positionCaret(var1);
- }
-
- if (this.component != null && this.component.isEnabled()) {
- this.component.requestFocus();
- }
- }
-
- }
-
- public void mouseReleased(MouseEvent var1) {
- }
-
- public void mouseEntered(MouseEvent var1) {
- }
-
- public void mouseExited(MouseEvent var1) {
- }
-
- public void mouseDragged(MouseEvent var1) {
- if (SwingUtilities.isLeftMouseButton(var1)) {
- this.moveCaret(var1);
- }
-
- }
-
- public void mouseMoved(MouseEvent var1) {
- }
-
- public void paint(Graphics var1) {
- if (this.isVisible()) {
- try {
- TextUI var2 = this.component.getUI();
- Rectangle var3 = var2.modelToView(this.component, this.dot, this.dotBias);
- var1.setColor(this.component.getCaretColor());
- var1.drawLine(var3.x, var3.y, var3.x, var3.y + var3.height - 1);
- Document var4 = this.component.getDocument();
- if (var4 instanceof AbstractDocument) {
- Element var5 = ((AbstractDocument)var4).getBidiRootElement();
- if (var5 != null && var5.getElementCount() > 1) {
- this.flagXPoints[0] = var3.x;
- this.flagYPoints[0] = var3.y;
- this.flagXPoints[1] = var3.x;
- this.flagYPoints[1] = var3.y + 4;
- this.flagYPoints[2] = var3.y;
- this.flagXPoints[2] = this.dotLTR ? var3.x + 5 : var3.x - 4;
- var1.fillPolygon(this.flagXPoints, this.flagYPoints, 3);
- }
- }
- } catch (BadLocationException var6) {
- }
- }
-
- }
-
- public void install(JTextComponent var1) {
- this.component = var1;
- Document var2 = var1.getDocument();
- this.dot = this.mark = 0;
- this.dotLTR = this.markLTR = true;
- this.dotBias = this.markBias = Bias.Forward;
- if (var2 != null) {
- var2.addDocumentListener(this.updateHandler);
- }
-
- ((JComponent)var1).addPropertyChangeListener(this.updateHandler);
- this.focusListener = new FocusHandler(this);
- ((Component)var1).addFocusListener(this.focusListener);
- ((Component)var1).addMouseListener(this);
- ((Component)var1).addMouseMotionListener(this);
- if (this.component.hasFocus()) {
- this.focusGained((FocusEvent)null);
- }
-
- }
-
- public void deinstall(JTextComponent var1) {
- ((Component)var1).removeMouseListener(this);
- ((Component)var1).removeMouseMotionListener(this);
- if (this.focusListener != null) {
- ((Component)var1).removeFocusListener(this.focusListener);
- this.focusListener = null;
- }
-
- ((JComponent)var1).removePropertyChangeListener(this.updateHandler);
- Document var2 = var1.getDocument();
- if (var2 != null) {
- var2.removeDocumentListener(this.updateHandler);
- }
-
- synchronized(this) {
- this.component = null;
- }
-
- if (this.flasher != null) {
- this.flasher.stop();
- }
-
- }
-
- public void addChangeListener(ChangeListener var1) {
- this.listenerList.add(class$javax$swing$event$ChangeListener == null ? (class$javax$swing$event$ChangeListener = class$("javax.swing.event.ChangeListener")) : class$javax$swing$event$ChangeListener, var1);
- }
-
- public void removeChangeListener(ChangeListener var1) {
- this.listenerList.remove(class$javax$swing$event$ChangeListener == null ? (class$javax$swing$event$ChangeListener = class$("javax.swing.event.ChangeListener")) : class$javax$swing$event$ChangeListener, var1);
- }
-
- protected void fireStateChanged() {
- Object[] var1 = this.listenerList.getListenerList();
-
- for(int var2 = var1.length - 2; var2 >= 0; var2 -= 2) {
- if (var1[var2] == (class$javax$swing$event$ChangeListener == null ? (class$javax$swing$event$ChangeListener = class$("javax.swing.event.ChangeListener")) : class$javax$swing$event$ChangeListener)) {
- if (this.changeEvent == null) {
- this.changeEvent = new ChangeEvent(this);
- }
-
- ((ChangeListener)var1[var2 + 1]).stateChanged(this.changeEvent);
- }
- }
-
- }
-
- public EventListener[] getListeners(Class var1) {
- return this.listenerList.getListeners(var1);
- }
-
- public void setSelectionVisible(boolean var1) {
- if (var1 != this.selectionVisible) {
- this.selectionVisible = var1;
- if (this.selectionVisible) {
- Highlighter var2 = this.component.getHighlighter();
- if (this.dot != this.mark && var2 != null && this.selectionTag == null) {
- int var3 = Math.min(this.dot, this.mark);
- int var4 = Math.max(this.dot, this.mark);
- Highlighter.HighlightPainter var5 = this.getSelectionPainter();
-
- try {
- this.selectionTag = var2.addHighlight(var3, var4, var5);
- } catch (BadLocationException var7) {
- this.selectionTag = null;
- }
- }
- } else if (this.selectionTag != null) {
- Highlighter var8 = this.component.getHighlighter();
- var8.removeHighlight(this.selectionTag);
- this.selectionTag = null;
- }
- }
-
- }
-
- public boolean isSelectionVisible() {
- return this.selectionVisible;
- }
-
- public boolean isVisible() {
- return this.visible;
- }
-
- public void setVisible(boolean var1) {
- if (this.component != null) {
- if (this.visible != var1) {
- try {
- Rectangle var2 = this.component.modelToView(this.dot);
- this.damage(var2);
- } catch (BadLocationException var3) {
- }
- }
-
- this.visible = var1;
- }
-
- if (this.flasher != null) {
- if (this.visible) {
- this.flasher.start();
- } else {
- this.flasher.stop();
- }
- }
-
- }
-
- public void setBlinkRate(int var1) {
- if (var1 != 0) {
- if (this.flasher == null) {
- this.flasher = new Timer(var1, this.updateHandler);
- }
-
- this.flasher.setDelay(var1);
- } else if (this.flasher != null) {
- this.flasher.stop();
- this.flasher.removeActionListener(this.updateHandler);
- this.flasher = null;
- }
-
- }
-
- public int getBlinkRate() {
- return this.flasher == null ? 0 : this.flasher.getDelay();
- }
-
- public int getDot() {
- return this.dot;
- }
-
- public int getMark() {
- return this.mark;
- }
-
- public void setDot(int var1) {
- this.setDot(var1, Bias.Forward);
- }
-
- public void moveDot(int var1) {
- this.moveDot(var1, Bias.Forward);
- }
-
- void moveDot(int var1, Position.Bias var2) {
- if (!this.component.isEnabled()) {
- this.setDot(var1, var2);
- } else {
- if (var1 != this.dot) {
- this.changeCaretPosition(var1, var2);
- if (this.selectionVisible) {
- Highlighter var3 = this.component.getHighlighter();
- if (var3 != null) {
- int var4 = Math.min(var1, this.mark);
- int var5 = Math.max(var1, this.mark);
-
- try {
- if (this.selectionTag != null) {
- var3.changeHighlight(this.selectionTag, var4, var5);
- } else {
- Highlighter.HighlightPainter var6 = this.getSelectionPainter();
- this.selectionTag = var3.addHighlight(var4, var5, var6);
- }
- } catch (BadLocationException var7) {
- throw new StateInvariantError("Bad caret position");
- }
- }
- }
- }
-
- }
- }
-
- void setDot(int var1, Position.Bias var2) {
- Document var3 = this.component.getDocument();
- if (var3 != null) {
- var1 = Math.min(var1, var3.getLength());
- }
-
- var1 = Math.max(var1, 0);
- if (var1 == 0) {
- var2 = Bias.Forward;
- }
-
- this.mark = var1;
- if (this.dot != var1 || this.dotBias != var2 || this.selectionTag != null) {
- this.changeCaretPosition(var1, var2);
- }
-
- this.markBias = this.dotBias;
- this.markLTR = this.dotLTR;
- Highlighter var4 = this.component.getHighlighter();
- if (var4 != null && this.selectionTag != null) {
- var4.removeHighlight(this.selectionTag);
- this.selectionTag = null;
- }
-
- }
-
- Position.Bias getDotBias() {
- return this.dotBias;
- }
-
- Position.Bias getMarkBias() {
- return this.markBias;
- }
-
- boolean isDotLeftToRight() {
- return this.dotLTR;
- }
-
- boolean isMarkLeftToRight() {
- return this.markLTR;
- }
-
- boolean isPositionLTR(int var1, Position.Bias var2) {
- Document var3 = this.component.getDocument();
- if (var3 instanceof AbstractDocument) {
- if (var2 == Bias.Backward) {
- --var1;
- if (var1 < 0) {
- var1 = 0;
- }
- }
-
- return ((AbstractDocument)var3).isLeftToRight(var1, var1);
- } else {
- return true;
- }
- }
-
- Position.Bias guessBiasForOffset(int var1, Position.Bias var2, boolean var3) {
- if (var3 != this.isPositionLTR(var1, var2)) {
- var2 = Bias.Backward;
- } else if (var2 != Bias.Backward && var3 != this.isPositionLTR(var1, Bias.Backward)) {
- var2 = Bias.Backward;
- }
-
- if (var2 == Bias.Backward && var1 > 0) {
- try {
- Segment var4 = new Segment();
- this.component.getDocument().getText(var1 - 1, 1, var4);
- if (var4.count > 0 && var4.array[var4.offset] == '\n') {
- var2 = Bias.Forward;
- }
- } catch (BadLocationException var5) {
- }
- }
-
- return var2;
- }
-
- void changeCaretPosition(int var1, Position.Bias var2) {
- this.repaint();
- if (this.flasher != null && this.flasher.isRunning()) {
- this.visible = true;
- this.flasher.restart();
- }
-
- this.dot = var1;
- this.dotBias = var2;
- this.dotLTR = this.isPositionLTR(var1, var2);
- this.fireStateChanged();
- this.setMagicCaretPosition((Point)null);
- 1 var3 = new 1(this);
- SwingUtilities.invokeLater(var3);
- }
-
- void repaintNewCaret() {
- if (this.component != null) {
- TextUI var1 = this.component.getUI();
- Document var2 = this.component.getDocument();
- if (var1 != null && var2 != null) {
- Rectangle var3;
- try {
- var3 = var1.modelToView(this.component, this.dot, this.dotBias);
- } catch (BadLocationException var5) {
- var3 = null;
- }
-
- if (var3 != null) {
- this.adjustVisibility(var3);
- if (this.getMagicCaretPosition() == null) {
- this.setMagicCaretPosition(new Point(var3.x, var3.y));
- }
- }
-
- this.damage(var3);
- }
- }
-
- }
-
- public void setMagicCaretPosition(Point var1) {
- this.magicCaretPosition = var1;
- }
-
- public Point getMagicCaretPosition() {
- return this.magicCaretPosition;
- }
-
- public boolean equals(Object var1) {
- return this == var1;
- }
-
- public String toString() {
- String var1 = "Dot=(" + this.dot + ", " + this.dotBias + ")";
- var1 = var1 + " Mark=(" + this.mark + ", " + this.markBias + ")";
- return var1;
- }
-
- private void readObject(ObjectInputStream var1) throws ClassNotFoundException, IOException {
- var1.defaultReadObject();
- this.updateHandler = new UpdateHandler(this);
- if (!var1.readBoolean()) {
- this.dotBias = Bias.Forward;
- } else {
- this.dotBias = Bias.Backward;
- }
-
- if (!var1.readBoolean()) {
- this.markBias = Bias.Forward;
- } else {
- this.markBias = Bias.Backward;
- }
-
- }
-
- private void writeObject(ObjectOutputStream var1) throws IOException {
- var1.defaultWriteObject();
- var1.writeBoolean(this.dotBias == Bias.Backward);
- var1.writeBoolean(this.markBias == Bias.Backward);
- }
-
- // $FF: synthetic method
- static Class class$(String var0) {
- try {
- return Class.forName(var0);
- } catch (ClassNotFoundException var2) {
- throw new NoClassDefFoundError(((Throwable)var2).getMessage());
- }
- }
- }
-