Class FoldIndicator

  • All Implemented Interfaces:
    java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable, javax.accessibility.Accessible

    public class FoldIndicator
    extends AbstractGutterComponent
    Component in the gutter that displays +/- icons to expand and collapse fold regions in the editor.
    Version:
    1.0
    See Also:
    Serialized Form
    • Nested Class Summary

      Nested Classes 
      Modifier and Type Class Description
      private class  FoldIndicator.AlphaRunnable
      Updates the alpha used for this component's "collapsed" fold icons, if necessary.
      private class  FoldIndicator.Listener
      Listens for events in this component.
      • 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
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      javax.swing.JToolTip createToolTip()
      Overridden to use the editor's background if it's detected that the user isn't using white as the editor bg, but the system's tool tip background is yellow-ish.
      private Fold findOpenFoldClosestTo​(java.awt.Point p)  
      int getAdditionalLeftMargin()
      Returns the amount of additional size to give the left margin of this component.
      java.awt.Color getArmedForeground()
      Returns the foreground color used for armed folds.
      ExpandedFoldRenderStrategy getExpandedFoldRenderStrategy()
      Returns the strategy to use for rendering expanded folds.
      java.awt.Color getFoldIconArmedBackground()
      Returns the color to use for the "background" of armed fold icons.
      java.awt.Color getFoldIconBackground()
      Returns the color to use for the "background" of fold icons.
      private boolean getPaintExpandedFolds()
      Returns whether to paint expanded folds.
      java.awt.Dimension getPreferredSize()  
      boolean getShowArmedFoldRange()
      Returns whether a line should be drawn to show the range of lines contained in an expanded fold when it is armed (hovered over).
      boolean getShowCollapsedRegionToolTips()
      Returns whether tool tips are displayed showing the contents of collapsed fold regions when the mouse hovers over a +/- icon.
      java.awt.Point getToolTipLocation​(java.awt.event.MouseEvent e)
      Positions tool tips to be aligned in the text component, so that the displayed content is shown (almost) exactly where it would be in the editor.
      java.lang.String getToolTipText​(java.awt.event.MouseEvent e)
      Overridden to show the content of a collapsed fold on mouse-overs.
      (package private) void gutterArmedUpdate​(boolean armed)  
      (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.
      (package private) void lineHeightsChanged()
      Called when the line heights of the text area change.
      protected void paintComponent​(java.awt.Graphics g)  
      private void paintComponentWrapped​(java.awt.Graphics g)
      Paints folding icons when line wrapping is enabled.
      private void paintIcon​(FoldIndicatorIcon icon, java.awt.Graphics g, int x, int y, boolean collapsed)  
      private int rowAtPoint​(java.awt.Point p)  
      void setAdditionalLeftMargin​(int leftMargin)
      Adds to the amount of additional size to give the left margin of this component.
      void setArmedForeground​(java.awt.Color fg)
      Sets the foreground color used for armed folds.
      private void setCollapsedFoldIconAlpha​(float collapsedFoldIconAlpha)  
      void setExpandedFoldRenderStrategy​(ExpandedFoldRenderStrategy strategy)
      Sets the strategy to use for rendering expanded folds.
      void setFoldIconArmedBackground​(java.awt.Color bg)
      Sets the color to use for the "background" of armed fold icons.
      void setFoldIconBackground​(java.awt.Color bg)
      Sets the color to use for the "background" of fold icons.
      void setFoldIcons​(FoldIndicatorIcon collapsedIcon, FoldIndicatorIcon expandedIcon)
      Sets the icons to use to represent collapsed and expanded folds.
      void setShowArmedFoldRange​(boolean show)
      Toggles whether a line should be drawn to show the range of lines contained in an expanded fold when it is armed (hovered over).
      void setShowCollapsedRegionToolTips​(boolean show)
      Toggles whether tool tips should be displayed showing the contents of collapsed fold regions when the mouse hovers over a +/- icon.
      (package private) void setStyle​(FoldIndicatorStyle style)
      Toggles the presentation of this component.
      void setTextArea​(RTextArea textArea)
      Overridden so we can track when code folding is enabled/disabled.
      • Methods inherited from class javax.swing.JPanel

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

        addAncestorListener, addVetoableChangeListener, computeVisibleRect, contains, 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, 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

      • textAreaInsets

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

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

        private Fold foldWithOutlineShowing
        The fold to show the outline line for.
      • armedForeground

        private java.awt.Color armedForeground
        The color used for the foreground of armed folds.
      • foldIconBackground

        private java.awt.Color foldIconBackground
        The color to use for fold icon backgrounds, if the default icons are used.
      • foldIconArmedBackground

        private java.awt.Color foldIconArmedBackground
        The color to use for armed fold icon backgrounds, if the default icons are used. This may be null.
      • collapsedFoldIcon

        private FoldIndicatorIcon collapsedFoldIcon
        The icon used for collapsed folds.
      • expandedFoldIcon

        private FoldIndicatorIcon expandedFoldIcon
        The icon used for expanded folds.
      • mouseOverFoldIcon

        private boolean mouseOverFoldIcon
        Used while painting; global flag to denote whether the mouse is over a fold indicator.
      • paintFoldArmed

        private boolean paintFoldArmed
        Used while painting; global flag to denote whether the currently-being-painted fold should be rendered as armed.
      • showFoldRegionTips

        private boolean showFoldRegionTips
        Whether tool tips are displayed showing the contents of collapsed fold regions.
      • showArmedFoldRange

        private boolean showArmedFoldRange
        Whether the range of lines covered by an expanded, armed fold icon should be visually shown.
      • additionalLeftMargin

        private int additionalLeftMargin
        Optional additional left margin.
      • expandedFoldRenderStrategy

        private ExpandedFoldRenderStrategy expandedFoldRenderStrategy
        The strategy to use when rendering expanded folds.
      • DEFAULT_FOREGROUND

        public static final java.awt.Color DEFAULT_FOREGROUND
        The color used to paint fold outlines.
      • DEFAULT_FOLD_BACKGROUND

        public static final java.awt.Color DEFAULT_FOLD_BACKGROUND
        The default color used to paint the "inside" of fold icons.
      • collapsedFoldIconAlpha

        private float collapsedFoldIconAlpha
        The alpha used for "collapsed" fold icons.
      • timer

        private javax.swing.Timer timer
        The timer used to update collapsed fold icons' alpha.
      • COLLAPSED_FOLD_ALPHA_DELAY_MILLIS

        private static final int COLLAPSED_FOLD_ALPHA_DELAY_MILLIS
        See Also:
        Constant Field Values
    • Constructor Detail

      • FoldIndicator

        public FoldIndicator​(RTextArea textArea)
    • Method Detail

      • createToolTip

        public javax.swing.JToolTip createToolTip()
        Overridden to use the editor's background if it's detected that the user isn't using white as the editor bg, but the system's tool tip background is yellow-ish.
        Overrides:
        createToolTip in class javax.swing.JComponent
        Returns:
        The tool tip.
      • getAdditionalLeftMargin

        public int getAdditionalLeftMargin()
        Returns the amount of additional size to give the left margin of this component. This can be used to add blank space between this component and the line number indicator in the gutter.
        Returns:
        The additional left margin.
        See Also:
        setAdditionalLeftMargin(int)
      • findOpenFoldClosestTo

        private Fold findOpenFoldClosestTo​(java.awt.Point p)
      • getArmedForeground

        public java.awt.Color getArmedForeground()
        Returns the foreground color used for armed folds.
        Returns:
        The foreground color used for armed folds.
        See Also:
        setArmedForeground(Color)
      • getFoldIconArmedBackground

        public java.awt.Color getFoldIconArmedBackground()
        Returns the color to use for the "background" of armed fold icons. This is ignored if custom icons are used.
        Returns:
        The background color. If this is null, there is no special color for armed fold icons.
        See Also:
        setFoldIconArmedBackground(Color), getFoldIconBackground()
      • getPaintExpandedFolds

        private boolean getPaintExpandedFolds()
        Returns whether to paint expanded folds.
        Returns:
        Whether to paint expanded folds.
      • getPreferredSize

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

        public boolean getShowArmedFoldRange()
        Returns whether a line should be drawn to show the range of lines contained in an expanded fold when it is armed (hovered over).
        Returns:
        Whether to show an armed fold's range.
        See Also:
        setShowArmedFoldRange(boolean)
      • getShowCollapsedRegionToolTips

        public boolean getShowCollapsedRegionToolTips()
        Returns whether tool tips are displayed showing the contents of collapsed fold regions when the mouse hovers over a +/- icon.
        Returns:
        Whether these tool tips are displayed.
        See Also:
        setShowCollapsedRegionToolTips(boolean)
      • getToolTipLocation

        public java.awt.Point getToolTipLocation​(java.awt.event.MouseEvent e)
        Positions tool tips to be aligned in the text component, so that the displayed content is shown (almost) exactly where it would be in the editor.
        Overrides:
        getToolTipLocation in class javax.swing.JComponent
        Parameters:
        e - The mouse location.
      • getToolTipText

        public java.lang.String getToolTipText​(java.awt.event.MouseEvent e)
        Overridden to show the content of a collapsed fold on mouse-overs.
        Overrides:
        getToolTipText in class javax.swing.JComponent
        Parameters:
        e - The mouse location.
      • gutterArmedUpdate

        void gutterArmedUpdate​(boolean armed)
      • 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.
      • 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
      • paintComponent

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

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

        private void paintIcon​(FoldIndicatorIcon icon,
                               java.awt.Graphics g,
                               int x,
                               int y,
                               boolean collapsed)
      • rowAtPoint

        private int rowAtPoint​(java.awt.Point p)
      • setAdditionalLeftMargin

        public void setAdditionalLeftMargin​(int leftMargin)
        Adds to the amount of additional size to give the left margin of this component. This can be used to add blank space between this component and the line number indicator in the gutter.
        Parameters:
        leftMargin - The additional left margin. This should be >= 0.
        See Also:
        getAdditionalLeftMargin()
      • setArmedForeground

        public void setArmedForeground​(java.awt.Color fg)
        Sets the foreground color used for armed folds.
        Parameters:
        fg - The new armed fold foreground.
        See Also:
        getArmedForeground()
      • setCollapsedFoldIconAlpha

        private void setCollapsedFoldIconAlpha​(float collapsedFoldIconAlpha)
      • setFoldIconArmedBackground

        public void setFoldIconArmedBackground​(java.awt.Color bg)
        Sets the color to use for the "background" of armed fold icons. This will be ignored if custom icons are used.
        Parameters:
        bg - The new background color. If null is passed in, there will be no special color for armed fold icons.
        See Also:
        getFoldIconArmedBackground(), setFoldIconBackground(Color)
      • setFoldIconBackground

        public void setFoldIconBackground​(java.awt.Color bg)
        Sets the color to use for the "background" of fold icons. This will be ignored if custom icons are used.
        Parameters:
        bg - The new background color. This should not be null.
        See Also:
        getFoldIconBackground(), setFoldIconArmedBackground(Color)
      • setFoldIcons

        public void setFoldIcons​(FoldIndicatorIcon collapsedIcon,
                                 FoldIndicatorIcon expandedIcon)
        Sets the icons to use to represent collapsed and expanded folds. This method can be used for further customization after setting this component's general appearance via setStyle(FoldIndicatorStyle).
        Parameters:
        collapsedIcon - The collapsed fold icon. This cannot be null.
        expandedIcon - The expanded fold icon. This cannot be null.
        See Also:
        setStyle(FoldIndicatorStyle)
      • setShowArmedFoldRange

        public void setShowArmedFoldRange​(boolean show)
        Toggles whether a line should be drawn to show the range of lines contained in an expanded fold when it is armed (hovered over).
        Parameters:
        show - Whether to show an armed fold's range.
        See Also:
        getShowArmedFoldRange()
      • setShowCollapsedRegionToolTips

        public void setShowCollapsedRegionToolTips​(boolean show)
        Toggles whether tool tips should be displayed showing the contents of collapsed fold regions when the mouse hovers over a +/- icon.
        Parameters:
        show - Whether to show these tool tips.
        See Also:
        getShowCollapsedRegionToolTips()
      • setTextArea

        public void setTextArea​(RTextArea textArea)
        Overridden so we can track when code folding is enabled/disabled.
        Overrides:
        setTextArea in class AbstractGutterComponent
        Parameters:
        textArea - The text area.