home *** CD-ROM | disk | FTP | other *** search
/ S283 Planetary Science &n…he Search for Life DVD 2 / DVD-ROM.iso / install / jre1_3 / lib / rt.jar / javax / swing / text / DefaultCaret.class (.txt) < prev    next >
Encoding:
Java Class File  |  1979-12-31  |  11.5 KB  |  567 lines

  1. package javax.swing.text;
  2.  
  3. import java.awt.Component;
  4. import java.awt.Graphics;
  5. import java.awt.Point;
  6. import java.awt.Rectangle;
  7. import java.awt.event.ActionEvent;
  8. import java.awt.event.FocusEvent;
  9. import java.awt.event.FocusListener;
  10. import java.awt.event.InputEvent;
  11. import java.awt.event.MouseEvent;
  12. import java.awt.event.MouseListener;
  13. import java.awt.event.MouseMotionListener;
  14. import java.io.IOException;
  15. import java.io.ObjectInputStream;
  16. import java.io.ObjectOutputStream;
  17. import java.util.EventListener;
  18. import javax.swing.JComponent;
  19. import javax.swing.SwingUtilities;
  20. import javax.swing.Timer;
  21. import javax.swing.event.ChangeEvent;
  22. import javax.swing.event.ChangeListener;
  23. import javax.swing.event.EventListenerList;
  24. import javax.swing.plaf.TextUI;
  25. import javax.swing.text.Position.Bias;
  26.  
  27. public class DefaultCaret extends Rectangle implements Caret, FocusListener, MouseListener, MouseMotionListener {
  28.    protected EventListenerList listenerList = new EventListenerList();
  29.    protected transient ChangeEvent changeEvent = null;
  30.    JTextComponent component;
  31.    boolean async = false;
  32.    boolean visible;
  33.    int dot;
  34.    int mark;
  35.    Object selectionTag;
  36.    boolean selectionVisible;
  37.    Timer flasher;
  38.    Point magicCaretPosition;
  39.    transient Position.Bias dotBias;
  40.    transient Position.Bias markBias;
  41.    boolean dotLTR;
  42.    boolean markLTR;
  43.    transient UpdateHandler updateHandler = new UpdateHandler(this);
  44.    private transient int[] flagXPoints = new int[3];
  45.    private transient int[] flagYPoints = new int[3];
  46.    private transient FocusListener focusListener;
  47.    // $FF: synthetic field
  48.    static Class class$javax$swing$event$ChangeListener;
  49.  
  50.    boolean getAsynchronousMovement() {
  51.       return this.async;
  52.    }
  53.  
  54.    void setAsynchronousMovement(boolean var1) {
  55.       this.async = var1;
  56.    }
  57.  
  58.    protected final JTextComponent getComponent() {
  59.       return this.component;
  60.    }
  61.  
  62.    protected final synchronized void repaint() {
  63.       if (this.component != null) {
  64.          this.component.repaint(super.x, super.y, super.width, super.height);
  65.       }
  66.  
  67.    }
  68.  
  69.    protected synchronized void damage(Rectangle var1) {
  70.       if (var1 != null) {
  71.          super.x = var1.x - 4;
  72.          super.y = var1.y;
  73.          super.width = 10;
  74.          super.height = var1.height;
  75.          this.repaint();
  76.       }
  77.  
  78.    }
  79.  
  80.    protected void adjustVisibility(Rectangle var1) {
  81.       SwingUtilities.invokeLater(new SafeScroller(this, var1));
  82.    }
  83.  
  84.    protected Highlighter.HighlightPainter getSelectionPainter() {
  85.       return DefaultHighlighter.DefaultPainter;
  86.    }
  87.  
  88.    protected void positionCaret(MouseEvent var1) {
  89.       Point var2 = new Point(var1.getX(), var1.getY());
  90.       Position.Bias[] var3 = new Position.Bias[1];
  91.       int var4 = this.component.getUI().viewToModel(this.component, var2, var3);
  92.       if (var3[0] == null) {
  93.          var3[0] = Bias.Forward;
  94.       }
  95.  
  96.       if (var4 >= 0) {
  97.          this.setDot(var4, var3[0]);
  98.       }
  99.  
  100.    }
  101.  
  102.    protected void moveCaret(MouseEvent var1) {
  103.       Point var2 = new Point(var1.getX(), var1.getY());
  104.       Position.Bias[] var3 = new Position.Bias[1];
  105.       int var4 = this.component.getUI().viewToModel(this.component, var2, var3);
  106.       if (var3[0] == null) {
  107.          var3[0] = Bias.Forward;
  108.       }
  109.  
  110.       if (var4 >= 0) {
  111.          this.moveDot(var4, var3[0]);
  112.       }
  113.  
  114.    }
  115.  
  116.    public void focusGained(FocusEvent var1) {
  117.       if (this.component.isEnabled()) {
  118.          if (this.component.isEditable()) {
  119.             this.setVisible(true);
  120.          }
  121.  
  122.          this.setSelectionVisible(true);
  123.       }
  124.  
  125.    }
  126.  
  127.    public void focusLost(FocusEvent var1) {
  128.       this.setVisible(false);
  129.       this.setSelectionVisible(var1.isTemporary());
  130.    }
  131.  
  132.    public void mouseClicked(MouseEvent var1) {
  133.       if ((((InputEvent)var1).getModifiers() & 16) != 0) {
  134.          if (var1.getClickCount() == 2) {
  135.             DefaultEditorKit.SelectWordAction var2 = new DefaultEditorKit.SelectWordAction();
  136.             var2.actionPerformed((ActionEvent)null);
  137.          } else if (var1.getClickCount() == 3) {
  138.             DefaultEditorKit.SelectLineAction var3 = new DefaultEditorKit.SelectLineAction();
  139.             var3.actionPerformed((ActionEvent)null);
  140.          }
  141.       }
  142.  
  143.    }
  144.  
  145.    public void mousePressed(MouseEvent var1) {
  146.       if (SwingUtilities.isLeftMouseButton(var1)) {
  147.          if ((((InputEvent)var1).getModifiers() & 1) != 0 && this.getDot() != -1) {
  148.             this.moveCaret(var1);
  149.          } else {
  150.             this.positionCaret(var1);
  151.          }
  152.  
  153.          if (this.component != null && this.component.isEnabled()) {
  154.             this.component.requestFocus();
  155.          }
  156.       }
  157.  
  158.    }
  159.  
  160.    public void mouseReleased(MouseEvent var1) {
  161.    }
  162.  
  163.    public void mouseEntered(MouseEvent var1) {
  164.    }
  165.  
  166.    public void mouseExited(MouseEvent var1) {
  167.    }
  168.  
  169.    public void mouseDragged(MouseEvent var1) {
  170.       if (SwingUtilities.isLeftMouseButton(var1)) {
  171.          this.moveCaret(var1);
  172.       }
  173.  
  174.    }
  175.  
  176.    public void mouseMoved(MouseEvent var1) {
  177.    }
  178.  
  179.    public void paint(Graphics var1) {
  180.       if (this.isVisible()) {
  181.          try {
  182.             TextUI var2 = this.component.getUI();
  183.             Rectangle var3 = var2.modelToView(this.component, this.dot, this.dotBias);
  184.             var1.setColor(this.component.getCaretColor());
  185.             var1.drawLine(var3.x, var3.y, var3.x, var3.y + var3.height - 1);
  186.             Document var4 = this.component.getDocument();
  187.             if (var4 instanceof AbstractDocument) {
  188.                Element var5 = ((AbstractDocument)var4).getBidiRootElement();
  189.                if (var5 != null && var5.getElementCount() > 1) {
  190.                   this.flagXPoints[0] = var3.x;
  191.                   this.flagYPoints[0] = var3.y;
  192.                   this.flagXPoints[1] = var3.x;
  193.                   this.flagYPoints[1] = var3.y + 4;
  194.                   this.flagYPoints[2] = var3.y;
  195.                   this.flagXPoints[2] = this.dotLTR ? var3.x + 5 : var3.x - 4;
  196.                   var1.fillPolygon(this.flagXPoints, this.flagYPoints, 3);
  197.                }
  198.             }
  199.          } catch (BadLocationException var6) {
  200.          }
  201.       }
  202.  
  203.    }
  204.  
  205.    public void install(JTextComponent var1) {
  206.       this.component = var1;
  207.       Document var2 = var1.getDocument();
  208.       this.dot = this.mark = 0;
  209.       this.dotLTR = this.markLTR = true;
  210.       this.dotBias = this.markBias = Bias.Forward;
  211.       if (var2 != null) {
  212.          var2.addDocumentListener(this.updateHandler);
  213.       }
  214.  
  215.       ((JComponent)var1).addPropertyChangeListener(this.updateHandler);
  216.       this.focusListener = new FocusHandler(this);
  217.       ((Component)var1).addFocusListener(this.focusListener);
  218.       ((Component)var1).addMouseListener(this);
  219.       ((Component)var1).addMouseMotionListener(this);
  220.       if (this.component.hasFocus()) {
  221.          this.focusGained((FocusEvent)null);
  222.       }
  223.  
  224.    }
  225.  
  226.    public void deinstall(JTextComponent var1) {
  227.       ((Component)var1).removeMouseListener(this);
  228.       ((Component)var1).removeMouseMotionListener(this);
  229.       if (this.focusListener != null) {
  230.          ((Component)var1).removeFocusListener(this.focusListener);
  231.          this.focusListener = null;
  232.       }
  233.  
  234.       ((JComponent)var1).removePropertyChangeListener(this.updateHandler);
  235.       Document var2 = var1.getDocument();
  236.       if (var2 != null) {
  237.          var2.removeDocumentListener(this.updateHandler);
  238.       }
  239.  
  240.       synchronized(this) {
  241.          this.component = null;
  242.       }
  243.  
  244.       if (this.flasher != null) {
  245.          this.flasher.stop();
  246.       }
  247.  
  248.    }
  249.  
  250.    public void addChangeListener(ChangeListener var1) {
  251.       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);
  252.    }
  253.  
  254.    public void removeChangeListener(ChangeListener var1) {
  255.       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);
  256.    }
  257.  
  258.    protected void fireStateChanged() {
  259.       Object[] var1 = this.listenerList.getListenerList();
  260.  
  261.       for(int var2 = var1.length - 2; var2 >= 0; var2 -= 2) {
  262.          if (var1[var2] == (class$javax$swing$event$ChangeListener == null ? (class$javax$swing$event$ChangeListener = class$("javax.swing.event.ChangeListener")) : class$javax$swing$event$ChangeListener)) {
  263.             if (this.changeEvent == null) {
  264.                this.changeEvent = new ChangeEvent(this);
  265.             }
  266.  
  267.             ((ChangeListener)var1[var2 + 1]).stateChanged(this.changeEvent);
  268.          }
  269.       }
  270.  
  271.    }
  272.  
  273.    public EventListener[] getListeners(Class var1) {
  274.       return this.listenerList.getListeners(var1);
  275.    }
  276.  
  277.    public void setSelectionVisible(boolean var1) {
  278.       if (var1 != this.selectionVisible) {
  279.          this.selectionVisible = var1;
  280.          if (this.selectionVisible) {
  281.             Highlighter var2 = this.component.getHighlighter();
  282.             if (this.dot != this.mark && var2 != null && this.selectionTag == null) {
  283.                int var3 = Math.min(this.dot, this.mark);
  284.                int var4 = Math.max(this.dot, this.mark);
  285.                Highlighter.HighlightPainter var5 = this.getSelectionPainter();
  286.  
  287.                try {
  288.                   this.selectionTag = var2.addHighlight(var3, var4, var5);
  289.                } catch (BadLocationException var7) {
  290.                   this.selectionTag = null;
  291.                }
  292.             }
  293.          } else if (this.selectionTag != null) {
  294.             Highlighter var8 = this.component.getHighlighter();
  295.             var8.removeHighlight(this.selectionTag);
  296.             this.selectionTag = null;
  297.          }
  298.       }
  299.  
  300.    }
  301.  
  302.    public boolean isSelectionVisible() {
  303.       return this.selectionVisible;
  304.    }
  305.  
  306.    public boolean isVisible() {
  307.       return this.visible;
  308.    }
  309.  
  310.    public void setVisible(boolean var1) {
  311.       if (this.component != null) {
  312.          if (this.visible != var1) {
  313.             try {
  314.                Rectangle var2 = this.component.modelToView(this.dot);
  315.                this.damage(var2);
  316.             } catch (BadLocationException var3) {
  317.             }
  318.          }
  319.  
  320.          this.visible = var1;
  321.       }
  322.  
  323.       if (this.flasher != null) {
  324.          if (this.visible) {
  325.             this.flasher.start();
  326.          } else {
  327.             this.flasher.stop();
  328.          }
  329.       }
  330.  
  331.    }
  332.  
  333.    public void setBlinkRate(int var1) {
  334.       if (var1 != 0) {
  335.          if (this.flasher == null) {
  336.             this.flasher = new Timer(var1, this.updateHandler);
  337.          }
  338.  
  339.          this.flasher.setDelay(var1);
  340.       } else if (this.flasher != null) {
  341.          this.flasher.stop();
  342.          this.flasher.removeActionListener(this.updateHandler);
  343.          this.flasher = null;
  344.       }
  345.  
  346.    }
  347.  
  348.    public int getBlinkRate() {
  349.       return this.flasher == null ? 0 : this.flasher.getDelay();
  350.    }
  351.  
  352.    public int getDot() {
  353.       return this.dot;
  354.    }
  355.  
  356.    public int getMark() {
  357.       return this.mark;
  358.    }
  359.  
  360.    public void setDot(int var1) {
  361.       this.setDot(var1, Bias.Forward);
  362.    }
  363.  
  364.    public void moveDot(int var1) {
  365.       this.moveDot(var1, Bias.Forward);
  366.    }
  367.  
  368.    void moveDot(int var1, Position.Bias var2) {
  369.       if (!this.component.isEnabled()) {
  370.          this.setDot(var1, var2);
  371.       } else {
  372.          if (var1 != this.dot) {
  373.             this.changeCaretPosition(var1, var2);
  374.             if (this.selectionVisible) {
  375.                Highlighter var3 = this.component.getHighlighter();
  376.                if (var3 != null) {
  377.                   int var4 = Math.min(var1, this.mark);
  378.                   int var5 = Math.max(var1, this.mark);
  379.  
  380.                   try {
  381.                      if (this.selectionTag != null) {
  382.                         var3.changeHighlight(this.selectionTag, var4, var5);
  383.                      } else {
  384.                         Highlighter.HighlightPainter var6 = this.getSelectionPainter();
  385.                         this.selectionTag = var3.addHighlight(var4, var5, var6);
  386.                      }
  387.                   } catch (BadLocationException var7) {
  388.                      throw new StateInvariantError("Bad caret position");
  389.                   }
  390.                }
  391.             }
  392.          }
  393.  
  394.       }
  395.    }
  396.  
  397.    void setDot(int var1, Position.Bias var2) {
  398.       Document var3 = this.component.getDocument();
  399.       if (var3 != null) {
  400.          var1 = Math.min(var1, var3.getLength());
  401.       }
  402.  
  403.       var1 = Math.max(var1, 0);
  404.       if (var1 == 0) {
  405.          var2 = Bias.Forward;
  406.       }
  407.  
  408.       this.mark = var1;
  409.       if (this.dot != var1 || this.dotBias != var2 || this.selectionTag != null) {
  410.          this.changeCaretPosition(var1, var2);
  411.       }
  412.  
  413.       this.markBias = this.dotBias;
  414.       this.markLTR = this.dotLTR;
  415.       Highlighter var4 = this.component.getHighlighter();
  416.       if (var4 != null && this.selectionTag != null) {
  417.          var4.removeHighlight(this.selectionTag);
  418.          this.selectionTag = null;
  419.       }
  420.  
  421.    }
  422.  
  423.    Position.Bias getDotBias() {
  424.       return this.dotBias;
  425.    }
  426.  
  427.    Position.Bias getMarkBias() {
  428.       return this.markBias;
  429.    }
  430.  
  431.    boolean isDotLeftToRight() {
  432.       return this.dotLTR;
  433.    }
  434.  
  435.    boolean isMarkLeftToRight() {
  436.       return this.markLTR;
  437.    }
  438.  
  439.    boolean isPositionLTR(int var1, Position.Bias var2) {
  440.       Document var3 = this.component.getDocument();
  441.       if (var3 instanceof AbstractDocument) {
  442.          if (var2 == Bias.Backward) {
  443.             --var1;
  444.             if (var1 < 0) {
  445.                var1 = 0;
  446.             }
  447.          }
  448.  
  449.          return ((AbstractDocument)var3).isLeftToRight(var1, var1);
  450.       } else {
  451.          return true;
  452.       }
  453.    }
  454.  
  455.    Position.Bias guessBiasForOffset(int var1, Position.Bias var2, boolean var3) {
  456.       if (var3 != this.isPositionLTR(var1, var2)) {
  457.          var2 = Bias.Backward;
  458.       } else if (var2 != Bias.Backward && var3 != this.isPositionLTR(var1, Bias.Backward)) {
  459.          var2 = Bias.Backward;
  460.       }
  461.  
  462.       if (var2 == Bias.Backward && var1 > 0) {
  463.          try {
  464.             Segment var4 = new Segment();
  465.             this.component.getDocument().getText(var1 - 1, 1, var4);
  466.             if (var4.count > 0 && var4.array[var4.offset] == '\n') {
  467.                var2 = Bias.Forward;
  468.             }
  469.          } catch (BadLocationException var5) {
  470.          }
  471.       }
  472.  
  473.       return var2;
  474.    }
  475.  
  476.    void changeCaretPosition(int var1, Position.Bias var2) {
  477.       this.repaint();
  478.       if (this.flasher != null && this.flasher.isRunning()) {
  479.          this.visible = true;
  480.          this.flasher.restart();
  481.       }
  482.  
  483.       this.dot = var1;
  484.       this.dotBias = var2;
  485.       this.dotLTR = this.isPositionLTR(var1, var2);
  486.       this.fireStateChanged();
  487.       this.setMagicCaretPosition((Point)null);
  488.       1 var3 = new 1(this);
  489.       SwingUtilities.invokeLater(var3);
  490.    }
  491.  
  492.    void repaintNewCaret() {
  493.       if (this.component != null) {
  494.          TextUI var1 = this.component.getUI();
  495.          Document var2 = this.component.getDocument();
  496.          if (var1 != null && var2 != null) {
  497.             Rectangle var3;
  498.             try {
  499.                var3 = var1.modelToView(this.component, this.dot, this.dotBias);
  500.             } catch (BadLocationException var5) {
  501.                var3 = null;
  502.             }
  503.  
  504.             if (var3 != null) {
  505.                this.adjustVisibility(var3);
  506.                if (this.getMagicCaretPosition() == null) {
  507.                   this.setMagicCaretPosition(new Point(var3.x, var3.y));
  508.                }
  509.             }
  510.  
  511.             this.damage(var3);
  512.          }
  513.       }
  514.  
  515.    }
  516.  
  517.    public void setMagicCaretPosition(Point var1) {
  518.       this.magicCaretPosition = var1;
  519.    }
  520.  
  521.    public Point getMagicCaretPosition() {
  522.       return this.magicCaretPosition;
  523.    }
  524.  
  525.    public boolean equals(Object var1) {
  526.       return this == var1;
  527.    }
  528.  
  529.    public String toString() {
  530.       String var1 = "Dot=(" + this.dot + ", " + this.dotBias + ")";
  531.       var1 = var1 + " Mark=(" + this.mark + ", " + this.markBias + ")";
  532.       return var1;
  533.    }
  534.  
  535.    private void readObject(ObjectInputStream var1) throws ClassNotFoundException, IOException {
  536.       var1.defaultReadObject();
  537.       this.updateHandler = new UpdateHandler(this);
  538.       if (!var1.readBoolean()) {
  539.          this.dotBias = Bias.Forward;
  540.       } else {
  541.          this.dotBias = Bias.Backward;
  542.       }
  543.  
  544.       if (!var1.readBoolean()) {
  545.          this.markBias = Bias.Forward;
  546.       } else {
  547.          this.markBias = Bias.Backward;
  548.       }
  549.  
  550.    }
  551.  
  552.    private void writeObject(ObjectOutputStream var1) throws IOException {
  553.       var1.defaultWriteObject();
  554.       var1.writeBoolean(this.dotBias == Bias.Backward);
  555.       var1.writeBoolean(this.markBias == Bias.Backward);
  556.    }
  557.  
  558.    // $FF: synthetic method
  559.    static Class class$(String var0) {
  560.       try {
  561.          return Class.forName(var0);
  562.       } catch (ClassNotFoundException var2) {
  563.          throw new NoClassDefFoundError(((Throwable)var2).getMessage());
  564.       }
  565.    }
  566. }
  567.