Class FoldIndicator

All Implemented Interfaces:
ImageObserver, MenuContainer, Serializable, 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:
  • Field Details

    • textAreaInsets

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

      private 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 Color armedForeground
      The color used for the foreground of armed folds.
    • foldIconBackground

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

      private 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 Color DEFAULT_FOREGROUND
      The color used to paint fold outlines.
    • DEFAULT_FOLD_BACKGROUND

      public static final 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.
    • alphaRunnable

      private FoldIndicator.AlphaRunnable alphaRunnable
      Used to update the collapsed fold icons' alpha value on a timer.
    • timer

      private Timer timer
      The timer used to update collapsed fold icons' alpha.
    • listener

      private FoldIndicator.Listener listener
      Listens for events in this component.
    • COLLAPSED_FOLD_ALPHA_DELAY_MILLIS

      private static final int COLLAPSED_FOLD_ALPHA_DELAY_MILLIS
      See Also:
    • ALPHA_DELTA

      private static final float ALPHA_DELTA
      See Also:
  • Constructor Details

    • FoldIndicator

      public FoldIndicator(RTextArea textArea)
  • Method Details

    • createToolTip

      public 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 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:
    • findOpenFoldClosestTo

      private Fold findOpenFoldClosestTo(Point p)
    • getArmedForeground

      public Color getArmedForeground()
      Returns the foreground color used for armed folds.
      Returns:
      The foreground color used for armed folds.
      See Also:
    • getExpandedFoldRenderStrategy

      public ExpandedFoldRenderStrategy getExpandedFoldRenderStrategy()
      Returns the strategy to use for rendering expanded folds.
      Returns:
      The strategy to use for rendering expanded folds.
      See Also:
    • getFoldIconArmedBackground

      public 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:
    • getFoldIconBackground

      public Color getFoldIconBackground()
      Returns the color to use for the "background" of fold icons. This is ignored if custom icons are used.
      Returns:
      The background color.
      See Also:
    • getPaintExpandedFolds

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

      public Dimension getPreferredSize()
      Overrides:
      getPreferredSize in class 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:
    • 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:
    • getToolTipLocation

      public Point getToolTipLocation(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 JComponent
      Parameters:
      e - The mouse location.
    • getToolTipText

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

      void gutterArmedUpdate(boolean armed)
    • handleDocumentEvent

      void handleDocumentEvent(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
    • lineHeightsChanged

      void lineHeightsChanged()
      Description copied from class: AbstractGutterComponent
      Called when the line heights of the text area change. This is usually the result of one or more of the fonts in the editor changing.
      Specified by:
      lineHeightsChanged in class AbstractGutterComponent
    • paintComponent

      protected void paintComponent(Graphics g)
      Overrides:
      paintComponent in class JComponent
    • paintComponentWrapped

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

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

      private int rowAtPoint(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:
    • setArmedForeground

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

      private void setCollapsedFoldIconAlpha(float collapsedFoldIconAlpha)
    • setExpandedFoldRenderStrategy

      public void setExpandedFoldRenderStrategy(ExpandedFoldRenderStrategy strategy)
      Sets the strategy to use for rendering expanded folds.
      Parameters:
      strategy - The strategy to use. This cannot be null.
      See Also:
    • setFoldIconArmedBackground

      public void setFoldIconArmedBackground(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:
    • setFoldIconBackground

      public void setFoldIconBackground(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:
    • 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:
    • 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:
    • 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:
    • setStyle

      void setStyle(FoldIndicatorStyle style)
      Toggles the presentation of this component. This method sets the icons used for fold regions to default values, amongst other configuration. To further customize these icons, see setFoldIcons(FoldIndicatorIcon, FoldIndicatorIcon).
      Parameters:
      style - The new presentation style.
      See Also:
    • 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.