/
RootNode.cpp
112 lines (85 loc) · 2.21 KB
/
RootNode.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#include "RootNode.h"
#include "inode.h"
namespace map
{
RootNode::RootNode(const std::string& name) :
_name(name)
{
// Apply root status to this node
setIsRoot(true);
GlobalUndoSystem().attachTracker(*this);
// Create a new namespace
_namespace = GlobalNamespaceFactory().createNamespace();
assert(_namespace);
_targetManager = GlobalEntityCreator().createTargetManager();
assert(_targetManager);
_selectionGroupManager = GlobalSelectionGroupModule().createSelectionGroupManager();
assert(_selectionGroupManager);
_layerManager = GlobalLayerModule().createLayerManager();
assert(_layerManager);
}
RootNode::~RootNode()
{
GlobalUndoSystem().detachTracker(*this);
// Remove all child nodes to trigger their destruction
removeAllChildNodes();
}
const INamespacePtr& RootNode::getNamespace()
{
return _namespace;
}
IMapFileChangeTracker& RootNode::getUndoChangeTracker()
{
return *this;
}
ITargetManager& RootNode::getTargetManager()
{
return *_targetManager;
}
selection::ISelectionGroupManager& RootNode::getSelectionGroupManager()
{
return *_selectionGroupManager;
}
scene::ILayerManager& RootNode::getLayerManager()
{
return *_layerManager;
}
std::string RootNode::name() const
{
return _name;
}
scene::INode::Type RootNode::getNodeType() const
{
return Type::MapRoot;
}
void RootNode::setName(const std::string& name)
{
_name = name;
}
void RootNode::onChildAdded(const scene::INodePtr& child)
{
// Insert this node into our namespace
_namespace->connect(child);
Node::onChildAdded(child);
}
void RootNode::onChildRemoved(const scene::INodePtr& child)
{
// Detach the node from our namespace
_namespace->disconnect(child);
Node::onChildRemoved(child);
}
void RootNode::onInsertIntoScene(IMapRootNode& root)
{
Node::onInsertIntoScene(root);
// A RootNode supports child entities, so connect
// the Node's TraversableNodeSet to the UndoSystem
Node::connectUndoSystem(root.getUndoChangeTracker());
}
void RootNode::onRemoveFromScene(IMapRootNode& root)
{
// A RootNode supports child entities, so disconnect
// the Node's TraversableNodeSet to the UndoSystem
Node::disconnectUndoSystem(root.getUndoChangeTracker());
Node::onRemoveFromScene(root);
}
} // namespace map