Krita Source Code Documentation
Loading...
Searching...
No Matches
KisNodeFacade Class Reference

#include <kis_node_facade.h>

+ Inheritance diagram for KisNodeFacade:

Public Member Functions

bool addNode (KisNodeSP node, KisNodeSP parent, KisNodeSP aboveThis, KisNodeAdditionFlags flags=KisNodeAdditionFlag::None)
 
bool addNode (KisNodeSP node, KisNodeSP parent, quint32 index, KisNodeAdditionFlags flags=KisNodeAdditionFlag::None)
 
bool addNode (KisNodeSP node, KisNodeSP parent=KisNodeSP(), KisNodeAdditionFlags flags=KisNodeAdditionFlag::None)
 
 KisNodeFacade ()
 
 KisNodeFacade (KisNodeSP root)
 
bool moveNode (KisNodeSP node, KisNodeSP parent, KisNodeSP aboveThis)
 
bool moveNode (KisNodeSP node, KisNodeSP parent, quint32 index)
 
bool removeNode (KisNodeSP node)
 
const KisNodeSP root () const
 
void setRoot (KisNodeSP root)
 
virtual ~KisNodeFacade ()
 
- Public Member Functions inherited from Private
 Private (KisCanvas2 *c)
 

Public Attributes

KisNodeWSP root
 
- Public Attributes inherited from Private
KisCanvas2canvas
 
int displayedFrame
 
int intendedFrame
 

Private Attributes

QScopedPointer< Privatem_d
 

Detailed Description

KisNodeFacade is the public interface to adding and removing nodes.

Definition at line 11 of file kis_node_facade.cpp.

Constructor & Destructor Documentation

◆ KisNodeFacade() [1/2]

KisNodeFacade::KisNodeFacade ( )

Create a new, empty KisNodeFacade

Definition at line 17 of file kis_node_facade.cpp.

18 : m_d(new Private())
19{
20}
QScopedPointer< Private > m_d

◆ KisNodeFacade() [2/2]

KisNodeFacade::KisNodeFacade ( KisNodeSP root)

Create a new kisnodefacade for the given root.

Definition at line 22 of file kis_node_facade.cpp.

23 : m_d(new Private())
24{
25 m_d->root = root;
26}

References m_d, and root.

◆ ~KisNodeFacade()

KisNodeFacade::~KisNodeFacade ( )
virtual

Definition at line 28 of file kis_node_facade.cpp.

29{
30}

Member Function Documentation

◆ addNode() [1/3]

bool KisNodeFacade::addNode ( KisNodeSP node,
KisNodeSP parent,
KisNodeSP aboveThis,
KisNodeAdditionFlags flags = KisNodeAdditionFlag::None )

Add already existing node to the graph.

Parameters
nodethe node to be added
parentthe parent node
aboveThisin the list with child nodes of the specified parent, add this node above the specified sibling. if 0, the node is put in the lowermost position in its group. returns false if adding the node didn't work, true if the node got added

Definition at line 104 of file kis_node_facade.cpp.

105{
106 if (!node) return false;
107 if (!parent) return false;
108
109 return parent->add(node, aboveThis, flags);
110}
ChildIterator< value_type, is_const > parent(const ChildIterator< value_type, is_const > &it)
Definition KisForest.h:327

◆ addNode() [2/3]

bool KisNodeFacade::addNode ( KisNodeSP node,
KisNodeSP parent,
quint32 index,
KisNodeAdditionFlags flags = KisNodeAdditionFlag::None )

Adds the node as a child of the given parent at the specified index.

childCount() is a valid index and appends to the end. Fails and returns false if the node is already in this group or any other (remove it first.)

Definition at line 112 of file kis_node_facade.cpp.

113{
114 if (!node) return false;
115 if (!parent) return false;
116
117 if (index == parent->childCount())
118 return parent->add(node, parent->lastChild(), flags);
119 else if (index != 0)
120 return parent->add(node, parent->at(index), flags);
121 else
122 return parent->add(node, 0, flags);
123}

◆ addNode() [3/3]

bool KisNodeFacade::addNode ( KisNodeSP node,
KisNodeSP parent = KisNodeSP(),
KisNodeAdditionFlags flags = KisNodeAdditionFlag::None )

Add an already existing node to the image. The node is put on top of the nodes in the specified node group. If parent is 0, then the root is used as parent.

Parameters
nodethe node to be added
parentthe parent node

Definition at line 92 of file kis_node_facade.cpp.

93{
94 dbgImage << "Add node " << node << " to " << parent;
95 if (!node) return false;
96 if (!parent && !m_d->root) return false;
97
98 if (parent)
99 return parent->add(node, parent->lastChild(), flags);
100 else
101 return m_d->root->add(node, m_d->root->lastChild(), flags);
102}
#define dbgImage
Definition kis_debug.h:46

References dbgImage, KisNode::lastChild(), and m_d.

◆ moveNode() [1/2]

bool KisNodeFacade::moveNode ( KisNodeSP node,
KisNodeSP parent,
KisNodeSP aboveThis )

Move the given node to specified position. If the node already has a parent, it is removed from the parent's node list.

Definition at line 42 of file kis_node_facade.cpp.

43{
44 dbgImage << "moveNode " << node << " " << parent << " " << aboveThis;
45 if (!node) {
46 dbgImage << "cannot move null node"; return false;
47 }
48 if (!parent) {
49 dbgImage << "cannot move to null parent"; return false;
50 }
51 if (node == parent) {
52 dbgImage << "cannot move self inside self"; return false;
53 }
54 if (node == aboveThis) {
55 dbgImage << "cannot move self above self"; return false;
56 }
57 if (parent == aboveThis) {
58 dbgImage << "cannot move above parent"; return false;
59 }
60 if (!node->parent()) {
61 dbgImage << "node does not have a parent"; return false;
62 }
63
64 if (aboveThis && aboveThis->parent() != parent) {
65 dbgImage << "above this parent is not the parent"; return false;
66 }
67
68 int newIndex = aboveThis ? parent->index(aboveThis) + 1 : 0;
69 return moveNode(node, parent, newIndex);
70}
bool moveNode(KisNodeSP node, KisNodeSP parent, KisNodeSP aboveThis)
KisNodeWSP parent
Definition kis_node.cpp:86

References dbgImage, moveNode(), and KisNode::parent.

◆ moveNode() [2/2]

bool KisNodeFacade::moveNode ( KisNodeSP node,
KisNodeSP parent,
quint32 index )

Move the given node at the specified index. If the node already has a parent, it is removed from the parent's node list.

childCount() is a valid index and appends to the end.

Definition at line 72 of file kis_node_facade.cpp.

73{
74 dbgImage << "moveNode " << node << " " << parent << " " << newIndex;
75 int oldIndex = node->parent()->index(node);
76
77 if (node->graphListener())
78 node->graphListener()->aboutToMoveNode(node.data(), oldIndex, newIndex);
79 KisNodeSP aboveThis = parent->at(newIndex - 1);
80 if (aboveThis == node) return false;
81 if (node->parent()) {
82 if (!node->parent()->remove(node)) return false;
83 }
84 dbgImage << "moving node to " << newIndex;
85 bool success = addNode(node, parent, aboveThis);
86 if (node->graphListener())
87 node->graphListener()->nodeHasBeenMoved(node.data(), oldIndex, newIndex);
88 return success;
89}
bool addNode(KisNodeSP node, KisNodeSP parent=KisNodeSP(), KisNodeAdditionFlags flags=KisNodeAdditionFlag::None)
virtual void aboutToMoveNode(KisNode *node, int oldIndex, int newIndex)
virtual void nodeHasBeenMoved(KisNode *node, int oldIndex, int newIndex)
bool remove(quint32 index)
Definition kis_node.cpp:510
int index(const KisNodeSP node) const
Definition kis_node.cpp:432
KisNodeGraphListener * graphListener
Definition kis_node.cpp:87

References KisNodeGraphListener::aboutToMoveNode(), addNode(), KisSharedPtr< T >::data(), dbgImage, KisNode::graphListener, KisNode::index(), KisNodeGraphListener::nodeHasBeenMoved(), KisNode::parent, and KisNode::remove().

◆ removeNode()

bool KisNodeFacade::removeNode ( KisNodeSP node)

Remove the specified node.

Returns
false if removing the node failed

Definition at line 125 of file kis_node_facade.cpp.

126{
127 if (!node) return false;
128 if (!node->parent()) return false;
129
130 return node->parent()->remove(node);
131
132}

References KisNode::parent, and KisNode::remove().

◆ root()

const KisNodeSP KisNodeFacade::root ( ) const

Return the root node for the graph this facade managed

◆ setRoot()

void KisNodeFacade::setRoot ( KisNodeSP root)

Set the rootnode for this facade

Definition at line 32 of file kis_node_facade.cpp.

33{
34 m_d->root = root;
35}

References m_d, and root.

Member Data Documentation

◆ m_d

QScopedPointer<Private> KisNodeFacade::m_d
private

Definition at line 103 of file kis_node_facade.h.

◆ root

const KisNodeSP KisNodeFacade::root

Definition at line 14 of file kis_node_facade.cpp.


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