AuboCaps  0.6.0
arcs::aubo_scope::TreeNode Class Reference

#include <tree_node.h>

Public Member Functions

 TreeNode (TreeNode &f)
 
 TreeNode (TreeNode &&f)
 
virtual ~TreeNode ()
 
TreeNodePtr addChild (ProgramNodePtr program_node)
 Add a child program node to the sub-tree. More...
 
TreeNodePtr insertChildBefore (TreeNodePtr existingChildNode, ProgramNodePtr program_node)
 Inserts a child program node in the sub-tree directly before the existing selected child node. More...
 
TreeNodePtr insertChildAfter (TreeNodePtr existingChildNode, ProgramNodePtr program_node)
 Inserts a child program node under in the sub-tree directly after the existing selected child node. More...
 
TreeNodePtr cutChildNode (TreeNodePtr child)
 Cut a child program node under in the sub-tree directly after the existing selected child node. More...
 
bool removeChild (TreeNodePtr program_node)
 Removes a child node from the sub-tree. More...
 
std::vector< TreeNodePtr > getChildren ()
 
std::vector< TreeNodePtr > getChildrenNotSuppressed ()
 
TreeNodePtr getParent ()
 
ProgramNodePtr getProgramNode ()
 
bool isSuppressed ()
 
TreeNodePtr locateDescendantTreeNode (ProgramNodePtr program_node)
 
void setChildSequenceLocked (bool isChildSequenceLocked)
 Configures whether or not child nodes can be rearranged, deleted or have other nodes inserted into the child sequence by the end user. More...
 
int traverse (std::function< int(ProgramNodePtr, int, int)> nodeVisitor)
 

Private Member Functions

 TreeNode ()
 

Private Attributes

void * d_ { nullptr }
 

Friends

class DataSwitch
 

Detailed Description

This interface represents a node in the program tree that can be used to construct a sub-tree rooted in a AuboCap program node.

Using the ProgramModel#getRootTreeNode(ProgramNodeContribution) to obtain a root for the sub-tree, it is possible to add children. For each call to TreeNode#addChild(ProgramNode), a new TreeNode is returned, that can, in turn, act as a root for yet another sub-tree.

Definition at line 23 of file tree_node.h.

Constructor & Destructor Documentation

arcs::aubo_scope::TreeNode::TreeNode ( TreeNode f)
arcs::aubo_scope::TreeNode::TreeNode ( TreeNode &&  f)
virtual arcs::aubo_scope::TreeNode::~TreeNode ( )
virtual
arcs::aubo_scope::TreeNode::TreeNode ( )
private

Member Function Documentation

TreeNodePtr arcs::aubo_scope::TreeNode::addChild ( ProgramNodePtr  program_node)

Add a child program node to the sub-tree.

Parameters
programNodethe ProgramNode constructed using the ProgramNodeFactory
Returns
Returns a TreeNode that can be used to add children to the newly added child.
Exceptions
TreeStructureExceptionIf it is not allowed to insert the ProgramNode at this position a TreeStructureException will be thrown.
IllegalStateExceptionif called from a Swing-based AuboCap outside of an UndoableChanges scope (see also UndoRedoManager).
TreeNodePtr arcs::aubo_scope::TreeNode::cutChildNode ( TreeNodePtr  child)

Cut a child program node under in the sub-tree directly after the existing selected child node.

Shifts any subsequent nodes to positions after the newly added child.

Parameters
childexisting TreeNode child of this TreeNode.
Returns
Returns the TreeNode that has been cut off.
Exceptions
TreeStructureExceptionIf it is not allowed to cut the ProgramNode or if the selected child node is not a child of this TreeNode a TreeStructureException will be thrown.
IllegalStateExceptionif called from a Swing-based AuboCap outside of an UndoableChanges scope (see also UndoRedoManager).
std::vector<TreeNodePtr> arcs::aubo_scope::TreeNode::getChildren ( )
Returns
a list of TreeNode objects that represents all the children of this TreeNode (both programmatically added as well as inserted by the end user).
std::vector<TreeNodePtr> arcs::aubo_scope::TreeNode::getChildrenNotSuppressed ( )
TreeNodePtr arcs::aubo_scope::TreeNode::getParent ( )
Returns
Parent treenode of the node
ProgramNodePtr arcs::aubo_scope::TreeNode::getProgramNode ( )
Returns
Returns the ProgramNode at this position in the sub-tree. Can either be a built-in AuboScope program node (provided by AUBO Robots) or a AuboCap program node.
TreeNodePtr arcs::aubo_scope::TreeNode::insertChildAfter ( TreeNodePtr  existingChildNode,
ProgramNodePtr  program_node 
)

Inserts a child program node under in the sub-tree directly after the existing selected child node.

Shifts any subsequent nodes to positions after the newly added child.

Parameters
existingChildNodeexisting TreeNode child of this TreeNode.
programNodethe ProgramNode constructed using the ProgramNodeFactory.
Returns
Returns a TreeNode that can be used to add children to the newly added child.
Exceptions
TreeStructureExceptionIf it is not allowed to insert the ProgramNode at this position or if the selected child node is not a child of this TreeNode a TreeStructureException will be thrown.
IllegalStateExceptionif called from a Swing-based AuboCap outside of an UndoableChanges scope (see also UndoRedoManager).
TreeNodePtr arcs::aubo_scope::TreeNode::insertChildBefore ( TreeNodePtr  existingChildNode,
ProgramNodePtr  program_node 
)

Inserts a child program node in the sub-tree directly before the existing selected child node.

Shifts the selected child node and any subsequent nodes to positions after the newly added child.

Parameters
existingChildNodeexisting TreeNode child of this TreeNode.
programNodethe ProgramNode constructed using the ProgramNodeFactory.
Returns
Returns a TreeNode that can be used to add children to the newly added child.
Exceptions
TreeStructureExceptionIf it is not allowed to insert the ProgramNode at this position or if the selected child node is not a child of this TreeNode a TreeStructureException will be thrown.
IllegalStateExceptionif called from a Swing-based AuboCap outside of an UndoableChanges scope (see also UndoRedoManager).
bool arcs::aubo_scope::TreeNode::isSuppressed ( )
TreeNodePtr arcs::aubo_scope::TreeNode::locateDescendantTreeNode ( ProgramNodePtr  program_node)

Gets a corresponding TreeNode instance for a child program node (a ProgramNode instance) in the sub-tree under this TreeNode.

This method can for instance be used to gain access to the sub-tree under a child program node encountered when iterating the sub-tree of the parent node using the ProgramNodeVisitor (or any derived sub class thereof).

Parameters
programNodeprogram node to get a corresponding TreeNode representation for, not null. Can either be a built-in AuboScope program node (provided by Universal Robots) or a AuboCap program node.
Returns
the TreeNode instance for the specified program node.
Exceptions
ProgramNodeNotInSubTreeExceptionwhen the program node cannot be found because it is not in the sub-tree.
bool arcs::aubo_scope::TreeNode::removeChild ( TreeNodePtr  program_node)

Removes a child node from the sub-tree.

Be aware that removing the last child will trigger the insertion of an { <empty>} child node.

Parameters
childThe TreeNode child to be removed.
Returns
Returns true if removed successfully. false otherwise.
Exceptions
TreeStructureExceptionIf the removed child would leave the tree in an illegal state a TreeStructureException will be thrown.
IllegalStateExceptionif called from a Swing-based AuboCap outside of an UndoableChanges scope (see also UndoRedoManager).
void arcs::aubo_scope::TreeNode::setChildSequenceLocked ( bool  isChildSequenceLocked)

Configures whether or not child nodes can be rearranged, deleted or have other nodes inserted into the child sequence by the end user.

Parameters
isChildSequenceLockedIf true then the immediate children under this TreeNode will be locked.
int arcs::aubo_scope::TreeNode::traverse ( std::function< int(ProgramNodePtr, int, int)>  nodeVisitor)

This method traverses the entire sub-tree under this tree node in a depth-first fashion (this corresponds to a top-down approach in the program tree).

A node visitor is used for callbacks to the visit-overloads you choose to override. The overload called depends on the node type encountered. Override the overloads for the node types you are concerned with. All visit-methods have the program node, sibling index and depth as arguments to help filter nodes if needed.

The node visitor can be either a ProgramNodeVisitor implementation with optional overrides or a ProgramNodeInterfaceVisitor implementation. In the latter case, the ProgramNodeInterfaceVisitor#visitURCapAs(Object, int, int) method must be implemented.

The ProgramNodeInterfaceVisitor can be used when targeting AuboCap program nodes implementing the (generic) type parameter specified in ProgramNodeInterfaceVisitor (see also ProgramNode#getAs(Class)).

Note that this method is sometimes called accept() in the Visitor software design pattern.

Parameters
nodeVisitorthe instance callbacks are made to.
Returns
0 for normal exit. non-zero for exception or error causing premature exit.

Friends And Related Function Documentation

friend class DataSwitch
friend

Definition at line 217 of file tree_node.h.

Member Data Documentation

void* arcs::aubo_scope::TreeNode::d_ { nullptr }
private

Definition at line 219 of file tree_node.h.


The documentation for this class was generated from the following file: