]> git.mxchange.org Git - flightgear.git/commitdiff
- remove unused ssgSelector
authormfranz <mfranz>
Mon, 20 Mar 2006 17:32:56 +0000 (17:32 +0000)
committermfranz <mfranz>
Mon, 20 Mar 2006 17:32:56 +0000 (17:32 +0000)
- add function to remove models

src/Model/modelmgr.cxx
src/Model/modelmgr.hxx

index 4d299fbabe8fc150e8c1ceb237d62df03c1ec9fb..86ae8c23baa340ae7835b775cd1867ae1b825c45 100644 (file)
@@ -28,8 +28,7 @@ SG_USING_STD(vector);
 
 FGModelMgr::FGModelMgr ()
   : _models(fgGetNode("/models", true)),
-    _listener(new Listener(this)),
-    _selector(new ssgSelector)
+    _listener(new Listener(this))
 
 {
   _models->addChangeListener(_listener);
@@ -69,6 +68,7 @@ FGModelMgr::add_model (SGPropertyNode * node)
   Instance * instance = new Instance;
   SGModelPlacement *model = new SGModelPlacement;
   instance->model = model;
+  instance->node = node;
   ssgBranch *object
       = sgLoad3DModel( globals->get_fg_root(),
                        node->getStringValue("path",
@@ -198,6 +198,7 @@ FGModelMgr::draw ()
 
 FGModelMgr::Instance::Instance ()
   : model(0),
+    node(0),
     lon_deg_node(0),
     lat_deg_node(0),
     elev_ft_node(0),
@@ -234,4 +235,28 @@ FGModelMgr::Listener::childAdded(SGPropertyNode * parent, SGPropertyNode * child
   }
 }
 
+void
+FGModelMgr::Listener::childRemoved(SGPropertyNode * parent, SGPropertyNode * child)
+{
+  if (strcmp(parent->getName(), "models") || strcmp(child->getName(), "model"))
+    return;
+
+  // search instance by node and remove it from scenegraph
+  vector<Instance *>::iterator it = _mgr->_instances.begin();
+  vector<Instance *>::iterator end = _mgr->_instances.end();
+
+  for (; it != end; ++it) {
+    Instance *instance = *it;
+    if (instance->node != child)
+      continue;
+
+    _mgr->_instances.erase(it);
+    globals->get_scenery()->get_scene_graph()
+        ->removeKid(instance->model->getSceneGraph());
+
+    delete instance;
+    break;
+  }
+}
+
 // end of modelmgr.cxx
index 0bb286b5de81a8c2cd929c33f4deb1a59974b8b7..b1956e3f61f441df5908a10f50d9688a77f71a87 100644 (file)
@@ -18,7 +18,6 @@
 SG_USING_STD(vector);
 
 // Don't pull in headers, since we don't need them here.
-class ssgSelector;
 class SGPropertyNode;
 class SGModelPlacement;
 
@@ -48,6 +47,7 @@ public:
     Instance ();
     virtual ~Instance ();
     SGModelPlacement * model;
+    SGPropertyNode_ptr node;
     SGPropertyNode_ptr lon_deg_node;
     SGPropertyNode_ptr lat_deg_node;
     SGPropertyNode_ptr elev_ft_node;
@@ -99,6 +99,7 @@ private:
   public:
     Listener(FGModelMgr *mgr) : _mgr(mgr) {}
     virtual void childAdded (SGPropertyNode * parent, SGPropertyNode * child);
+    virtual void childRemoved (SGPropertyNode * parent, SGPropertyNode * child);
 
   private:
     FGModelMgr * _mgr;
@@ -109,8 +110,6 @@ private:
 
   vector<Instance *> _instances;
 
-  ssgSharedPtr<ssgSelector> _selector;
-
 };
 
 #endif // __MODELMGR_HXX