Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_node_facade.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2007 Boudewijn Rempt <boud@valdyas.org>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
7#include "kis_node_facade.h"
9#include <kis_debug.h>
10
11struct Q_DECL_HIDDEN KisNodeFacade::Private
12{
13public:
15};
16
18 : m_d(new Private())
19{
20}
21
23 : m_d(new Private())
24{
25 m_d->root = root;
26}
27
31
33{
34 m_d->root = root;
35}
36
38{
39 return m_d->root;
40}
41
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}
71
72bool KisNodeFacade::moveNode(KisNodeSP node, KisNodeSP parent, quint32 newIndex)
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}
90
91
92bool KisNodeFacade::addNode(KisNodeSP node, KisNodeSP parent, KisNodeAdditionFlags flags)
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}
103
104bool KisNodeFacade::addNode(KisNodeSP node, KisNodeSP parent, KisNodeSP aboveThis, KisNodeAdditionFlags flags)
105{
106 if (!node) return false;
107 if (!parent) return false;
108
109 return parent->add(node, aboveThis, flags);
110}
111
112bool KisNodeFacade::addNode(KisNodeSP node, KisNodeSP parent, quint32 index, KisNodeAdditionFlags flags)
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}
124
126{
127 if (!node) return false;
128 if (!node->parent()) return false;
129
130 return node->parent()->remove(node);
131
132}
133
#define dbgImage
Definition kis_debug.h:46
bool addNode(KisNodeSP node, KisNodeSP parent=KisNodeSP(), KisNodeAdditionFlags flags=KisNodeAdditionFlag::None)
void setRoot(KisNodeSP root)
bool moveNode(KisNodeSP node, KisNodeSP parent, KisNodeSP aboveThis)
QScopedPointer< Private > m_d
bool removeNode(KisNodeSP node)
virtual ~KisNodeFacade()
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
KisNodeWSP parent
Definition kis_node.cpp:86
KisNodeSP lastChild() const
Definition kis_node.cpp:367
KisNodeGraphListener * graphListener
Definition kis_node.cpp:87