/
RootNode.cpp
112 lines (85 loc) · 2.15 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);
// Create a new namespace
_namespace = GlobalNamespaceFactory().createNamespace();
assert(_namespace);
_targetManager = GlobalEntityModule().createTargetManager();
assert(_targetManager);
_selectionGroupManager = GlobalSelectionGroupModule().createSelectionGroupManager();
assert(_selectionGroupManager);
_selectionSetManager = GlobalSelectionSetModule().createSelectionSetManager();
assert(_selectionSetManager);
_layerManager = GlobalLayerModule().createLayerManager(*this);
assert(_layerManager);
_undoSystem = GlobalUndoSystemFactory().createUndoSystem();
assert(_undoSystem);
_undoEventHandler = _undoSystem->signal_undoEvent().connect(
sigc::mem_fun(this, &RootNode::onUndoEvent)
);
}
RootNode::~RootNode()
{
_undoEventHandler.disconnect();
// 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;
}
selection::ISelectionSetManager& RootNode::getSelectionSetManager()
{
return *_selectionSetManager;
}
scene::ILayerManager& RootNode::getLayerManager()
{
return *_layerManager;
}
IUndoSystem& RootNode::getUndoSystem()
{
return *_undoSystem;
}
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);
}
} // namespace map