]> git.mxchange.org Git - flightgear.git/blobdiff - src/Viewer/viewmgr.cxx
Reset: uninstall deletion-manager
[flightgear.git] / src / Viewer / viewmgr.cxx
index 77c20ab0ef5d1b66fccca2bebf2b1ddc83d703ed..6d7035777efd3b9ba9b7ab18db3b6d138e2d4dba 100644 (file)
@@ -45,10 +45,13 @@ FGViewMgr::FGViewMgr( void ) :
   current_view_orientation(SGQuatd::zeros()),
   current_view_or_offset(SGQuatd::zeros())
 {
+  globals->set_viewmgr(this);
 }
 
 // Destructor
-FGViewMgr::~FGViewMgr( void ) {
+FGViewMgr::~FGViewMgr( void )
+{
+  globals->set_viewmgr(NULL);
 }
 
 void
@@ -138,9 +141,21 @@ FGViewMgr::init ()
   do_bind();
 }
 
+void
+FGViewMgr::shutdown()
+{
+    if (!inited) {
+        return;
+    }
+    
+    inited = false;
+}
+
 void
 FGViewMgr::reinit ()
 {
+  int current_view_index = current;
+
   // reset offsets and fov to configuration defaults
   for (unsigned int i = 0; i < config_list.size(); i++) {
     SGPropertyNode *n = config_list[i];
@@ -172,7 +187,7 @@ FGViewMgr::reinit ()
     fgSetDouble("/sim/current-view/target-z-offset-m",
         n->getDoubleValue("config/target-z-offset-m"));
   }
-  setView(0);
+  setView(current_view_index);
 }
 
 typedef double (FGViewMgr::*double_getter)() const;
@@ -216,7 +231,12 @@ FGViewMgr::do_bind()
 
   _tiedProperties.Tie("view-number", this,
                       &FGViewMgr::getView, &FGViewMgr::setView);
-  fgSetArchivable("/sim/current-view/view-number", false);
+  SGPropertyNode* view_number =
+    _tiedProperties.getRoot()->getNode("view-number");
+  view_number->setAttribute(SGPropertyNode::ARCHIVE, false);
+
+  // Keep view on reset/reinit
+  view_number->setAttribute(SGPropertyNode::PRESERVE, true);
 
   _tiedProperties.Tie("axes/long", this,
                       (double_getter)0, &FGViewMgr::setViewAxisLong);
@@ -280,6 +300,8 @@ void
 FGViewMgr::unbind ()
 {
   _tiedProperties.Untie();
+    config_list.clear();
+    view_number.clear();
 }
 
 void