Class IconRowHeader

  • All Implemented Interfaces:
    java.awt.event.MouseListener, java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable, java.util.EventListener, javax.accessibility.Accessible
    Direct Known Subclasses:
    FoldingAwareIconRowHeader

    public class IconRowHeader
    extends AbstractGutterComponent
    implements java.awt.event.MouseListener
    Renders icons in the Gutter. This can be used to visually mark lines containing syntax errors, lines with breakpoints set on them, etc.

    This component has built-in support for displaying icons representing "bookmarks;" that is, lines a user can cycle through via F2 and Shift+F2. Bookmarked lines are toggled via Ctrl+F2, or by clicking in the icon area at the line to bookmark. In order to enable bookmarking, you must first assign an icon to represent a bookmarked line, then actually enable the feature. This is actually done on the parent Gutter component:

     Gutter gutter = scrollPane.getGutter();
     gutter.setBookmarkIcon(new ImageIcon("bookmark.png"));
     gutter.setBookmarkingEnabled(true);
     
    Version:
    1.0
    See Also:
    FoldingAwareIconRowHeader, Serialized Form
    • Nested Class Summary

      Nested Classes 
      Modifier and Type Class Description
      private static class  IconRowHeader.GutterIconImpl
      Implementation of the icons rendered.
      • Nested classes/interfaces inherited from class javax.swing.JPanel

        javax.swing.JPanel.AccessibleJPanel
      • Nested classes/interfaces inherited from class javax.swing.JComponent

        javax.swing.JComponent.AccessibleJComponent
      • Nested classes/interfaces inherited from class java.awt.Container

        java.awt.Container.AccessibleAWTContainer
      • Nested classes/interfaces inherited from class java.awt.Component

        java.awt.Component.AccessibleAWTComponent, java.awt.Component.BaselineResizeBehavior, java.awt.Component.BltBufferStrategy, java.awt.Component.FlipBufferStrategy
    • Field Summary

      Fields 
      Modifier and Type Field Description
      private java.awt.Color activeLineRangeColor
      The color used to highlight the active code block.
      protected int activeLineRangeEnd
      The end line in the active line range.
      protected int activeLineRangeStart
      The first line in the active line range.
      private javax.swing.Icon bookmarkIcon
      The icon to use for bookmarks.
      private boolean bookmarkingEnabled
      Whether this component listens for mouse clicks and toggles "bookmark" icons on them.
      private boolean inheritsGutterBackground
      Whether this component should use the gutter's background color (as opposed to using a LookAndFeel-dependent color, which is the default behavior).
      protected java.awt.Insets textAreaInsets
      Used in paintComponent(Graphics) to prevent reallocation on each paint.
      protected java.util.List<IconRowHeader.GutterIconImpl> trackingIcons
      The icons to render.
      protected java.awt.Rectangle visibleRect
      Used in paintComponent(Graphics) to prevent reallocation on each paint.
      protected int width
      The width of this component.
      • Fields inherited from class javax.swing.JComponent

        listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW
      • Fields inherited from class java.awt.Component

        accessibleContext, BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT
      • Fields inherited from interface java.awt.image.ImageObserver

        ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      GutterIconInfo addOffsetTrackingIcon​(int offs, javax.swing.Icon icon)
      Adds an icon that tracks an offset in the document, and is displayed adjacent to the line numbers.
      GutterIconInfo addOffsetTrackingIcon​(int offs, javax.swing.Icon icon, java.lang.String tip)
      Adds an icon that tracks an offset in the document, and is displayed adjacent to the line numbers.
      void clearActiveLineRange()
      Clears the active line range.
      java.awt.Color getActiveLineRangeColor()
      Returns the color used to paint the active line range, if any.
      javax.swing.Icon getBookmarkIcon()
      Returns the icon to use for bookmarks.
      GutterIconInfo[] getBookmarks()
      Returns the bookmarks known to this gutter.
      java.awt.Dimension getPreferredSize()  
      java.lang.String getToolTipText​(java.awt.event.MouseEvent e)
      Overridden to display the tool tip of any icons on this line.
      protected IconRowHeader.GutterIconImpl getTrackingIcon​(int index)  
      GutterIconInfo[] getTrackingIcons​(int line)
      Returns the tracking icons at the specified line.
      (package private) void handleDocumentEvent​(javax.swing.event.DocumentEvent e)
      Called when text is inserted to or removed from the text area.
      protected void init()
      Called by the constructor before the text area is set.
      boolean isBookmarkingEnabled()
      Returns whether bookmarking is enabled.
      (package private) void lineHeightsChanged()
      Called when the line heights of the text area change.
      void mouseClicked​(java.awt.event.MouseEvent e)  
      void mouseEntered​(java.awt.event.MouseEvent e)  
      void mouseExited​(java.awt.event.MouseEvent e)  
      void mousePressed​(java.awt.event.MouseEvent e)  
      void mouseReleased​(java.awt.event.MouseEvent e)  
      protected void paintBackgroundImpl​(java.awt.Graphics g, java.awt.Rectangle visibleRect)
      Paints the background of this component.
      protected void paintComponent​(java.awt.Graphics g)  
      private void paintComponentWrapped​(java.awt.Graphics g)
      Paints icons when line wrapping is enabled.
      void removeAllTrackingIcons()
      Removes all tracking icons.
      private void removeBookmarkTrackingIcons()
      Removes all bookmark tracking icons.
      void removeTrackingIcon​(GutterIconInfo tag)
      Removes the specified tracking icon.
      void setActiveLineRange​(int startLine, int endLine)
      Highlights a range of lines in the icon area.
      void setActiveLineRangeColor​(java.awt.Color color)
      Sets the color to use to render active line ranges.
      void setBookmarkIcon​(javax.swing.Icon icon)
      Sets the icon to use for bookmarks.
      void setBookmarkingEnabled​(boolean enabled)
      Sets whether bookmarking is enabled.
      void setInheritsGutterBackground​(boolean inherits)
      Sets whether the icon area inherits the gutter background (as opposed to painting with its own, default "panel" color, which is the default).
      void setTextArea​(RTextArea textArea)
      Sets the text area being displayed.
      boolean toggleBookmark​(int line)
      Programmatically toggles whether there is a bookmark for the specified line.
      private void updateBackground()
      Sets our background color to that of standard "panels" in this LookAndFeel.
      void updateUI()  
      private int viewToModelLine​(java.awt.Point p)
      Returns the line rendered at the specified location.
      • Methods inherited from class javax.swing.JPanel

        getAccessibleContext, getUI, getUIClassID, paramString, setUI
      • Methods inherited from class javax.swing.JComponent

        addAncestorListener, addVetoableChangeListener, computeVisibleRect, contains, createToolTip, disable, enable, firePropertyChange, firePropertyChange, firePropertyChange, fireVetoableChange, getActionForKeyStroke, getActionMap, getAlignmentX, getAlignmentY, getAncestorListeners, getAutoscrolls, getBaseline, getBaselineResizeBehavior, getBorder, getBounds, getClientProperty, getComponentGraphics, getComponentPopupMenu, getConditionForKeyStroke, getDebugGraphicsOptions, getDefaultLocale, getFontMetrics, getGraphics, getHeight, getInheritsPopupMenu, getInputMap, getInputMap, getInputVerifier, getInsets, getInsets, getListeners, getLocation, getMaximumSize, getMinimumSize, getNextFocusableComponent, getPopupLocation, getRegisteredKeyStrokes, getRootPane, getSize, getToolTipLocation, getToolTipText, getTopLevelAncestor, getTransferHandler, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, hide, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, isPaintingForPrint, isPaintingOrigin, isPaintingTile, isRequestFocusEnabled, isValidateRoot, paint, paintBorder, paintChildren, paintImmediately, paintImmediately, print, printAll, printBorder, printChildren, printComponent, processComponentKeyEvent, processKeyBinding, processKeyEvent, processMouseEvent, processMouseMotionEvent, putClientProperty, registerKeyboardAction, registerKeyboardAction, removeAncestorListener, removeVetoableChangeListener, repaint, repaint, requestDefaultFocus, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resetKeyboardActions, reshape, revalidate, scrollRectToVisible, setActionMap, setAlignmentX, setAlignmentY, setAutoscrolls, setBackground, setBorder, setComponentPopupMenu, setDebugGraphicsOptions, setDefaultLocale, setDoubleBuffered, setEnabled, setFocusTraversalKeys, setFont, setForeground, setInheritsPopupMenu, setInputMap, setInputVerifier, setMaximumSize, setMinimumSize, setNextFocusableComponent, setOpaque, setPreferredSize, setRequestFocusEnabled, setToolTipText, setTransferHandler, setUI, setVerifyInputWhenFocusTarget, setVisible, unregisterKeyboardAction, update
      • Methods inherited from class java.awt.Container

        add, add, add, add, add, addContainerListener, addImpl, addPropertyChangeListener, addPropertyChangeListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalKeys, getFocusTraversalPolicy, getLayout, getMousePosition, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, printComponents, processContainerEvent, processEvent, remove, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusCycleRoot, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setLayout, transferFocusDownCycle, validate, validateTree
      • Methods inherited from class java.awt.Component

        action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, createImage, createImage, createVolatileImage, createVolatileImage, disableEvents, dispatchEvent, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBackground, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusCycleRootAncestor, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getForeground, getGraphicsConfiguration, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputContext, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocale, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getToolkit, getTreeLock, gotFocus, handleEvent, hasFocus, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isPreferredSizeSet, isShowing, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, postEvent, prepareImage, prepareImage, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, requestFocus, requestFocus, requestFocusInWindow, resize, resize, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocale, setLocation, setLocation, setMixingCutoutShape, setName, setSize, setSize, show, show, size, toString, transferFocus, transferFocusBackward, transferFocusUpCycle
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    • Field Detail

      • width

        protected int width
        The width of this component.
      • bookmarkingEnabled

        private boolean bookmarkingEnabled
        Whether this component listens for mouse clicks and toggles "bookmark" icons on them.
      • bookmarkIcon

        private javax.swing.Icon bookmarkIcon
        The icon to use for bookmarks.
      • visibleRect

        protected java.awt.Rectangle visibleRect
        Used in paintComponent(Graphics) to prevent reallocation on each paint.
      • textAreaInsets

        protected java.awt.Insets textAreaInsets
        Used in paintComponent(Graphics) to prevent reallocation on each paint.
      • activeLineRangeStart

        protected int activeLineRangeStart
        The first line in the active line range.
      • activeLineRangeEnd

        protected int activeLineRangeEnd
        The end line in the active line range.
      • activeLineRangeColor

        private java.awt.Color activeLineRangeColor
        The color used to highlight the active code block.
      • inheritsGutterBackground

        private boolean inheritsGutterBackground
        Whether this component should use the gutter's background color (as opposed to using a LookAndFeel-dependent color, which is the default behavior).
    • Constructor Detail

      • IconRowHeader

        public IconRowHeader​(RTextArea textArea)
        Constructor.
        Parameters:
        textArea - The parent text area.
    • Method Detail

      • addOffsetTrackingIcon

        public GutterIconInfo addOffsetTrackingIcon​(int offs,
                                                    javax.swing.Icon icon)
                                             throws javax.swing.text.BadLocationException
        Adds an icon that tracks an offset in the document, and is displayed adjacent to the line numbers. This is useful for marking things such as source code errors.
        Parameters:
        offs - The offset to track.
        icon - The icon to display. This should be small (say 16x16).
        Returns:
        A tag for this icon.
        Throws:
        javax.swing.text.BadLocationException - If offs is an invalid offset into the text area.
        See Also:
        removeTrackingIcon(GutterIconInfo)
      • addOffsetTrackingIcon

        public GutterIconInfo addOffsetTrackingIcon​(int offs,
                                                    javax.swing.Icon icon,
                                                    java.lang.String tip)
                                             throws javax.swing.text.BadLocationException
        Adds an icon that tracks an offset in the document, and is displayed adjacent to the line numbers. This is useful for marking things such as source code errors.
        Parameters:
        offs - The offset to track.
        icon - The icon to display. This should be small (say 16x16).
        tip - A tool tip for the icon.
        Returns:
        A tag for this icon.
        Throws:
        javax.swing.text.BadLocationException - If offs is an invalid offset into the text area.
        See Also:
        removeTrackingIcon(GutterIconInfo)
      • getActiveLineRangeColor

        public java.awt.Color getActiveLineRangeColor()
        Returns the color used to paint the active line range, if any.
        Returns:
        The color.
        See Also:
        setActiveLineRangeColor(Color)
      • getBookmarkIcon

        public javax.swing.Icon getBookmarkIcon()
        Returns the icon to use for bookmarks.
        Returns:
        The icon to use for bookmarks. If this is null, bookmarking is effectively disabled.
        See Also:
        setBookmarkIcon(Icon), isBookmarkingEnabled()
      • getBookmarks

        public GutterIconInfo[] getBookmarks()
        Returns the bookmarks known to this gutter.
        Returns:
        The bookmarks. If there are no bookmarks, an empty array is returned.
      • handleDocumentEvent

        void handleDocumentEvent​(javax.swing.event.DocumentEvent e)
        Description copied from class: AbstractGutterComponent
        Called when text is inserted to or removed from the text area. Implementations can take this opportunity to repaint, revalidate, etc.
        Specified by:
        handleDocumentEvent in class AbstractGutterComponent
        Parameters:
        e - The document event.
      • getPreferredSize

        public java.awt.Dimension getPreferredSize()
        Overrides:
        getPreferredSize in class javax.swing.JComponent
      • getToolTipText

        public java.lang.String getToolTipText​(java.awt.event.MouseEvent e)
        Overridden to display the tool tip of any icons on this line.
        Overrides:
        getToolTipText in class javax.swing.JComponent
        Parameters:
        e - The location the mouse is hovering over.
      • getTrackingIcons

        public GutterIconInfo[] getTrackingIcons​(int line)
                                          throws javax.swing.text.BadLocationException
        Returns the tracking icons at the specified line.
        Parameters:
        line - The line.
        Returns:
        The tracking icons at that line. If there are no tracking icons there, this will be an empty array.
        Throws:
        javax.swing.text.BadLocationException - If line is invalid.
      • init

        protected void init()
        Description copied from class: AbstractGutterComponent
        Called by the constructor before the text area is set. This is a hook to allow subclasses to do any needed initialization. The default implementation does nothing.
        Overrides:
        init in class AbstractGutterComponent
      • isBookmarkingEnabled

        public boolean isBookmarkingEnabled()
        Returns whether bookmarking is enabled.
        Returns:
        Whether bookmarking is enabled.
        See Also:
        setBookmarkingEnabled(boolean)
      • mouseClicked

        public void mouseClicked​(java.awt.event.MouseEvent e)
        Specified by:
        mouseClicked in interface java.awt.event.MouseListener
      • mouseEntered

        public void mouseEntered​(java.awt.event.MouseEvent e)
        Specified by:
        mouseEntered in interface java.awt.event.MouseListener
      • mouseExited

        public void mouseExited​(java.awt.event.MouseEvent e)
        Specified by:
        mouseExited in interface java.awt.event.MouseListener
      • mousePressed

        public void mousePressed​(java.awt.event.MouseEvent e)
        Specified by:
        mousePressed in interface java.awt.event.MouseListener
      • mouseReleased

        public void mouseReleased​(java.awt.event.MouseEvent e)
        Specified by:
        mouseReleased in interface java.awt.event.MouseListener
      • paintComponent

        protected void paintComponent​(java.awt.Graphics g)
        Overrides:
        paintComponent in class javax.swing.JComponent
      • paintBackgroundImpl

        protected void paintBackgroundImpl​(java.awt.Graphics g,
                                           java.awt.Rectangle visibleRect)
        Paints the background of this component.
        Parameters:
        g - The graphics context.
        visibleRect - The visible bounds of this component.
      • paintComponentWrapped

        private void paintComponentWrapped​(java.awt.Graphics g)
        Paints icons when line wrapping is enabled.
        Parameters:
        g - The graphics context.
      • removeBookmarkTrackingIcons

        private void removeBookmarkTrackingIcons()
        Removes all bookmark tracking icons.
      • setActiveLineRange

        public void setActiveLineRange​(int startLine,
                                       int endLine)
        Highlights a range of lines in the icon area.
        Parameters:
        startLine - The start of the line range.
        endLine - The end of the line range.
        See Also:
        clearActiveLineRange()
      • setBookmarkIcon

        public void setBookmarkIcon​(javax.swing.Icon icon)
        Sets the icon to use for bookmarks. Any previous bookmark icons are removed.
        Parameters:
        icon - The new bookmark icon. If this is null, bookmarking is effectively disabled.
        See Also:
        getBookmarkIcon(), isBookmarkingEnabled()
      • setBookmarkingEnabled

        public void setBookmarkingEnabled​(boolean enabled)
        Sets whether bookmarking is enabled. Note that a bookmarking icon must be set via setBookmarkIcon(Icon) before bookmarks are truly enabled.
        Parameters:
        enabled - Whether bookmarking is enabled. If this is false, any bookmark icons are removed.
        See Also:
        isBookmarkingEnabled(), setBookmarkIcon(Icon)
      • setInheritsGutterBackground

        public void setInheritsGutterBackground​(boolean inherits)
        Sets whether the icon area inherits the gutter background (as opposed to painting with its own, default "panel" color, which is the default).
        Parameters:
        inherits - Whether the gutter background should be used in the icon row header. If this is false, a default, Look-and-feel-dependent color is used.
      • setTextArea

        public void setTextArea​(RTextArea textArea)
        Sets the text area being displayed. This will clear any tracking icons currently displayed.
        Overrides:
        setTextArea in class AbstractGutterComponent
        Parameters:
        textArea - The text area.
      • toggleBookmark

        public boolean toggleBookmark​(int line)
                               throws javax.swing.text.BadLocationException
        Programmatically toggles whether there is a bookmark for the specified line. If bookmarking is not enabled, this method does nothing.
        Parameters:
        line - The line.
        Returns:
        Whether a bookmark is now at the specified line.
        Throws:
        javax.swing.text.BadLocationException - If line is an invalid line number in the text area.
      • updateBackground

        private void updateBackground()
        Sets our background color to that of standard "panels" in this LookAndFeel. This is necessary because, otherwise, we'd inherit the background color of our parent component (the Gutter).
      • updateUI

        public void updateUI()
        Overrides:
        updateUI in class javax.swing.JPanel
      • viewToModelLine

        private int viewToModelLine​(java.awt.Point p)
                             throws javax.swing.text.BadLocationException
        Returns the line rendered at the specified location.
        Parameters:
        p - The location in this row header.
        Returns:
        The corresponding line in the editor.
        Throws:
        javax.swing.text.BadLocationException - ble If an error occurs.