Class AbstractNavTreeNode

java.lang.Object
com.inductiveautomation.ignition.designer.navtree.model.AbstractNavTreeNode
All Implemented Interfaces:
Iterable<AbstractNavTreeNode>, TreeNode
Direct Known Subclasses:
AbstractResourceNavTreeNode, ComponentNode, ComponentNode, MutableNavTreeNode, PipeNode, PipesFolderNode, ShapeNode

public abstract class AbstractNavTreeNode extends Object implements TreeNode, 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.
  • Field Details

  • Constructor Details

    • AbstractNavTreeNode

      protected AbstractNavTreeNode()
    • AbstractNavTreeNode

      protected AbstractNavTreeNode(boolean isModuleNode)
  • Method Details

    • newLogger

      protected LoggerEx newLogger()
    • toString

      public String toString()
      Overrides:
      toString in class 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(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.
    • install

      public void install(AbstractNavTreeNode parent)
    • 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 Enumeration children()
      Specified by:
      children in interface TreeNode
    • iterator

      public Iterator<AbstractNavTreeNode> iterator()
      Specified by:
      iterator in interface Iterable<AbstractNavTreeNode>
    • getAllowsChildren

      public boolean getAllowsChildren()
      Specified by:
      getAllowsChildren in interface TreeNode
    • checkChildren

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

      protected 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(Component source, int x, int y, int modifiers, TreePath[] paths, 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(JPopupMenu menu, TreePath[] paths, List<AbstractNavTreeNode> selection, int modifiers)
      Default implementation calls setupEditActions(), and then addEditActions()
    • addEditActions

      protected void addEditActions(JPopupMenu menu)
    • addEditActions

      protected void addEditActions(JPopupMenu menu, boolean excludeRenameAction)
      The standard edit popup menu includes the following: - Rename - Cut - Copy - Copy Path (Only for non TopLevel nodes - Paste - Delete / Discard Overrides (for overridden resources, Discard Overrides will appear in place of Delete) Overridden and Inherited resources (element of the subclass AbstractResourceNavTreeNode can not be renamed, to accommodate that situation, the excludeRenameAction option can be use in those cases should these edit actions.
      Parameters:
      menu - The popup menu that the edit actions will be added to.
      excludeRenameAction - Set to true to exclude "Rename" as an option.
    • getPopupActions

      protected Iterable<AbstractNavTreeNode.PopupAction> getPopupActions()
    • getDeleteAction

      @Nonnull protected AbstractNavTreeNode.PopupAction getDeleteAction()
    • setupEditActions

      protected void setupEditActions(TreePath[] paths, List<AbstractNavTreeNode> selection)
      Searches for a common edit action handling parent, and initializes each popup action by calling AbstractNavTreeNode.PopupAction.setSelection(AbstractNavTreeNode, AbstractNavTreeNode, List)
    • 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(TreePath[] paths)
    • findEditActionHandler

      @Nullable public static AbstractNavTreeNode findEditActionHandler(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(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 String aName)
    • onEdit

      public void onEdit(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(List<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 TreePath pathToRoot()
    • getChildAt

      public final AbstractNavTreeNode getChildAt(int idx)
      Specified by:
      getChildAt in interface TreeNode
    • getChildCount

      public final int getChildCount()
      Specified by:
      getChildCount in interface TreeNode
    • getIndex

      public final int getIndex(TreeNode node)
      Specified by:
      getIndex in interface TreeNode
    • isLeaf

      public boolean isLeaf()
      Specified by:
      isLeaf in interface TreeNode
    • setChildren

      protected void setChildren(List<AbstractNavTreeNode> children, boolean notify)
    • getParent

      public AbstractNavTreeNode getParent()
      Overridden to narrow the return type
      Specified by:
      getParent in interface 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(String name)
      Looks through the node's children (if any) for a node with the given name
    • visitIfLoaded

      public void visitIfLoaded(Consumer<AbstractNavTreeNode> visitor)
      Visits children first if they have been loaded
    • getModel

      public NavTreePanel.EditableTreeModel getModel()
    • getSelectionModel

      public TreeSelectionModel getSelectionModel()
    • isSelected

      public boolean isSelected()
    • getText

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

      public String getTooltip()
    • getThumbnail

      public BufferedImage getThumbnail()
    • getIcon

      public Icon getIcon()
    • getExpandedIcon

      public 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 String getName()
    • getWorkspaceName

      public 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(List<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(String name)
    • setText

      protected void setText(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(String tooltip)
    • setThumbnail

      protected void setThumbnail(BufferedImage thumbnail)
    • setIcon

      protected void setIcon(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(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(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(List<AbstractNavTreeNode> selectedChildren, @Nullable 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, List<DataFlavor> flavors)
    • canDrag

      public boolean canDrag(List<AbstractNavTreeNode> draggedChildren)
      Can the nodes controlled by this action handling node be dragged?
    • doDelete

      public void doDelete(List<? extends AbstractNavTreeNode> selectedChildren, AbstractNavTreeNode.DeleteReason reason)
      Called when the delete action is performed, if confirmDelete returned true
    • confirmDelete

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

      @Nullable public Transferable doCopy(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 Transferable createResourceCopy(@Nonnull List<ProjectResource> resources)
      Creates a Transferable that will just be a JSON string containing an array of project resources
    • doCut

      public Transferable doCut(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(List<? extends AbstractNavTreeNode> selectedChildren, 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 Clipboard getClipboard()
    • forceChildrenReload

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

      public static void performOnAllChildren(AbstractNavTreeNode node, Consumer<AbstractNavTreeNode> action)
    • isModuleNode

      public boolean isModuleNode()