Class ConfigurableCaret

All Implemented Interfaces:
FocusListener, MouseListener, MouseMotionListener, Shape, Serializable, Cloneable, EventListener, Caret

public class ConfigurableCaret extends DefaultCaret
The caret used by RTextArea. This caret has all the properties that javax.swing.text.DefaultCaret does, as well as adding the following niceties:
  • This caret can render itself many different ways; see the setStyle(CaretStyle) method and CaretStyle for more information.
  • On Microsoft Windows and other operating systems that do not support system selection (i.e., selecting text, then pasting via the middle mouse button), clicking the middle mouse button will cause a regular paste operation to occur. On systems that support system selection (i.e., all UNIX variants), the middle mouse button will behave normally.
Version:
0.6
See Also:
  • Field Details

    • seg

      private transient Segment seg
      Used for fastest-possible retrieval of the character at the caret's position in the document.
    • style

      private CaretStyle style
      Whether the caret is a vertical line, a horizontal line, or a block.
    • selectionPainter

      private ChangeableHighlightPainter selectionPainter
      The selection painter. By default, this paints selections with the text area's selection color.
    • alwaysVisible

      private boolean alwaysVisible
    • pasteOnMiddleMouseClick

      private boolean pasteOnMiddleMouseClick
      Whether this caret will try to paste into the editor (assuming it is editable) on middle-mouse clicks.
    • selectionStart

      private int selectionStart
      The offset into the document where selection started.
    • selectionEnd

      private int selectionEnd
      The offset into the document where selection ended.
    • selectionType

      private ConfigurableCaret.SelectionType selectionType
      Defines the current selection behavior.
  • Constructor Details

  • Method Details

    • adjustCaret

      private void adjustCaret(MouseEvent e)
      Adjusts the caret location based on the MouseEvent.
    • adjustFocus

      private void adjustFocus(boolean inWindow)
      Adjusts the focus, if necessary.
      Parameters:
      inWindow - if true indicates requestFocusInWindow should be used
    • damage

      protected void damage(Rectangle r)
      Overridden to damage the correct width of the caret, since this caret can be different sizes.
      Overrides:
      damage in class DefaultCaret
      Parameters:
      r - The current location of the caret.
    • deinstall

      public void deinstall(JTextComponent c)
      Called when the UI is being removed from the interface of a JTextComponent. This is used to unregister any listeners that were attached.
      Specified by:
      deinstall in interface Caret
      Overrides:
      deinstall in class DefaultCaret
      Parameters:
      c - The text component. If this is not an RTextArea, an Exception will be thrown.
    • getPasteOnMiddleMouseClick

      public boolean getPasteOnMiddleMouseClick()
      Returns whether this caret will paste the contents of the clipboard into the editor (assuming it is editable) on middle-mouse-button clicks.
      Returns:
      Whether a paste operation will be performed.
      See Also:
    • getTextArea

      protected RTextArea getTextArea()
      Gets the text editor component that this caret is bound to.
      Returns:
      The RTextArea.
    • getRoundedSelectionEdges

      public boolean getRoundedSelectionEdges()
      Returns whether this caret's selection uses rounded edges.
      Returns:
      Whether this caret's edges are rounded.
      See Also:
    • getSelectionPainter

      protected Highlighter.HighlightPainter getSelectionPainter()
      Gets the painter for the Highlighter. This is overridden to return our custom selection painter.
      Overrides:
      getSelectionPainter in class DefaultCaret
      Returns:
      The painter.
    • getStyle

      public CaretStyle getStyle()
      Gets the current style of this caret.
      Returns:
      The caret's style.
      See Also:
    • install

      public void install(JTextComponent c)
      Installs this caret on a text component.
      Specified by:
      install in interface Caret
      Overrides:
      install in class DefaultCaret
      Parameters:
      c - The text component. If this is not an RTextArea, an Exception will be thrown.
    • isAlwaysVisible

      public boolean isAlwaysVisible()
      Returns whether this caret is always visible (as opposed to blinking, or not visible when the editor's window is not focused). This can be used by popup windows that want the caret's location to still be visible for contextual purposes while they are displayed.
      Returns:
      Whether this caret is always visible.
      See Also:
    • mouseClicked

      public void mouseClicked(MouseEvent e)
      Called when the mouse is clicked. Implements pasting the system selection when the middle mouse button is clicked.
      Specified by:
      mouseClicked in interface MouseListener
      Overrides:
      mouseClicked in class DefaultCaret
      Parameters:
      e - The mouse event.
    • mouseDragged

      public void mouseDragged(MouseEvent e)
      Specified by:
      mouseDragged in interface MouseMotionListener
      Overrides:
      mouseDragged in class DefaultCaret
    • mousePressed

      public void mousePressed(MouseEvent e)
      Called when the mouse is clicked in the editor. Implements the following behaviors:
      • Select-by-word on double-click
      • Select-buy-line on triple-click
      • Focus the editor on right-clicks (e.g. when popup menu is shown)
      Specified by:
      mousePressed in interface MouseListener
      Overrides:
      mousePressed in class DefaultCaret
      Parameters:
      e - The mouse event.
    • mouseReleased

      public void mouseReleased(MouseEvent e)
      Specified by:
      mouseReleased in interface MouseListener
      Overrides:
      mouseReleased in class DefaultCaret
    • paint

      public void paint(Graphics g)
      Paints the cursor.
      Specified by:
      paint in interface Caret
      Overrides:
      paint in class DefaultCaret
      Parameters:
      g - The graphics context in which to paint.
    • select

      private void select(int mark, int dot)
    • setAlwaysVisible

      public void setAlwaysVisible(boolean alwaysVisible)
      Toggles whether this caret should always be visible (as opposed to blinking, or not visible when the editor's window is not focused). This can be used by popup windows that want the caret's location to still be visible for contextual purposes while they are displayed.
      Parameters:
      alwaysVisible - Whether this caret should always be visible.
      See Also:
    • setPasteOnMiddleMouseClick

      public void setPasteOnMiddleMouseClick(boolean paste)
      Sets whether this caret will paste the contents of the clipboard into the editor (assuming it is editable) on middle-mouse-button clicks.
      Parameters:
      paste - Whether a paste operation will be performed.
      See Also:
    • setRoundedSelectionEdges

      public void setRoundedSelectionEdges(boolean rounded)
      Sets whether this caret's selection should have rounded edges.
      Parameters:
      rounded - Whether it should have rounded edges.
      See Also:
    • setSelectionVisible

      public void setSelectionVisible(boolean visible)
      Overridden to always render the selection, even when the text component loses focus.
      Specified by:
      setSelectionVisible in interface Caret
      Overrides:
      setSelectionVisible in class DefaultCaret
      Parameters:
      visible - Whether the selection should be visible. This parameter is ignored.
    • setStyle

      public void setStyle(CaretStyle style)
      Sets the style used when painting the caret.
      Parameters:
      style - The style to use. This should not be null.
      See Also:
    • validateWidth

      private void validateWidth(Rectangle rect)
      Helper function used by the block and underline carets to ensure the width of the painted caret is valid. This is done for the following reasons:
      • The View classes in the javax.swing.text package always return a width of "1" when modelToView is called. We'll be needing the actual width.
      • Even in smart views, such as RSyntaxTextArea's SyntaxView and WrappedSyntaxView that return the width of the current character, if the caret is at the end of a line for example, the width returned from modelToView will be 0 (as the width of unprintable characters such as '\n' is calculated as 0). In this case, we'll use a default width value.
      Parameters:
      rect - The rectangle returned by the current View's modelToView method for the caret position.