Class AbstractTreeViewer

All Implemented Interfaces:
IInputProvider, IInputSelectionProvider, IPostSelectionProvider, ISelectionProvider
Direct Known Subclasses:
TreeViewer

public abstract class AbstractTreeViewer extends ColumnViewer
Abstract base implementation for tree-structure-oriented viewers (trees and table trees).

Nodes in the tree can be in either an expanded or a collapsed state, depending on whether the children on a node are visible. This class introduces public methods for controlling the expanding and collapsing of nodes.

As of 3.2, AbstractTreeViewer supports multiple equal elements (each with a different parent chain) in the tree. This support requires that clients enable the element map by calling setUseHashlookup(true).

Content providers for abstract tree viewers must implement one of the interfaces ITreeContentProvider or (as of 3.2, to support multiple equal elements) ITreePathContentProvider.

This class is not intended to be subclassed outside of the JFace viewers framework.

See Also:
  • Field Details

  • Constructor Details

    • AbstractTreeViewer

      protected AbstractTreeViewer()
      Creates an abstract tree viewer. The viewer has no input, no content provider, a default label provider, no sorter, no filters, and has auto-expand turned off.
  • Method Details

    • add

      public void add(Object parentElementOrTreePath, Object... childElements)
      Adds the given child elements to this viewer as children of the given parent element. If this viewer does not have a sorter, the elements are added at the end of the parent's list of children in the order given; otherwise, the elements are inserted at the appropriate positions. If a child already exists under the given parent, the child gets refreshed and not added twice.

      This method should be called (by the content provider) when elements have been added to the model, in order to cause the viewer to accurately reflect the model. This method only affects the viewer, not the model.

      Parameters:
      parentElementOrTreePath - the parent element
      childElements - the child elements to add
    • internalFindItems

      protected final Widget[] internalFindItems(Object parentElementOrTreePath)
      Find the items for the given element of tree path
      Parameters:
      parentElementOrTreePath - the element or tree path
      Returns:
      the items for that element
      Since:
      3.3
    • internalAdd

      protected void internalAdd(Widget widget, Object parentElementOrTreePath, Object[] childElements)
      Adds the given child elements to this viewer as children of the given parent element.

      EXPERIMENTAL. Not to be used except by JDT. This method was added to support JDT's explorations into grouping by working sets. This method cannot be removed without breaking binary backwards compatibility, but should not be called by clients.

      Parameters:
      widget - the widget for the parent element
      parentElementOrTreePath - the parent element
      childElements - the child elements to add
      Since:
      3.1
    • indexForElement

      protected int indexForElement(Widget parent, Object element)
      Returns the index where the item should be inserted.
      Parameters:
      parent - The parent widget the element will be inserted into.
      element - The element to insert.
      Returns:
      the index of the element
    • getSortedChildren

      protected Object[] getSortedChildren(Object parentElementOrTreePath)
      Description copied from class: StructuredViewer
      Returns the sorted and filtered set of children of the given element. The resulting array must not be modified, as it may come directly from the model's internal state.
      Overrides:
      getSortedChildren in class ColumnViewer
      Parameters:
      parentElementOrTreePath - the parent element
      Returns:
      a sorted and filtered array of child elements
    • add

      public void add(Object parentElementOrTreePath, Object childElement)
      Adds the given child element to this viewer as a child of the given parent element. If this viewer does not have a sorter, the element is added at the end of the parent's list of children; otherwise, the element is inserted at the appropriate position. If the child already exists under the given parent, the child gets refreshed and not added twice.

      This method should be called (by the content provider) when a single element has been added to the model, in order to cause the viewer to accurately reflect the model. This method only affects the viewer, not the model. Note that there is another method for efficiently processing the simultaneous addition of multiple elements.

      Parameters:
      parentElementOrTreePath - the parent element or path
      childElement - the child element
    • addSelectionListener

      @Deprecated protected void addSelectionListener(Control control, SelectionListener listener)
      Deprecated.
      Adds the given SWT selection listener to the given SWT control.
      Parameters:
      control - the SWT control
      listener - the SWT selection listener
    • addTreeListener

      public void addTreeListener(ITreeViewerListener listener)
      Adds a listener for expand and collapse events in this viewer. Has no effect if an identical listener is already registered.
      Parameters:
      listener - a tree viewer listener
    • addTreeListener

      protected abstract void addTreeListener(Control control, TreeListener listener)
      Adds the given SWT tree listener to the given SWT control.
      Parameters:
      control - the SWT control
      listener - the SWT tree listener
    • associate

      protected void associate(Object element, Item item)
      Description copied from class: StructuredViewer
      Associates the given element with the given widget. Sets the given item's data to be the element, and maps the element to the item in the element map (if enabled).
      Overrides:
      associate in class StructuredViewer
      Parameters:
      element - the element
      item - the widget
    • collapseAll

      public void collapseAll()
      Collapses all nodes of the viewer's tree, starting with the root. This method is equivalent to collapseToLevel(ALL_LEVELS).
    • collapseToLevel

      public void collapseToLevel(Object elementOrTreePath, int level)
      Collapses the subtree rooted at the given element or tree path to the given level.

      Note that the default implementation of this method does turn redraw off via this operation via a call to setRedraw

      Parameters:
      elementOrTreePath - the element or tree path
      level - non-negative level, or ALL_LEVELS to collapse all levels of the tree
    • createChildren

      protected void createChildren(Widget widget)
      Creates all children for the given widget.

      The default implementation of this framework method assumes that widget.getData() returns the element corresponding to the node. Note: the node is not visually expanded! You may have to call parent.setExpanded(true).

      Parameters:
      widget - the widget
    • createTreeItem

      protected void createTreeItem(Widget parent, Object element, int index)
      Creates a single item for the given parent and synchronizes it with the given element. The fastest way to insert many items is documented in TreeItem(Tree,int,int)
      Parameters:
      parent - the parent widget
      element - the element
      index - if non-negative, indicates the position to insert the item into its parent
      See Also:
    • disassociate

      protected void disassociate(Item item)
      The AbstractTreeViewer implementation of this method also recurses over children of the corresponding element.
      Overrides:
      disassociate in class ColumnViewer
      Parameters:
      item - the widget
    • doFindInputItem

      protected Widget doFindInputItem(Object element)
      Description copied from class: StructuredViewer
      Returns the widget in this viewer's control which represents the given element if it is the viewer's input.

      This method is internal to the framework; subclassers should not call this method.

      Specified by:
      doFindInputItem in class StructuredViewer
      Parameters:
      element - the element to find the representing widget for
      Returns:
      the corresponding widget, or null if none
    • doFindItem

      protected Widget doFindItem(Object element)
      Description copied from class: StructuredViewer
      Returns the widget in this viewer's control which represent the given element. This method searches all the children of the input element.

      This method is internal to the framework; subclassers should not call this method.

      Specified by:
      doFindItem in class StructuredViewer
      Parameters:
      element - the element to find the representing widget for
      Returns:
      the corresponding widget, or null if none
    • doUpdateItem

      protected void doUpdateItem(Item item, Object element)
      Copies the attributes of the given element into the given SWT item.
      Parameters:
      item - the SWT item
      element - the element
    • isSameSelection

      protected boolean isSameSelection(List<Item> items, Item[] current)
      Returns true if the given list and array of items refer to the same model elements. Order is unimportant.

      This method is not intended to be overridden by subclasses.

      Parameters:
      items - the list of items
      current - the array of items
      Returns:
      true if the refer to the same elements, false otherwise
      Since:
      3.1 in TreeViewer, moved to AbstractTreeViewer in 3.3
    • doUpdateItem

      protected void doUpdateItem(Widget widget, Object element, boolean fullMap)
      Description copied from class: StructuredViewer
      Copies the attributes of the given element into the given SWT item. The element map is updated according to the value of fullMap. If fullMap is true then the current mapping from element to widgets is removed and the new mapping is added. If full map is false then only the new map gets installed. Installing only the new map is necessary in cases where only the order of elements changes but not the set of elements.

      This method is internal to the framework; subclassers should not call this method.

      Specified by:
      doUpdateItem in class StructuredViewer
      Parameters:
      widget - widget item to update
      element - the element to represent
      fullMap - true if mappings are added and removed, and false if only the new map gets installed
    • expandAll

      public void expandAll()
      Expands all nodes of the viewer's tree, starting with the root. This method is equivalent to expandToLevel(ALL_LEVELS).
    • expandAll

      public void expandAll(boolean disableRedraw)
      Expands all nodes of the viewer's tree, starting with the root. This method is equivalent to expandToLevel(ALL_LEVELS).
      Parameters:
      disableRedraw - true when drawing operations should be disabled during expansion.
      Since:
      3.14
    • expandToLevel

      public void expandToLevel(int level)
      Expands the root of the viewer's tree to the given level.
      Parameters:
      level - non-negative level, or ALL_LEVELS to expand all levels of the tree
    • expandToLevel

      public void expandToLevel(int level, boolean disableRedraw)
      Expands the root of the viewer's tree to the given level.
      Parameters:
      level - non-negative level, or ALL_LEVELS to expand all levels of the tree
      disableRedraw - true when drawing operations should be disabled during expansion. true when drawing operations should be enabled during expansion. Prefer using true as this results in a faster UI
      Since:
      3.14
    • expandToLevel

      public void expandToLevel(Object elementOrTreePath, int level)
      Expands all ancestors of the given element or tree path so that the given element becomes visible in this viewer's tree control, and then expands the subtree rooted at the given element to the given level.
      Parameters:
      elementOrTreePath - the element
      level - non-negative level, or ALL_LEVELS to expand all levels of the tree
    • expandToLevel

      public void expandToLevel(Object elementOrTreePath, int level, boolean disableRedraw)
      Expands all ancestors of the given element or tree path so that the given element becomes visible in this viewer's tree control, and then expands the subtree rooted at the given element to the given level.
      Parameters:
      elementOrTreePath - the element
      level - non-negative level, or ALL_LEVELS to expand all levels of the tree
      disableRedraw - true when drawing operations should be disabled during expansion. false when drawing operations should be enabled during expansion. Prefer true as this results in a faster UI.
      Since:
      3.14
    • fireTreeCollapsed

      protected void fireTreeCollapsed(TreeExpansionEvent event)
      Fires a tree collapsed event. Only listeners registered at the time this method is called are notified.
      Parameters:
      event - the tree expansion event
      See Also:
    • fireTreeExpanded

      protected void fireTreeExpanded(TreeExpansionEvent event)
      Fires a tree expanded event. Only listeners registered at the time this method is called are notified.
      Parameters:
      event - the tree expansion event
      See Also:
    • getAutoExpandLevel

      public int getAutoExpandLevel()
      Returns the auto-expand level.
      Returns:
      non-negative level, or ALL_LEVELS if all levels of the tree are expanded automatically
      See Also:
    • getAutoExpandOnSingleChildLevels

      public int getAutoExpandOnSingleChildLevels()
      Returns:
      NO_EXPAND for disabled, ALL_LEVELS for infinite expansion or any integer value for a specific number of levels to expand.
      Since:
      3.34
    • getChildren

      protected abstract Item[] getChildren(Widget widget)
      Returns the SWT child items for the given SWT widget.
      Parameters:
      widget - the widget
      Returns:
      the child items
    • getChild

      protected Item getChild(Widget widget, int index)
      Get the child for the widget at index. Note that the default implementation is not very efficient and should be overridden if this class is implemented.
      Parameters:
      widget - the widget to check
      index - the index of the widget
      Returns:
      Item or null if widget is not a type that can contain items.
      Throws:
      ArrayIndexOutOfBoundsException - if the index is not valid.
      Since:
      3.1
    • getExpanded

      protected abstract boolean getExpanded(Item item)
      Returns whether the given SWT item is expanded or collapsed.
      Parameters:
      item - the item
      Returns:
      true if the item is considered expanded and false if collapsed
    • getExpandedElements

      public Object[] getExpandedElements()
      Returns a list of elements corresponding to expanded nodes in this viewer's tree, including currently hidden ones that are marked as expanded but are under a collapsed ancestor.

      This method is typically used when preserving the interesting state of a viewer; setExpandedElements is used during the restore.

      Returns:
      the array of expanded elements
      See Also:
    • getExpandedState

      public boolean getExpandedState(Object elementOrTreePath)
      Returns whether the node corresponding to the given element or tree path is expanded or collapsed.
      Parameters:
      elementOrTreePath - the element
      Returns:
      true if the node is expanded, and false if collapsed
    • getItemCount

      protected abstract int getItemCount(Control control)
      Returns the number of child items of the given SWT control.
      Parameters:
      control - the control
      Returns:
      the number of children
    • getItemCount

      protected abstract int getItemCount(Item item)
      Returns the number of child items of the given SWT item.
      Parameters:
      item - the item
      Returns:
      the number of children
    • getItems

      protected abstract Item[] getItems(Item item)
      Returns the child items of the given SWT item.
      Parameters:
      item - the item
      Returns:
      the child items
    • getNextItem

      protected Item getNextItem(Item item, boolean includeChildren)
      Returns the item after the given item in the tree, or null if there is no next item.
      Parameters:
      item - the item
      includeChildren - true if the children are considered in determining which item is next, and false if subtrees are ignored
      Returns:
      the next item, or null if none
    • getParentItem

      protected abstract Item getParentItem(Item item)
      Returns the parent item of the given item in the tree, or null if there is no parent item.
      Parameters:
      item - the item
      Returns:
      the parent item, or null if none
    • getPreviousItem

      protected Item getPreviousItem(Item item)
      Returns the item before the given item in the tree, or null if there is no previous item.
      Parameters:
      item - the item
      Returns:
      the previous item, or null if none
    • getRawChildren

      protected Object[] getRawChildren(Object parentElementOrTreePath)
      Description copied from class: StructuredViewer
      Returns the children of the given parent without sorting and filtering them. The resulting array must not be modified, as it may come directly from the model's internal state.

      Returns an empty array if the given parent is null.

      Overrides:
      getRawChildren in class ColumnViewer
      Parameters:
      parentElementOrTreePath - the parent element
      Returns:
      the child elements
    • getSelection

      protected abstract Item[] getSelection(Control control)
      Returns all selected items for the given SWT control.
      Parameters:
      control - the control
      Returns:
      the list of selected items
    • getSelectionFromWidget

      protected List getSelectionFromWidget()
      Description copied from class: StructuredViewer
      Retrieves the selection, as a List, from the underlying widget.
      Specified by:
      getSelectionFromWidget in class StructuredViewer
      Returns:
      the list of selected elements
    • handleDoubleSelect

      protected void handleDoubleSelect(SelectionEvent event)
      Description copied from class: StructuredViewer
      Handles a double-click select event from the widget.

      This method is internal to the framework; subclassers should not call this method.

      Overrides:
      handleDoubleSelect in class ColumnViewer
      Parameters:
      event - the SWT selection event
    • handleTreeCollapse

      protected void handleTreeCollapse(TreeEvent event)
      Handles a tree collapse event from the SWT widget.
      Parameters:
      event - the SWT tree event
    • handleTreeExpand

      protected void handleTreeExpand(TreeEvent event)
      Handles a tree expand event from the SWT widget.
      Parameters:
      event - the SWT tree event
    • hookControl

      protected void hookControl(Control control)
      Description copied from class: ContentViewer
      Adds event listener hooks to the given control.

      All subclasses must call this method when their control is first established.

      The ContentViewer implementation of this method hooks dispose events for the given control. Subclasses may override if they need to add other control hooks; however, super.hookControl must be invoked.

      Overrides:
      hookControl in class ColumnViewer
      Parameters:
      control - the control
    • inputChanged

      protected void inputChanged(Object input, Object oldInput)
      Description copied from class: Viewer
      Internal hook method called when the input to this viewer is initially set or subsequently changed.

      The default implementation does nothing. Subclassers may override this method to do something when a viewer's input is set. A typical use is populate the viewer.

      Overrides:
      inputChanged in class Viewer
      Parameters:
      input - the new input of this viewer, or null if none
      oldInput - the old input element or null if there was previously no input
    • internalInitializeTree

      protected void internalInitializeTree(Control tree)
      Initializes the tree with root items, expanding to the appropriate level if necessary.
      Parameters:
      tree - the tree control
      Since:
      3.3
    • internalCollapseToLevel

      protected void internalCollapseToLevel(Widget widget, int level)
      Recursively collapses the subtree rooted at the given widget to the given level.
      Parameters:
      widget - the widget
      level - non-negative level, or ALL_LEVELS to collapse all levels of the tree
    • internalExpand

      protected Widget internalExpand(Object elementOrPath, boolean expand)
      Tries to create a path of tree items for the given element or tree path. This method recursively walks up towards the root of the tree and in the case of an element (rather than a tree path) assumes that getParent returns the correct parent of an element.
      Parameters:
      elementOrPath - the element
      expand - true if all nodes on the path should be expanded, and false otherwise
      Returns:
      Widget
    • getParentElement

      protected Object getParentElement(Object elementOrTreePath)
      This method takes a tree path or an element. If the argument is not a tree path, returns the parent of the given element or null if the parent is not known. If the argument is a tree path with more than one segment, returns its parent tree path, otherwise returns null.
      Parameters:
      elementOrTreePath - the element or path to find parent for
      Returns:
      the parent element, or parent path, or null
      Since:
      3.2
    • internalGetWidgetToSelect

      protected Widget internalGetWidgetToSelect(Object elementOrTreePath)
      Returns the widget to be selected for the given element or tree path.
      Parameters:
      elementOrTreePath - the element or tree path to select
      Returns:
      the widget to be selected, or null if not found
      Since:
      3.1
    • internalExpandToLevel

      protected void internalExpandToLevel(Widget widget, int level)
      Recursively expands the subtree rooted at the given widget to the given level.

      Note that the default implementation of this method does not call setRedraw.

      Parameters:
      widget - the widget
      level - non-negative level, or ALL_LEVELS to expand all levels of the tree
    • internalRefresh

      protected void internalRefresh(Object element)
      Description copied from class: StructuredViewer
      Refreshes this viewer starting at the given element.
      Specified by:
      internalRefresh in class StructuredViewer
      Parameters:
      element - the element
    • internalRefresh

      protected void internalRefresh(Object element, boolean updateLabels)
      Description copied from class: StructuredViewer
      Refreshes this viewer starting at the given element. Labels are updated as described in refresh(boolean updateLabels).

      The default implementation simply calls internalRefresh(element), ignoring updateLabels.

      If this method is overridden to do the actual refresh, then internalRefresh(Object element) should simply call internalRefresh(element, true).

      Overrides:
      internalRefresh in class StructuredViewer
      Parameters:
      element - the element
      updateLabels - true to update labels for existing elements, false to only update labels as needed, assuming that labels for existing elements are unchanged.
    • internalRefresh

      protected void internalRefresh(Widget widget, Object element, boolean doStruct, boolean updateLabels)
      Refreshes the tree starting at the given widget.

      EXPERIMENTAL. Not to be used except by JDT. This method was added to support JDT's explorations into grouping by working sets. This method cannot be removed without breaking binary backwards compatibility, but should not be called by clients.

      Parameters:
      widget - the widget
      element - the element
      doStruct - true if structural changes are to be picked up, and false if only label provider changes are of interest
      updateLabels - true to update labels for existing elements, false to only update labels as needed, assuming that labels for existing elements are unchanged.
      Since:
      3.1
    • internalRemove

      protected void internalRemove(Object[] elementsOrPaths)
      Removes the given elements from this viewer.

      EXPERIMENTAL. Not to be used except by JDT. This method was added to support JDT's explorations into grouping by working sets. This method cannot be removed without breaking binary backwards compatibility, but should not be called by clients.

      Parameters:
      elementsOrPaths - the elements or element paths to remove
      Since:
      3.1
    • internalRemove

      protected void internalRemove(Object parent, Object[] elements)
      Removes the given elements from this viewer, whenever those elements appear as children of the given parent.
      Parameters:
      parent - the parent element
      elements - the elements to remove
      Since:
      3.1
    • isExpandable

      public boolean isExpandable(Object elementOrTreePath)
      Return whether the tree node representing the given element or path can be expanded. Clients should query expandability by path if the viewer's content provider is an ITreePathContentProvider.

      The default implementation of this framework method calls hasChildren on this viewer's content provider. It may be overridden if necessary.

      Parameters:
      elementOrTreePath - the element or path
      Returns:
      true if the tree node representing the given element can be expanded, or false if not
      See Also:
    • labelProviderChanged

      protected void labelProviderChanged()
      Description copied from class: ContentViewer
      Notifies that the label provider has changed.

      The ContentViewer implementation of this method calls refresh(). Subclasses may reimplement or extend.

      Overrides:
      labelProviderChanged in class ContentViewer
    • newItem

      protected abstract Item newItem(Widget parent, int style, int index)
      Creates a new item.
      Parameters:
      parent - the parent widget
      style - SWT style bits
      index - if non-negative, indicates the position to insert the item into its parent
      Returns:
      the newly-created item
    • remove

      public void remove(Object... elementsOrTreePaths)
      Removes the given elements from this viewer. The selection is updated if required.

      This method should be called (by the content provider) when elements have been removed from the model, in order to cause the viewer to accurately reflect the model. This method only affects the viewer, not the model.

      Parameters:
      elementsOrTreePaths - the elements to remove
    • remove

      public void remove(Object parent, Object... elements)
      Removes the given elements from this viewer whenever they appear as children of the given parent element. If the given elements also appear as children of some other parent, the other parent will remain unchanged. The selection is updated if required.

      This method should be called (by the content provider) when elements have been removed from the model, in order to cause the viewer to accurately reflect the model. This method only affects the viewer, not the model.

      Parameters:
      parent - the parent of the elements to remove
      elements - the elements to remove
      Since:
      3.2
    • remove

      public void remove(Object elementsOrTreePaths)
      Removes the given element from the viewer. The selection is updated if necessary.

      This method should be called (by the content provider) when a single element has been removed from the model, in order to cause the viewer to accurately reflect the model. This method only affects the viewer, not the model. Note that there is another method for efficiently processing the simultaneous removal of multiple elements.

      Parameters:
      elementsOrTreePaths - the element
    • removeAll

      protected abstract void removeAll(Control control)
      Removes all items from the given control.
      Parameters:
      control - the control
    • removeTreeListener

      public void removeTreeListener(ITreeViewerListener listener)
      Removes a listener for expand and collapse events in this viewer. Has no effect if an identical listener is not registered.
      Parameters:
      listener - a tree viewer listener
    • reveal

      public void reveal(Object elementOrTreePath)
      This implementation of reveal() reveals the given element or tree path.
      Specified by:
      reveal in class StructuredViewer
      Parameters:
      elementOrTreePath - the element to reveal
    • scrollDown

      public Item scrollDown(int x, int y)
      Description copied from class: Viewer
      Scrolls the viewer's control down by one item from the given display-relative coordinates. Returns the newly revealed Item, or null if no scrolling occurred or if the viewer doesn't represent an item-based widget.
      Overrides:
      scrollDown in class Viewer
      Parameters:
      x - horizontal coordinate
      y - vertical coordinate
      Returns:
      the item scrolled down to
    • scrollUp

      public Item scrollUp(int x, int y)
      Description copied from class: Viewer
      Scrolls the viewer's control up by one item from the given display-relative coordinates. Returns the newly revealed Item, or null if no scrolling occurred or if the viewer doesn't represent an item-based widget.
      Overrides:
      scrollUp in class Viewer
      Parameters:
      x - horizontal coordinate
      y - vertical coordinate
      Returns:
      the item scrolled up to
    • setAutoExpandLevel

      public void setAutoExpandLevel(int level)
      Sets the auto-expand level to be used when the input of the viewer is set using StructuredViewer.setInput(Object). The value 0 means that there is no auto-expand; 1 means that the invisible root element is expanded (since most concrete subclasses do not show the root element, there is usually no practical difference between using the values 0 and 1); 2 means that top-level elements are expanded, but not their children; 3 means that top-level elements are expanded, and their children, but not grandchildren; and so on.

      The value ALL_LEVELS means that all subtrees should be expanded.

      Note that in previous releases, the Javadoc for this method had an off-by one error. See bug 177669 for details.

      Parameters:
      level - non-negative level, or ALL_LEVELS to expand all levels of the tree
    • setAutoExpandOnSingleChildLevels

      public void setAutoExpandOnSingleChildLevels(int level)
      Sets the maximum number of levels to automatically expand whenever a widget is expanded that only has a single child element. The expansion is recursively applied for the given number of levels if the widget at each of the according levels only has a single child.

      This behavior applies when expanding a widget using the method setExpandedStateWithAutoExpandOnSingleChild(Object, boolean) or when an SWT event is triggered on the underlying tree. The behavior is such, that a level of 0 or 1 represents opening the current widget itself. Thus, only a level of 2 or greater will have any additional effect. NO_EXPAND means that such paths are not automatically expanded.

      The expansion is recursively applied for the given number of levels if the widget at each of the according levels only has a single child and is off by default. Turning this behavior on should be done cautiously on trees with lazy-loaded child-nodes.

      Using ALL_LEVELS as argument will recursively expand as many levels as possible until a widget at the according level has more than a single child.

      Parameters:
      level - NO_EXPAND for disabled, ALL_LEVELS for infinite expansion or any positive integer value to set a level to which expansion is recursively applied for the given number of levels if the widget at each of the according levels only has a single child.
      Since:
      3.34
    • setContentProvider

      public void setContentProvider(IContentProvider provider)
      Sets the content provider used by this AbstractTreeViewer.

      Content providers for abstract tree viewers must implement either ITreeContentProvider or ITreePathContentProvider.

      Overrides:
      setContentProvider in class StructuredViewer
      Parameters:
      provider - the content provider
      See Also:
    • assertContentProviderType

      protected void assertContentProviderType(IContentProvider provider)
      Description copied from class: StructuredViewer
      Assert that the content provider is of one of the supported types.
      Overrides:
      assertContentProviderType in class StructuredViewer
      Parameters:
      provider - content provider to check
    • setExpanded

      protected abstract void setExpanded(Item item, boolean expand)
      Sets the expand state of the given item.
      Parameters:
      item - the item
      expand - the expand state of the item
    • setExpandedElements

      public void setExpandedElements(Object... elements)
      Sets which nodes are expanded in this viewer's tree. The given list contains the elements that are to be expanded; all other nodes are to be collapsed.

      This method is typically used when restoring the interesting state of a viewer captured by an earlier call to getExpandedElements.

      Parameters:
      elements - the array of expanded elements
      See Also:
    • setExpandedTreePaths

      public void setExpandedTreePaths(TreePath... treePaths)
      Sets which nodes are expanded in this viewer's tree. The given list contains the tree paths that are to be expanded; all other nodes are to be collapsed.

      This method is typically used when restoring the interesting state of a viewer captured by an earlier call to getExpandedTreePaths.

      Parameters:
      treePaths - the array of expanded tree paths
      Since:
      3.2
      See Also:
    • setExpandedState

      public void setExpandedState(Object elementOrTreePath, boolean expanded)
      Sets whether the node corresponding to the given element or tree path is expanded or collapsed.
      Parameters:
      elementOrTreePath - the element
      expanded - true if the node is expanded, and false if collapsed
    • setExpandedStateWithAutoExpandOnSingleChild

      public void setExpandedStateWithAutoExpandOnSingleChild(Object elementOrTreePath, boolean expanded)
      Behaves like setExpandedState(Object, boolean) but additionally also respects expansion of paths of of single child elements if set up by setAutoExpandOnSingleChildLevels(int).
      Parameters:
      elementOrTreePath - the widget to expand
      expanded - the new expanded state of elementOrTreePath
      Since:
      3.34
    • setSelection

      protected abstract void setSelection(List<Item> items)
      Sets the selection to the given list of items.
      Parameters:
      items - list of items (element type: org.eclipse.swt.widgets.Item)
    • setSelectionToWidget

      protected void setSelectionToWidget(List v, boolean reveal)
      This implementation of setSelectionToWidget accepts a list of elements or a list of tree paths.
      Specified by:
      setSelectionToWidget in class StructuredViewer
      Parameters:
      v - list of selected elements (element type: Object) or null if the selection is to be cleared
      reveal - true if the selection is to be made visible, and false otherwise
    • showItem

      protected abstract void showItem(Item item)
      Shows the given item.
      Parameters:
      item - the item
    • updateChildren

      @Deprecated protected void updateChildren(Widget widget, Object parent, Object[] elementChildren)
      Deprecated.
      this is no longer called by the framework
      Updates the tree items to correspond to the child elements of the given parent element. If null is passed for the children, this method obtains them (only if needed).
      Parameters:
      widget - the widget
      parent - the parent element
      elementChildren - the child elements, or null
    • getChildren

      @Deprecated public Item[] getChildren(Widget widget, Object[] elementChildren)
      Deprecated.
      This method was inadvertently released as API but is not intended to be called by clients.
      Not to be called by clients. Return the items to be refreshed as part of an update. elementChildren are the new elements.
      Parameters:
      widget - widget to get children for
      elementChildren - unused
      Returns:
      Item[]
      Since:
      3.4
    • updatePlus

      protected void updatePlus(Item item, Object element)
      Updates the "+"/"-" icon of the tree node from the given element. It calls isExpandable to determine whether an element is expandable.
      Parameters:
      item - the item
      element - the element
    • getVisibleExpandedElements

      public Object[] getVisibleExpandedElements()
      Gets the expanded elements that are visible to the user. An expanded element is only visible if the parent is expanded.
      Returns:
      the visible expanded elements
      Since:
      2.0
    • getTreePathFromItem

      protected TreePath getTreePathFromItem(Item item)
      Returns the tree path for the given item.
      Parameters:
      item - item to get path for
      Returns:
      TreePath
      Since:
      3.2
    • getSelection

      public ISelection getSelection()
      The AbstractTreeViewer implementation of this method returns the result as an ITreeSelection.

      Call getStructuredSelection() instead to get an instance of ITreeSelection directly.

      Subclasses do not typically override this method, but implement getSelectionFromWidget(List) instead. If they override this method, they should return an ITreeSelection as well.
      Specified by:
      getSelection in interface ISelectionProvider
      Overrides:
      getSelection in class StructuredViewer
      Returns:
      ISelection
      Since:
      3.2
    • getStructuredSelection

      public ITreeSelection getStructuredSelection() throws ClassCastException
      Returns the ITreeSelection of this viewer.

      Subclasses whose getSelection() specifies to return a more specific type should also override this method and return that type.

      Overrides:
      getStructuredSelection in class StructuredViewer
      Returns:
      ITreeSelection
      Throws:
      ClassCastException - if the selection of the viewer is not an instance of ITreeSelection
      Since:
      3.11
    • setSelectionToWidget

      protected void setSelectionToWidget(ISelection selection, boolean reveal)
      Description copied from class: StructuredViewer
      Converts the selection to a List and calls setSelectionToWidget(List, boolean). The selection is expected to be an IStructuredSelection of elements. If not, the selection is cleared.

      Subclasses do not typically override this method, but implement setSelectionToWidget(List, boolean) instead.

      Overrides:
      setSelectionToWidget in class StructuredViewer
      Parameters:
      selection - an IStructuredSelection of elements
      reveal - true to reveal the first element in the selection, or false otherwise
    • getExpandedTreePaths

      public TreePath[] getExpandedTreePaths()
      Returns a list of tree paths corresponding to expanded nodes in this viewer's tree, including currently hidden ones that are marked as expanded but are under a collapsed ancestor.

      This method is typically used when preserving the interesting state of a viewer; setExpandedElements is used during the restore.

      Returns:
      the array of expanded tree paths
      Since:
      3.2
      See Also:
    • insert

      public void insert(Object parentElementOrTreePath, Object element, int position)
      Inserts the given element as a new child element of the given parent element at the given position. If this viewer has a sorter, the position is ignored and the element is inserted at the correct position in the sort order.

      This method should be called (by the content provider) when elements have been added to the model, in order to cause the viewer to accurately reflect the model. This method only affects the viewer, not the model.

      Parameters:
      parentElementOrTreePath - the parent element, or the tree path to the parent
      element - the element
      position - a 0-based position relative to the model, or -1 to indicate the last position
      Since:
      3.2
    • getColumnViewerOwner

      protected Widget getColumnViewerOwner(int columnIndex)
      Description copied from class: ColumnViewer
      Returns the column widget at the given column index.
      Specified by:
      getColumnViewerOwner in class ColumnViewer
      Parameters:
      columnIndex - the column index
      Returns:
      Widget the column widget
    • getItemAt

      protected Item getItemAt(Point point)
      This implementation of getItemAt(Point) returns null to ensure API backwards compatibility. Subclasses should override.
      Specified by:
      getItemAt in class ColumnViewer
      Parameters:
      point - the widget-relative coordinates
      Returns:
      the Item at the coordinates or null if there is no item at the given coordinates
      Since:
      3.3
    • createViewerEditor

      protected ColumnViewerEditor createViewerEditor()
      This implementation of createViewerEditor() returns null to ensure API backwards compatibility. Subclasses should override.
      Specified by:
      createViewerEditor in class ColumnViewer
      Returns:
      the editor, or null if this viewer does not support editing cell contents.
      Since:
      3.3
    • doGetColumnCount

      protected int doGetColumnCount()
      Returns the number of columns of this viewer.

      Subclasses should overwrite this method, which has a default implementation (returning 0) for API backwards compatility reasons

      Specified by:
      doGetColumnCount in class ColumnViewer
      Returns:
      the number of columns
      Since:
      3.3
    • buildLabel

      protected void buildLabel(ViewerLabel updateLabel, Object elementOrPath)
      This implementation of buildLabel handles tree paths as well as elements.
      Overrides:
      buildLabel in class StructuredViewer
      Parameters:
      updateLabel - the ViewerLabel to collect the result in
      elementOrPath - the element or tree path for which a label should be built
      See Also:
    • internalIsInputOrEmptyPath

      protected final boolean internalIsInputOrEmptyPath(Object elementOrTreePath)
      Returns true if the given object is either the input or an empty tree path.
      Parameters:
      elementOrTreePath - an element which could either be the viewer's input, or a tree path
      Returns:
      true if the given object is either the input or an empty tree path, false otherwise.
      Since:
      3.3
    • getViewerRowFromItem

      protected ViewerRow getViewerRowFromItem(Widget item)
      Description copied from class: ColumnViewer
      Returns a ViewerRow associated with the given row widget. Implementations may re-use the same instance for different row widgets; callers can only use the viewer row locally and until the next call to this method.
      Specified by:
      getViewerRowFromItem in class ColumnViewer
      Parameters:
      item - the row widget
      Returns:
      ViewerRow a viewer row object
    • setExpandPreCheckFilters

      public void setExpandPreCheckFilters(boolean checkFilters)
      Instructs isExpandable(Object) to consult filters to more accurately determine if an item can be expanded.

      Setting this value to true will affect performance of the tree viewer.

      To improve performance, by default the tree viewer does not consult filters when determining if a tree node could be expanded.

      Parameters:
      checkFilters - true to instruct tree viewer to consult filters
      Since:
      3.8
      See Also:
    • contains

      public boolean contains(Object parent, Object element)
      Returns true if the element is present in the viewer. If the viewer has incremental display set then the element is searched inside expandable node also. i.e. it searches inside the remaining elements to be populated.
      Parameters:
      parent - model element which corresponds to any visible widget on the viewer
      element - model element
      Returns:
      if given model element is contained in the viewer
      Since:
      3.31