]> git.mxchange.org Git - flightgear.git/blob - src/Canvas/elements/group.cxx
Canvas: Add new element type map for geo mapping.
[flightgear.git] / src / Canvas / elements / group.cxx
1 // A group of 2D canvas elements
2 //
3 // Copyright (C) 2012  Thomas Geymayer <tomgey@gmail.com>
4 //
5 // This program is free software; you can redistribute it and/or
6 // modify it under the terms of the GNU General Public License as
7 // published by the Free Software Foundation; either version 2 of the
8 // License, or (at your option) any later version.
9 //
10 // This program is distributed in the hope that it will be useful, but
11 // WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13 // General Public License for more details.
14 //
15 // You should have received a copy of the GNU General Public License
16 // along with this program; if not, write to the Free Software
17 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
18
19 #include "group.hxx"
20 #include "map.hxx"
21 #include "path.hxx"
22 #include "text.hxx"
23
24 namespace canvas
25 {
26
27   //----------------------------------------------------------------------------
28   Group::Group(SGPropertyNode_ptr node):
29     Element(node)
30   {
31
32   }
33
34   //----------------------------------------------------------------------------
35   Group::~Group()
36   {
37
38   }
39
40   //----------------------------------------------------------------------------
41   void Group::update(double dt)
42   {
43     for( ChildMap::iterator child = _children.begin();
44          child != _children.end();
45          ++child )
46       child->second->update(dt);
47
48     Element::update(dt);
49   }
50
51   //----------------------------------------------------------------------------
52   void Group::childAdded(SGPropertyNode* child)
53   {
54     boost::shared_ptr<Element> element;
55
56     if( child->getNameString() == "text" )
57       element.reset( new Text(child) );
58     else if( child->getNameString() == "group" )
59       element.reset( new Group(child) );
60     else if( child->getNameString() == "map" )
61       element.reset( new Map(child) );
62     else if( child->getNameString() == "path" )
63       element.reset( new Path(child) );
64
65     if( !element )
66       return;
67
68     // Add to osg scene graph...
69     _transform->addChild( element->getMatrixTransform() );
70     _children[ child ] = element;
71   }
72
73   //----------------------------------------------------------------------------
74   void Group::childRemoved(SGPropertyNode* node)
75   {
76     if(    node->getNameString() == "text"
77         || node->getNameString() == "group"
78         || node->getNameString() == "map"
79         || node->getNameString() == "path" )
80     {
81       ChildMap::iterator child = _children.find(node);
82
83       if( child == _children.end() )
84         SG_LOG
85         (
86           SG_GL,
87           SG_WARN,
88           "can't removed unknown child " << node->getDisplayName()
89         );
90       else
91       {
92         _transform->removeChild( child->second->getMatrixTransform() );
93         _children.erase(child);
94       }
95     }
96   }
97
98 } // namespace canvas