com.explodingpixels.macwidgets.plaf

## Class SourceListTreeUI

- java.lang.Object
- - javax.swing.plaf.ComponentUI
  - - javax.swing.plaf.TreeUI
    - - javax.swing.plaf.basic.BasicTreeUI
      - - com.explodingpixels.macwidgets.plaf.SourceListTreeUI

-     public class SourceListTreeUI
      extends BasicTreeUI

  A UI delegate that paints a `JTree` as an Apple defined Source List. Consider using this UI delegate with `MacWidgetFactory.createSourceListScrollPane(javax.swing.JComponent)`.

  For the best development experience, it is recommended that you migrate your code to use the `SourceList` with the `SourceListModel`, as this component abstracts away many of the complexities of `JTree`.

  Pictured below are the two different rendering styles of a Source List: focused and unfocused. The corresponding `JTree`'s focusable property drives this rendering style.

  Focusable SourceList | Non-focusable SourceList

  ### Providing Category and Item text and icons

  During the rendering process, each Category and Item node will be consulted for the text to be displayed. The renderer determines the text based on these prioritized checks:
  1. If the node is an instance of `DefaultMutableTreeNode`, and the `DefaultMutableTreeNode.getUserObject()` is an instance of `TextProvider`, then the `TextProvider` will be queried for the node text.
  2. If no implementation of `TextProvider` is found, the standard `JTree.convertValueToText(Object, boolean, boolean, boolean, int, boolean)` method will be consulted.
  Also, during rendering, each Item node will be consulted for an icon. Similarly to the above mechanism for determining text, the render determines a nodes icon by the following check:
  1. If the node is an instance of `DefaultMutableTreeNode`, and the `DefaultMutableTreeNode.getUserObject()` is an instance of `IconProvider`, then the `IconProvider` will be queried for the node icon.

- - ### Nested Class Summary

    - ### Nested classes/interfaces inherited from class javax.swing.plaf.basic.BasicTreeUI

      `BasicTreeUI.CellEditorHandler, BasicTreeUI.ComponentHandler, BasicTreeUI.FocusHandler, BasicTreeUI.KeyHandler, BasicTreeUI.MouseHandler, BasicTreeUI.MouseInputHandler, BasicTreeUI.NodeDimensionsHandler, BasicTreeUI.PropertyChangeHandler, BasicTreeUI.SelectionModelPropertyChangeHandler, BasicTreeUI.TreeCancelEditingAction, BasicTreeUI.TreeExpansionHandler, BasicTreeUI.TreeHomeAction, BasicTreeUI.TreeIncrementAction, BasicTreeUI.TreeModelHandler, BasicTreeUI.TreePageAction, BasicTreeUI.TreeSelectionHandler, BasicTreeUI.TreeToggleAction, BasicTreeUI.TreeTraverseAction`

  - ### Field Summary

    - ### Fields inherited from class javax.swing.plaf.basic.BasicTreeUI

      `cellEditor, collapsedIcon, createdCellEditor, createdRenderer, currentCellRenderer, depthOffset, drawingCache, editingComponent, editingPath, editingRow, editorHasDifferentSize, expandedIcon, largeModel, lastSelectedRow, leftChildIndent, nodeDimensions, preferredMinSize, preferredSize, rendererPane, rightChildIndent, stopEditingInCompleteEditing, totalChildIndent, tree, treeModel, treeSelectionModel, treeState, validCachedPreferredSize`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `SourceListTreeUI()`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected void` | `completeUIInstall()`
    `protected AbstractLayoutCache.NodeDimensions` | `createNodeDimensions()`
    `Font` | `getCategoryFont()`
    `SourceListColorScheme` | `getColorScheme()` Gets the `SourceListColorScheme` that this `SourceListTreeUI` uses to paint.
    `Font` | `getItemFont()`
    `Font` | `getItemSelectedFont()`
    `Rectangle` | `getPathBounds(JTree tree, TreePath path)`
    `protected void` | `installKeyboardActions()`
    `protected void` | `installListeners()`
    `void` | `paint(Graphics g, JComponent c)`
    `protected void` | `paintExpandControl(Graphics g, Rectangle clipBounds, Insets insets, Rectangle bounds, TreePath path, int row, boolean isExpanded, boolean hasBeenExpanded, boolean isLeaf)`
    `protected void` | `paintHorizontalLine(Graphics g, JComponent c, int y, int left, int right)`
    `protected void` | `paintVerticalPartOfLeg(Graphics g, Rectangle clipBounds, Insets insets, TreePath path)`
    `protected void` | `selectPathForEvent(TreePath path, MouseEvent event)`
    `void` | `setCategoryFont(Font categoryFont)`
    `void` | `setColorScheme(SourceListColorScheme colorScheme)` Sets the `SourceListColorScheme` that this `SourceListTreeUI` uses to paint.
    `void` | `setItemFont(Font itemFont)`
    `void` | `setItemSelectedFont(Font itemSelectedFont)`
    `protected void` | `setModel(TreeModel model)`

    - ### Methods inherited from class javax.swing.plaf.basic.BasicTreeUI

      `cancelEditing, checkForClickInExpandControl, completeEditing, completeEditing, completeUIUninstall, configureLayoutCache, createCellEditorListener, createCellRendererPane, createComponentListener, createDefaultCellEditor, createDefaultCellRenderer, createFocusListener, createKeyListener, createLayoutCache, createMouseListener, createPropertyChangeListener, createSelectionModelPropertyChangeListener, createTreeExpansionListener, createTreeModelListener, createTreeSelectionListener, createUI, drawCentered, drawDashedHorizontalLine, drawDashedVerticalLine, ensureRowsAreVisible, getBaseline, getBaselineResizeBehavior, getCellEditor, getCellRenderer, getClosestPathForLocation, getCollapsedIcon, getDropLineRect, getEditingPath, getExpandedIcon, getHashColor, getHorizontalLegBuffer, getLastChildPath, getLeadSelectionRow, getLeftChildIndent, getMaximumSize, getMinimumSize, getModel, getPathForRow, getPreferredMinSize, getPreferredSize, getPreferredSize, getRightChildIndent, getRowCount, getRowForPath, getRowHeight, getRowX, getSelectionModel, getShowsRootHandles, getVerticalLegBuffer, handleExpandControlClick, installComponents, installDefaults, installUI, isDropLine, isEditable, isEditing, isLargeModel, isLeaf, isLocationInExpandControl, isMultiSelectEvent, isRootVisible, isToggleEvent, isToggleSelectionEvent, paintDropLine, paintHorizontalPartOfLeg, paintRow, paintVerticalLine, pathWasCollapsed, pathWasExpanded, prepareForUIInstall, prepareForUIUninstall, setCellEditor, setCellRenderer, setCollapsedIcon, setEditable, setExpandedIcon, setHashColor, setLargeModel, setLeftChildIndent, setPreferredMinSize, setRightChildIndent, setRootVisible, setRowHeight, setSelectionModel, setShowsRootHandles, shouldPaintExpandControl, startEditing, startEditingAtPath, stopEditing, toggleExpandState, uninstallComponents, uninstallDefaults, uninstallKeyboardActions, uninstallListeners, uninstallUI, updateCachedPreferredSize, updateCellEditor, updateDepthOffset, updateExpandedDescendants, updateLayoutCacheExpandedNodes, updateLeadSelectionRow, updateRenderer, updateSize`

    - ### Methods inherited from class javax.swing.plaf.ComponentUI

      `contains, getAccessibleChild, getAccessibleChildrenCount, update`

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

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

- - ### Constructor Detail

    - #### SourceListTreeUI

          public SourceListTreeUI()

  - ### Method Detail

    - #### completeUIInstall

          protected void completeUIInstall()

      Overrides:
        `completeUIInstall` in class `BasicTreeUI`

    - #### getCategoryFont

          public Font getCategoryFont()

    - #### setCategoryFont

          public void setCategoryFont(Font categoryFont)

    - #### getItemFont

          public Font getItemFont()

    - #### setItemFont

          public void setItemFont(Font itemFont)

    - #### getItemSelectedFont

          public Font getItemSelectedFont()

    - #### setItemSelectedFont

          public void setItemSelectedFont(Font itemSelectedFont)

    - #### installListeners

          protected void installListeners()

      Overrides:
        `installListeners` in class `BasicTreeUI`

    - #### installKeyboardActions

          protected void installKeyboardActions()

      Overrides:
        `installKeyboardActions` in class `BasicTreeUI`

    - #### setModel

          protected void setModel(TreeModel model)

      Overrides:
        `setModel` in class `BasicTreeUI`

    - #### getColorScheme

          public SourceListColorScheme getColorScheme()

      Gets the `SourceListColorScheme` that this `SourceListTreeUI` uses to paint.
      Returns:
        the `SourceListColorScheme` that this `SourceList` uses to paint.

    - #### setColorScheme

          public void setColorScheme(SourceListColorScheme colorScheme)

      Sets the `SourceListColorScheme` that this `SourceListTreeUI` uses to paint.
      Parameters:
        `colorScheme` - the `SourceListColorScheme` that this `SourceList` uses to paint.

    - #### paintExpandControl

          protected void paintExpandControl(Graphics g,
                                Rectangle clipBounds,
                                Insets insets,
                                Rectangle bounds,
                                TreePath path,
                                int row,
                                boolean isExpanded,
                                boolean hasBeenExpanded,
                                boolean isLeaf)

      Overrides:
        `paintExpandControl` in class `BasicTreeUI`

    - #### createNodeDimensions

          protected AbstractLayoutCache.NodeDimensions createNodeDimensions()

      Overrides:
        `createNodeDimensions` in class `BasicTreeUI`

    - #### getPathBounds

          public Rectangle getPathBounds(JTree tree,
                                TreePath path)

      Overrides:
        `getPathBounds` in class `BasicTreeUI`

    - #### paint

          public void paint(Graphics g,
                   JComponent c)

      Overrides:
        `paint` in class `BasicTreeUI`

    - #### paintHorizontalLine

          protected void paintHorizontalLine(Graphics g,
                                 JComponent c,
                                 int y,
                                 int left,
                                 int right)

      Overrides:
        `paintHorizontalLine` in class `BasicTreeUI`

    - #### paintVerticalPartOfLeg

          protected void paintVerticalPartOfLeg(Graphics g,
                                    Rectangle clipBounds,
                                    Insets insets,
                                    TreePath path)

      Overrides:
        `paintVerticalPartOfLeg` in class `BasicTreeUI`

    - #### selectPathForEvent

          protected void selectPathForEvent(TreePath path,
                                MouseEvent event)

      Overrides:
        `selectPathForEvent` in class `BasicTreeUI`