Class AbstractNavTreeNode

  • All Implemented Interfaces:
    java.lang.Iterable<AbstractNavTreeNode>, javax.swing.tree.TreeNode
    Direct Known Subclasses:
    AbstractResourceNavTreeNode, ComponentNode, MutableNavTreeNode, ShapeNode

    public abstract class AbstractNavTreeNode
    extends java.lang.Object
    implements javax.swing.tree.TreeNode, java.lang.Iterable<AbstractNavTreeNode>
    Base TreeNode for the Designer's Project Browser tree. Supports a number of project-browser features, such as:
    • lazy (but synchronous) loading
    • badges for rendering
    • selection delegation
    • cut/copy/paste handling.
    • Constructor Detail

      • AbstractNavTreeNode

        protected AbstractNavTreeNode()
    • Method Detail

      • newLogger

        protected LoggerEx newLogger()
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object
      • getSortOrder

        public int getSortOrder()
        Returns the relative sort order for peers. Not all nav tree node parents will use this sort order, but the root node does. Nodes with equal sort orders will then be sorted by their titles. The default return value here is 0. The config menu node returns Integer.MIN_VALUE.
        Returns:
        relative sort order for peers
      • debug

        protected void debug​(java.lang.String str)
      • debug

        protected void debug()
      • getDepth

        public int getDepth()
        Returns this node's depth in the tree. Will be -1 when the node is not installed.
      • uninstall

        protected void uninstall()
        Called when the node is removed from the tree. Override to provide meaningful implementation.
      • uninstallChildren

        protected void uninstallChildren()
      • useThumbnailTooltip

        public boolean useThumbnailTooltip()
      • children

        public java.util.Enumeration children()
        Specified by:
        children in interface javax.swing.tree.TreeNode
      • getAllowsChildren

        public boolean getAllowsChildren()
        Specified by:
        getAllowsChildren in interface javax.swing.tree.TreeNode
      • checkChildren

        protected void checkChildren()
        Checks to see if the children have been loaded, and if not, loads them.
      • loadChildren

        protected java.util.List<AbstractNavTreeNode> loadChildren()
        Called before this node responds from any of the children-related TreeNode functions, if a list of children wasn't already set. Override to use lazy child loading.
      • showPopupMenu

        public void showPopupMenu​(java.awt.Component source,
                                  int x,
                                  int y,
                                  int modifiers,
                                  javax.swing.tree.TreePath[] paths,
                                  java.util.List<AbstractNavTreeNode> selection)
        Called when a popup triggering event (right click) occurs over this node.
        Parameters:
        source - The component to use as the invoker for the popup menu.
        x - popup location x value
        y - popup location y value
        modifiers - extended modifier mask for this event, e.g. this which end with the _DOWN_MASK suffix, such as ALT_DOWN_MASK, BUTTON1_DOWN_MASK, and others, as defined in InputEvent.getModifiers() )}
        selection - The list of currently selected nodes.
      • initPopupMenu

        protected void initPopupMenu​(javax.swing.JPopupMenu menu,
                                     javax.swing.tree.TreePath[] paths,
                                     java.util.List<AbstractNavTreeNode> selection,
                                     int modifiers)
        Default implementation calls setupEditActions(), and then addEditActions()
      • addEditActions

        protected void addEditActions​(javax.swing.JPopupMenu menu)
      • setupEditActions

        protected void setupEditActions​(javax.swing.tree.TreePath[] paths,
                                        java.util.List<AbstractNavTreeNode> selection)
        Searches for a common edit action handling parent, and if one exists, sets up the edit actions appropriately. If not, disables them.
      • isRestricted

        public boolean isRestricted()
        Used to display protected Icon for project resources that are able to be protected. This method is overridden in AbstractProtectableResource to return if the the project resource it contains is actually.
      • isTopLevelNode

        protected boolean isTopLevelNode()
        Indicates whether this node is the "root" of a given tree; primarily used to offer different edit options
      • findCommonEditActionHandler

        @Nullable
        public static AbstractNavTreeNode findCommonEditActionHandler​(javax.swing.tree.TreePath[] paths)
      • findEditActionHandler

        @Nullable
        public static AbstractNavTreeNode findEditActionHandler​(javax.swing.tree.TreePath path)
        Finds the closest edit action handling node in the hierarchy of the given path, not including the last path component itself. (unless no other is found)
      • findDropHandler

        @Nullable
        public static AbstractNavTreeNode findDropHandler​(javax.swing.tree.TreePath path)
        Finds the closest edit action handling node in the hierarchy of the given path, including the last path component itself.
      • isEditable

        public boolean isEditable()
        Override this and return true if you want your node's text to be editable. See onEdit(String)
      • isValidName

        protected boolean isValidName​(@Nonnull
                                      java.lang.String aName)
      • onEdit

        public void onEdit​(java.lang.String newTextValue)
        Called after this node has been edited in the tree.
      • onDoubleClick

        public void onDoubleClick()
        Called when this node is double-clicked on.
      • onSelected

        public void onSelected()
        Called when this node is selected in the tree
      • onChildrenSelected

        public void onChildrenSelected​(java.util.List<javax.swing.tree.TreePath> paths)
        Called when child nodes (deep) are selected under this node.
        Parameters:
        paths - the children selected when the parent node is selected
      • select

        public void select()
        Causes this tree node to become selected, clearing the current selection
      • select

        public void select​(boolean append)
        Causes this tree node to become selected.
        Parameters:
        append - Should this node be appended to the current selection, or be selected by itself?
      • expand

        public void expand()
      • expandAndSelect

        public void expandAndSelect()
      • pathToRoot

        public javax.swing.tree.TreePath pathToRoot()
      • getChildAt

        public final AbstractNavTreeNode getChildAt​(int idx)
        Specified by:
        getChildAt in interface javax.swing.tree.TreeNode
      • getChildCount

        public final int getChildCount()
        Specified by:
        getChildCount in interface javax.swing.tree.TreeNode
      • getIndex

        public final int getIndex​(javax.swing.tree.TreeNode node)
        Specified by:
        getIndex in interface javax.swing.tree.TreeNode
      • isLeaf

        public boolean isLeaf()
        Specified by:
        isLeaf in interface javax.swing.tree.TreeNode
      • setChildren

        protected final void setChildren​(java.util.List<AbstractNavTreeNode> children,
                                         boolean notify)
      • getParent

        public AbstractNavTreeNode getParent()
        Overridden to narrow the return type
        Specified by:
        getParent in interface javax.swing.tree.TreeNode
      • refresh

        public void refresh()
        Tells the model that this node's representation has changed, but not its structure.
      • reload

        public void reload()
        Tells the model that this node and its child structure have changed.
      • recreate

        protected void recreate()
        Asks the node to create its child list again, and reloads the structure
      • recreate

        protected void recreate​(boolean keepSelection)
      • notifyChildNameChanged

        protected void notifyChildNameChanged​(AbstractNavTreeNode child)
        Called back by {setName(String) so the parent can re-sort its children if necessary. Simply calls recreate() by default assuming the loadChildren() call sorts alphabetically.
      • findChild

        public AbstractNavTreeNode findChild​(java.lang.String name)
        Looks through the node's children (if any) for a node with the given name
      • visitIfLoaded

        public void visitIfLoaded​(java.util.function.Consumer<AbstractNavTreeNode> visitor)
        Visits children first if they have been loaded
      • getSelectionModel

        public javax.swing.tree.TreeSelectionModel getSelectionModel()
      • isSelected

        public boolean isSelected()
      • getText

        public java.lang.String getText()
        The text that will be used to render the node
      • getTooltip

        public java.lang.String getTooltip()
      • getThumbnail

        public java.awt.image.BufferedImage getThumbnail()
      • getIcon

        public javax.swing.Icon getIcon()
      • getExpandedIcon

        public javax.swing.Icon getExpandedIcon()
        Returns an alternate icon for when this node is expanded, if applicable. Default implementation simply returns getIcon()
      • addBadges

        public void addBadges​(BadgeTreeCellRenderer renderer,
                              boolean selected)
        Add 'badges' to indicate meta information about this node
        Parameters:
        renderer - the renderer; call BadgeTreeCellRenderer.addBadge(Badge) to add your badge(s)
        selected - the state of this node
        Since:
        8.0 removed the single-arg variant that did not pass selection status
      • getName

        public java.lang.String getName()
      • getWorkspaceName

        public java.lang.String getWorkspaceName()
        Returns the name of the desired workspace for this node. Default behavior is to delegate to the parent. null mean's don't affect workspace selection.
      • dispatchSelectionEvent

        public final void dispatchSelectionEvent​(java.util.List<javax.swing.tree.TreePath> selection)
        Not part of the public API. Used by the nav tree to dispatch a selection event to the nodes. This function take a list of selected paths, which are paths to the children of this node. It then calls onSelected() for any direct children, and calls dispatchSelectionEvent with a sublist to any child folders. Lastly, it will call onChildrenSelected for this node.
        Parameters:
        selection - the selected paths
      • setName

        protected void setName​(java.lang.String name)
      • setText

        protected void setText​(java.lang.String text)
      • isItalic

        public boolean isItalic()
      • setItalic

        public void setItalic​(boolean italic)
      • isBold

        public boolean isBold()
      • setBold

        public void setBold​(boolean bold)
      • setTooltip

        protected void setTooltip​(java.lang.String tooltip)
      • setThumbnail

        protected void setThumbnail​(java.awt.image.BufferedImage thumbnail)
      • setIcon

        protected void setIcon​(javax.swing.Icon icon)
      • isEditActionHandler

        public boolean isEditActionHandler()
        Override to return true if you want this node to be an edit action handler for its children.
      • canDelete

        public boolean canDelete​(java.util.List<AbstractNavTreeNode> selectedChildren)
        Can this edit action handler handle the delete action, given its current selection? Note that if this and canCopy(java.util.List) both return true, the cut action will also be enabled.
      • canCopy

        public boolean canCopy​(java.util.List<AbstractNavTreeNode> selectedChildren)
        Can this edit action handler handle the copy action, given its current selection? Note that if this and canDelete(java.util.List) both return true, the cut action will also be enabled.
      • canPaste

        public boolean canPaste​(java.util.List<AbstractNavTreeNode> selectedChildren,
                                @Nullable
                                java.awt.datatransfer.Transferable data)
        Can this action handler handle a paste given the data flavors currently available in the clipboard? data may be null.
      • canDrop

        public boolean canDrop​(AbstractNavTreeNode dropTarget,
                               java.util.List<java.awt.datatransfer.DataFlavor> flavors)
      • canDrag

        public boolean canDrag​(java.util.List<AbstractNavTreeNode> draggedChildren)
        Can the nodes controlled by this action handling node be dragged?
      • confirmDelete

        public boolean confirmDelete​(java.util.List<? extends AbstractNavTreeNode> selectedChildren)
        Used to confirm the delete. If true is returned, doDelete will be called.
      • doCopy

        @Nullable
        public java.awt.datatransfer.Transferable doCopy​(java.util.List<? extends AbstractNavTreeNode> selectedChildren)
        Called when the copy action is performed.
        Returns:
        the current selection as a Transferable, or null if the copy failed. Will be added to the system clipboard.
      • createResourceCopy

        protected java.awt.datatransfer.Transferable createResourceCopy​(@Nonnull
                                                                        java.util.List<ProjectResource> resources)
        Creates a Transferable that will just be a JSON string containing an array of project resources
      • doCut

        public java.awt.datatransfer.Transferable doCut​(java.util.List<? extends AbstractNavTreeNode> selectedChildren)
        Called when the cut action is performed.
        Returns:
        the current selection as a Transferable, or null if the cut failed. Will be added to the system clipboard.
      • doPaste

        public boolean doPaste​(java.util.List<? extends AbstractNavTreeNode> selectedChildren,
                               java.awt.datatransfer.Transferable clipboardContents,
                               boolean isDrop)
        Called when the paste action is performed
        Parameters:
        clipboardContents - The current contents of the clipboard to paste.
        isDrop - Indicates whether this paste originated from a drop action. If false, originated from a keyboard or menu paste shortcut.
        Returns:
        whether or not the paste successfully completed.
      • getClipboard

        protected java.awt.datatransfer.Clipboard getClipboard()
      • forceChildrenReload

        public void forceChildrenReload()
        Will force child nodes to reload the next time checkChildren() is called.