FoldManager
Date: 2017-02-11

org.fife.ui.rsyntaxtextarea.folding

## Class FoldManager

- java.lang.Object
- - org.fife.ui.rsyntaxtextarea.folding.FoldManager

-     public class FoldManager
      extends java.lang.Object

  Manages code folding in an instance of RSyntaxTextArea.

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `static java.lang.String` | `PROPERTY_FOLDS_UPDATED` Property fired when folds have been updated.

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `FoldManager(RSyntaxTextArea textArea)` Constructor.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `addPropertyChangeListener(java.beans.PropertyChangeListener l)` Adds a property change listener to this fold manager.
    `void` | `clear()` Removes all folds.
    `boolean` | `ensureOffsetNotInClosedFold(int offs)` Ensures that the specified offset is not hidden in a collapsed fold.
    `Fold` | `getDeepestFoldContaining(int offs)` Returns the "deepest" nested fold containing the specified offset.
    `Fold` | `getDeepestOpenFoldContaining(int offs)` Returns the "deepest" open fold containing the specified offset.
    `Fold` | `getFold(int index)` Returns a specific top-level fold, which may have child folds.
    `int` | `getFoldCount()` Returns the number of top-level folds.
    `Fold` | `getFoldForLine(int line)` Returns the fold region that starts at the specified line.
    `int` | `getHiddenLineCount()` Returns the total number of hidden (folded) lines.
    `int` | `getHiddenLineCountAbove(int line)` Returns the number of lines "hidden" by collapsed folds above the specified line.
    `int` | `getHiddenLineCountAbove(int line, boolean physical)` Returns the number of lines "hidden" by collapsed folds above the specified line.
    `int` | `getLastVisibleLine()` Returns the last visible line in the text area, taking into account folds.
    `int` | `getVisibleLineAbove(int line)`
    `int` | `getVisibleLineBelow(int line)`
    `boolean` | `isCodeFoldingEnabled()` Returns whether code folding is enabled.
    `boolean` | `isCodeFoldingSupportedAndEnabled()` Returns `true` if and only if code folding is enabled for this text area, AND folding is supported for the language it is editing.
    `boolean` | `isFoldStartLine(int line)` Returns whether the specified line contains the start of a fold region.
    `boolean` | `isLineHidden(int line)` Returns whether a line is hidden in a collapsed fold.
    `void` | `removePropertyChangeListener(java.beans.PropertyChangeListener l)` Removes a property change listener from this fold manager.
    `void` | `reparse()` Forces an immediate reparsing for folds, if folding is enabled.
    `void` | `setCodeFoldingEnabled(boolean enabled)` Sets whether code folding is enabled.
    `void` | `setFolds(java.util.List<Fold> folds)` Sets the folds for this fold manager.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### PROPERTY_FOLDS_UPDATED

          public static final java.lang.String PROPERTY_FOLDS_UPDATED

      Property fired when folds have been updated.
      See Also:
        Constant Field Values

  - ### Constructor Detail

    - #### FoldManager

          public FoldManager(RSyntaxTextArea textArea)

      Constructor.
      Parameters:
        `textArea` - The text area whose folds we are managing.

  - ### Method Detail

    - #### addPropertyChangeListener

          public void addPropertyChangeListener(java.beans.PropertyChangeListener l)

      Adds a property change listener to this fold manager.
      Parameters:
        `l` - The new listener.
      See Also:
        `removePropertyChangeListener(PropertyChangeListener)`

    - #### clear

          public void clear()

      Removes all folds.

    - #### ensureOffsetNotInClosedFold

          public boolean ensureOffsetNotInClosedFold(int offs)

      Ensures that the specified offset is not hidden in a collapsed fold. Any folds containing this offset that are collapsed will be expanded.
      Parameters:
        `offs` - The offset.
      Returns:
        Whether any folds had to be opened.
      See Also:
        `getDeepestFoldContaining(int)`

    - #### getDeepestFoldContaining

          public Fold getDeepestFoldContaining(int offs)

      Returns the "deepest" nested fold containing the specified offset.
      Parameters:
        `offs` - The offset.
      Returns:
        The deepest fold containing the offset, or `null` if no fold contains the offset.

    - #### getDeepestOpenFoldContaining

          public Fold getDeepestOpenFoldContaining(int offs)

      Returns the "deepest" open fold containing the specified offset.
      Parameters:
        `offs` - The offset.
      Returns:
        The fold, or `null` if no open fold contains the offset.

    - #### getFold

          public Fold getFold(int index)

      Returns a specific top-level fold, which may have child folds.
      Parameters:
        `index` - The index of the fold.
      Returns:
        The fold.
      See Also:
        `getFoldCount()`

    - #### getFoldCount

          public int getFoldCount()

      Returns the number of top-level folds.
      Returns:
        The number of top-level folds.
      See Also:
        `getFold(int)`

    - #### getFoldForLine

          public Fold getFoldForLine(int line)

      Returns the fold region that starts at the specified line.
      Parameters:
        `line` - The line number.
      Returns:
        The fold, or `null` if the line is not the start of a fold region.
      See Also:
        `isFoldStartLine(int)`

    - #### getHiddenLineCount

          public int getHiddenLineCount()

      Returns the total number of hidden (folded) lines.
      Returns:
        The total number of hidden (folded) lines.
      See Also:
        `getHiddenLineCountAbove(int)`

    - #### getHiddenLineCountAbove

          public int getHiddenLineCountAbove(int line)

      Returns the number of lines "hidden" by collapsed folds above the specified line.
      Parameters:
        `line` - The line. This is the line number for a logical line. For the line number of a physical line (i.e. visible, not folded), use `getHiddenLineCountAbove(int, true)`.
      Returns:
        The number of lines hidden in folds above `line`.
      See Also:
        `getHiddenLineCountAbove(int, boolean)`

    - #### getHiddenLineCountAbove

          public int getHiddenLineCountAbove(int line,
                                    boolean physical)

      Returns the number of lines "hidden" by collapsed folds above the specified line.
      Parameters:
        `line` - The line.
        `physical` - Whether `line` is the number of a physical line (i.e. visible, not code-folded), or a logical one (i.e. any line from the model). If `line` was determined by a raw line calculation (i.e. `(visibleTopY / lineHeight)`), this value should be `true`. It should be `false` when it was calculated from an offset in the document (for example).
      Returns:
        The number of lines hidden in folds above `line`.

    - #### getLastVisibleLine

          public int getLastVisibleLine()

      Returns the last visible line in the text area, taking into account folds.
      Returns:
        The last visible line.

    - #### getVisibleLineAbove

          public int getVisibleLineAbove(int line)

    - #### getVisibleLineBelow

          public int getVisibleLineBelow(int line)

    - #### isCodeFoldingEnabled

          public boolean isCodeFoldingEnabled()

      Returns whether code folding is enabled. Note that only certain languages support code folding; those that do not will ignore this property.
      Returns:
        Whether code folding is enabled.
      See Also:
        `setCodeFoldingEnabled(boolean)`

    - #### isCodeFoldingSupportedAndEnabled

          public boolean isCodeFoldingSupportedAndEnabled()

      Returns `true` if and only if code folding is enabled for this text area, AND folding is supported for the language it is editing. Whether or not folding is supported for a language depends on whether a fold parser is registered for that language with the `FoldParserManager`.
      Returns:
        Whether folding is supported and enabled for this text area.
      See Also:
        `FoldParserManager`

    - #### isFoldStartLine

          public boolean isFoldStartLine(int line)

      Returns whether the specified line contains the start of a fold region.
      Parameters:
        `line` - The line.
      Returns:
        Whether the line contains the start of a fold region.
      See Also:
        `getFoldForLine(int)`

    - #### isLineHidden

          public boolean isLineHidden(int line)

      Returns whether a line is hidden in a collapsed fold.
      Parameters:
        `line` - The line to check.
      Returns:
        Whether the line is hidden in a collapsed fold.

    - #### removePropertyChangeListener

          public void removePropertyChangeListener(java.beans.PropertyChangeListener l)

      Removes a property change listener from this fold manager.
      Parameters:
        `l` - The listener to remove.
      See Also:
        `addPropertyChangeListener(PropertyChangeListener)`

    - #### reparse

          public void reparse()

      Forces an immediate reparsing for folds, if folding is enabled. This usually does not need to be called by the programmer, since fold parsing is done automatically by RSTA.

    - #### setCodeFoldingEnabled

          public void setCodeFoldingEnabled(boolean enabled)

      Sets whether code folding is enabled. Note that only certain languages will support code folding out of the box. Those languages which do not support folding will ignore this property.
      Parameters:
        `enabled` - Whether code folding should be enabled.
      See Also:
        `isCodeFoldingEnabled()`

    - #### setFolds

          public void setFolds(java.util.List<Fold> folds)

      Sets the folds for this fold manager.
      Parameters:
        `folds` - The new folds. This should not be `null`.