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

#include <kis_node_dummies_graph.h>

Public Member Functions

void addNode (KisNodeDummy *node, KisNodeDummy *parent, KisNodeDummy *aboveThis)
 
bool containsNode (KisNodeSP node) const
 
int dummiesCount () const
 
 KisNodeDummiesGraph ()
 
void moveNode (KisNodeDummy *node, KisNodeDummy *parent, KisNodeDummy *aboveThis)
 
KisNodeDummynodeToDummy (KisNodeSP node)
 
void removeNode (KisNodeDummy *node)
 
KisNodeDummyrootDummy () const
 

Private Types

typedef QMap< KisNodeSP, KisNodeDummy * > NodeMap
 

Private Member Functions

void unmapDummyRecursively (KisNodeDummy *dummy)
 

Private Attributes

NodeMap m_dummiesMap
 
KisNodeDummym_rootDummy
 

Detailed Description

KisNodeDummiesGraph manages the hierarchy of dummy objects representing nodes in the UI environment.

Definition at line 83 of file kis_node_dummies_graph.h.

Member Typedef Documentation

◆ NodeMap

Definition at line 133 of file kis_node_dummies_graph.h.

Constructor & Destructor Documentation

◆ KisNodeDummiesGraph()

KisNodeDummiesGraph::KisNodeDummiesGraph ( )

Definition at line 106 of file kis_node_dummies_graph.cpp.

107 : m_rootDummy(0)
108{
109}

Member Function Documentation

◆ addNode()

void KisNodeDummiesGraph::addNode ( KisNodeDummy * node,
KisNodeDummy * parent,
KisNodeDummy * aboveThis )

Adds a dummy node to the position specified by parent and aboveThis.

It is not expected that you would add a dummy twice.

Definition at line 116 of file kis_node_dummies_graph.cpp.

117{
118 Q_ASSERT(!containsNode(node->node()));
119
120 node->setParent(parent);
121
122 Q_ASSERT_X(parent || !m_rootDummy, "KisNodeDummiesGraph::addNode", "Trying to add second root dummy");
123 Q_ASSERT_X(!parent || m_rootDummy, "KisNodeDummiesGraph::addNode", "Trying to add non-orphan child with no root dummy set");
124
125 if(!parent) {
126 m_rootDummy = node;
127 }
128 else {
129 int insertionIndex = parent->m_children.size();
130
131 insertionIndex = aboveThis ?
132 parent->m_children.indexOf(aboveThis) + 1: 0;
133
134 Q_ASSERT(!aboveThis || parent->m_children.indexOf(aboveThis) >= 0);
135
136 parent->m_children.insert(insertionIndex, node);
137 }
138
139 m_dummiesMap[node->node()] = node;
140}
bool containsNode(KisNodeSP node) const
KisNodeSP node() const
ChildIterator< value_type, is_const > parent(const ChildIterator< value_type, is_const > &it)
Definition KisForest.h:327

References containsNode(), m_dummiesMap, m_rootDummy, and KisNodeDummy::node().

◆ containsNode()

bool KisNodeDummiesGraph::containsNode ( KisNodeSP node) const

Definition at line 176 of file kis_node_dummies_graph.cpp.

177{
178 return m_dummiesMap.contains(node);
179}

References m_dummiesMap.

◆ dummiesCount()

int KisNodeDummiesGraph::dummiesCount ( ) const

Definition at line 181 of file kis_node_dummies_graph.cpp.

182{
183 return m_dummiesMap.size();
184}

References m_dummiesMap.

◆ moveNode()

void KisNodeDummiesGraph::moveNode ( KisNodeDummy * node,
KisNodeDummy * parent,
KisNodeDummy * aboveThis )

Moves a dummy node from its current position to the position specified by parent and aboveThis.

It is expected that the dummy node has been added to the graph with addNode() before calling this function.

Definition at line 170 of file kis_node_dummies_graph.cpp.

171{
172 removeNode(node);
173 addNode(node, parent, aboveThis);
174}
void removeNode(KisNodeDummy *node)
void addNode(KisNodeDummy *node, KisNodeDummy *parent, KisNodeDummy *aboveThis)

References addNode(), and removeNode().

◆ nodeToDummy()

KisNodeDummy * KisNodeDummiesGraph::nodeToDummy ( KisNodeSP node)

Definition at line 186 of file kis_node_dummies_graph.cpp.

187{
188 if (!m_dummiesMap.contains(node)) {
189 return 0;
190 }
191
192 return m_dummiesMap[node];
193}

References m_dummiesMap.

◆ removeNode()

void KisNodeDummiesGraph::removeNode ( KisNodeDummy * node)

Removes the dummy node from the graph.

WARNING: The dummy is only "unlinked" from the graph. Neither deletion of the node nor deletion of its children happens. The dummy keeps maintaining its children so after unlinking it from the graph you can just type to free memory recursively:

graph.removeNode(node);
delete node;

Definition at line 142 of file kis_node_dummies_graph.cpp.

143{
144 Q_ASSERT(containsNode(node->node()));
146
147 KisNodeDummy *parent = node->parent();
148 Q_ASSERT_X(m_rootDummy, "KisNodeDummiesGraph::removeNode", "Trying to remove a dummy with no root dummy");
149
150 if(!parent) {
151 m_rootDummy = 0;
152 }
153 else {
154 parent->m_children.removeOne(node);
155 }
156}
void unmapDummyRecursively(KisNodeDummy *dummy)
KisNodeDummy * parent() const

References containsNode(), m_rootDummy, KisNodeDummy::node(), KisNodeDummy::parent(), and unmapDummyRecursively().

◆ rootDummy()

KisNodeDummy * KisNodeDummiesGraph::rootDummy ( ) const

Returns the root dummy of the graph. Take it into account that root may be null, while the image is being switched.

Definition at line 111 of file kis_node_dummies_graph.cpp.

112{
113 return m_rootDummy;
114}

References m_rootDummy.

◆ unmapDummyRecursively()

void KisNodeDummiesGraph::unmapDummyRecursively ( KisNodeDummy * dummy)
private

Definition at line 158 of file kis_node_dummies_graph.cpp.

159{
160 m_dummiesMap.remove(dummy->node());
161
162 KisNodeDummy *child = dummy->firstChild();
163 while(child) {
165 child = child->nextSibling();
166 }
167}
KisNodeDummy * firstChild() const
KisNodeDummy * nextSibling() const

References KisNodeDummy::firstChild(), m_dummiesMap, KisNodeDummy::nextSibling(), KisNodeDummy::node(), and unmapDummyRecursively().

Member Data Documentation

◆ m_dummiesMap

NodeMap KisNodeDummiesGraph::m_dummiesMap
private

Definition at line 137 of file kis_node_dummies_graph.h.

◆ m_rootDummy

KisNodeDummy* KisNodeDummiesGraph::m_rootDummy
private

Definition at line 136 of file kis_node_dummies_graph.h.


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