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