]> git.mxchange.org Git - flightgear.git/commitdiff
Remove static property dependencies
authorThorstenB <brehmt@gmail.com>
Sun, 18 Nov 2012 15:35:54 +0000 (16:35 +0100)
committerThorstenB <brehmt@gmail.com>
Sun, 18 Nov 2012 15:35:54 +0000 (16:35 +0100)
preventing us from wiping properties on reset/reinit/subsystem recreate.
(more work required for "native_gui" and "ATC-Outputs" protocols)

28 files changed:
src/ATC/atc_mgr.cxx
src/ATC/atc_mgr.hxx
src/ATC/atcdialog.cxx
src/ATC/trafficcontrol.cxx
src/Airports/groundnetwork.cxx
src/FDM/JSBSim/JSBSim.cxx
src/FDM/JSBSim/JSBSim.hxx
src/FDM/LaRCsim/LaRCsim.cxx
src/FDM/UIUCModel/uiuc_gear.cpp
src/GUI/gui_funcs.cxx
src/Instrumentation/heading_indicator_dg.cxx
src/Instrumentation/heading_indicator_fg.cxx
src/Instrumentation/mrg.cxx
src/Main/fg_commands.cxx
src/Main/fg_init.cxx
src/Main/fg_props.cxx
src/Main/fg_props.hxx
src/Main/main.cxx
src/Main/util.cxx
src/Network/ATC-Outputs.cxx
src/Network/atlas.cxx
src/Network/atlas.hxx
src/Network/native_gui.cxx
src/Time/light.cxx
src/Time/light.hxx
src/Viewer/FGEventHandler.cxx
src/Viewer/FGEventHandler.hxx
src/Viewer/renderer.cxx

index 28639c910a588de7e5a59ace17aa36b7114a4b43..67d53c9fc05fdcd72336badf2db3f548ca6e462c 100644 (file)
@@ -48,6 +48,8 @@ void FGATCManager::init() {
 
     int leg = 0;
 
+    trans_num = globals->get_props()->getNode("/sim/atc/transmission-num", true);
+
     // find a reasonable controller for our user's aircraft..
     // Let's start by working out the following three scenarios: 
     // Starting on ground at a parking position
@@ -259,8 +261,7 @@ void FGATCManager::update ( double time ) {
         //string airport = fgGetString("/sim/presets/airport-id");
         //FGAirport *apt = FGAirport::findByIdent(airport); 
         // AT this stage we should update the flightplan, so that waypoint incrementing is conducted as well as leg loading. 
-       static SGPropertyNode_ptr trans_num = globals->get_props()->getNode("/sim/atc/transmission-num", true);
-            int n = trans_num->getIntValue();
+        int n = trans_num->getIntValue();
         if (n == 1) {
             //cerr << "Toggling ground network visibility " << networkVisible << endl;
             networkVisible = !networkVisible;
index 0d9efa730b81bcffe139dae4a540441c783e34b9..f169e34153e1f76de96dace60a27e72f68181c78 100644 (file)
@@ -52,6 +52,7 @@ private:
   FGATCController *controller, *prevController; // The ATC controller that is responsible for the user's aircraft. 
   bool networkVisible;
   bool initSucceeded;
+  SGPropertyNode_ptr trans_num;
 
 public:
   FGATCManager();
@@ -61,4 +62,4 @@ public:
   void update(double time);
 };
   
-#endif // _ATC_MRG_HXX_
\ No newline at end of file
+#endif // _ATC_MRG_HXX_
index 98a8e70cbe1bcf38c73dbb60c63798a80026b061..13b93fb7ba7f6f265a6f6886c6dfecca7274b5a3 100644 (file)
@@ -286,14 +286,4 @@ void FGATCDialogNew::update(double dt) {
     } else {
         _gui->showDialog(dialog_name);
     }
-    //dialogVisible = !dialogVisible;
-    return;
-    /*
-    static SGPropertyNode_ptr trans_num = globals->get_props()->getNode("/sim/atc/transmission-num", true);
-    int n = trans_num->getIntValue();
-    if (n >= 0) {
-        trans_num->setIntValue(-1);
-           // PopupCallback(n);
-        cerr << "Selected transmission message" << n << endl;
-    } */
 }
index 7f1596a0059de31a2018f5d99cdb375edbd4becb..ecf4d1792173b8c8a48bbaa306f40498fca3db30 100644 (file)
@@ -1190,7 +1190,7 @@ bool FGStartupController::checkTransmissionState(int st, time_t now, time_t star
         if ((msgDir == ATC_AIR_TO_GROUND) && isUserAircraft(i->getAircraft())) {
 
             //cerr << "Checking state " << st << " for " << i->getAircraft()->getCallSign() << endl;
-            static SGPropertyNode_ptr trans_num = globals->get_props()->getNode("/sim/atc/transmission-num", true);
+            SGPropertyNode_ptr trans_num = globals->get_props()->getNode("/sim/atc/transmission-num", true);
             int n = trans_num->getIntValue();
             if (n == 0) {
                 trans_num->setIntValue(-1);
index fe4d2e75b7050a5d639afac5db9388df026a9d12..62d229f687dd183ee061b2bbfd8dbce88c2ad4a1 100644 (file)
@@ -567,7 +567,7 @@ bool FGGroundNetwork::checkTransmissionState(int minState, int maxState, Traffic
     if ((state >= minState) && (state <= maxState) && available) {
         if ((msgDir == ATC_AIR_TO_GROUND) && isUserAircraft(i->getAircraft())) {
             //cerr << "Checking state " << state << " for " << i->getAircraft()->getCallSign() << endl;
-            static SGPropertyNode_ptr trans_num = globals->get_props()->getNode("/sim/atc/transmission-num", true);
+            SGPropertyNode_ptr trans_num = globals->get_props()->getNode("/sim/atc/transmission-num", true);
             int n = trans_num->getIntValue();
             if (n == 0) {
                 trans_num->setIntValue(-1);
index d67e571946bb0e0478fb4bc2f6d12dd5c960344b..95c282bef6d92a366b1caa9949da972543fac377 100644 (file)
@@ -328,6 +328,7 @@ FGJSBsim::FGJSBsim( double dt )
     ab_brake_left_pct = fgGetNode("/autopilot/autobrake/brake-left-output", true);
     ab_brake_right_pct = fgGetNode("/autopilot/autobrake/brake-right-output", true);
     
+    altitude = fgGetNode("/position/altitude-ft");
     temperature = fgGetNode("/environment/temperature-degc",true);
     pressure = fgGetNode("/environment/pressure-inhg",true);
     pressureSL = fgGetNode("/environment/pressure-sea-level-inhg",true);
@@ -1006,7 +1007,6 @@ bool FGJSBsim::ToggleDataLogging(bool state)
 //Positions
 void FGJSBsim::set_Latitude(double lat)
 {
-  static SGConstPropertyNode_ptr altitude = fgGetNode("/position/altitude-ft");
   double alt = altitude->getDoubleValue();
   double sea_level_radius_meters, lat_geoc;
 
index d6ba37430da28cd9de0b408f22d59db5e7b21f9d..8471ba1b4ca3e2201392fff11371174cbeaa1922 100644 (file)
@@ -271,6 +271,7 @@ private:
     SGPropertyNode_ptr wing_fold_pos_pct;
     SGPropertyNode_ptr tailhook_pos_pct;
 
+    SGConstPropertyNode_ptr altitude;
     SGPropertyNode_ptr temperature;
     SGPropertyNode_ptr pressure;
     SGPropertyNode_ptr pressureSL;
index 60f54a146fe6d4c38a804948586446dabe704595..e1bbb112751a9fef04673209c352ef05d6f415bd 100644 (file)
@@ -166,7 +166,7 @@ void FGLaRCsim::update( double dt ) {
        fgSetDouble("/engines/engine/running", eng.getRunningFlag());
        fgSetDouble("/engines/engine/cranking", eng.getCrankingFlag());
 
-       static const SGPropertyNode *fuel_freeze
+       const SGPropertyNode *fuel_freeze
            = fgGetNode("/sim/freeze/fuel");
 
        if ( ! fuel_freeze->getBoolValue() ) {
@@ -237,7 +237,7 @@ void FGLaRCsim::update( double dt ) {
        fgSetDouble("/engines/engine/running", eng.getRunningFlag());
        fgSetDouble("/engines/engine/cranking", eng.getCrankingFlag());
 
-       static const SGPropertyNode *fuel_freeze
+       const SGPropertyNode *fuel_freeze
            = fgGetNode("/sim/freeze/fuel");
 
        if ( ! fuel_freeze->getBoolValue() ) {
index 31a87d0b98493960bba9e929fa683f3901c26fbf..5cef35357095f3d54e46f4fec89fe8b382734d25 100644 (file)
@@ -274,14 +274,7 @@ void uiuc_gear()
          
          clear3(f_wheel_local_v);
          reaction_normal_force=0;
-#if 0
-         static const SGPropertyNode * gear_wow
-           = fgGetNode("/gear/gear[0]/wow", false);
-         static const SGPropertyNode * gear_wow1
-           = fgGetNode("/gear/gear[1]/wow", false);
-         static const SGPropertyNode * gear_wow2
-           = fgGetNode("/gear/gear[2]/wow", false);
-#endif
+
          fgSetBool("/gear/gear[0]/wow", false);
          fgSetBool("/gear/gear[1]/wow", false);
          fgSetBool("/gear/gear[2]/wow", false);
index 1da13da297f03124abd7ffe3210f6cf1c47ddca0..fa4488c420fcbde614d85ccdd53dff7575c7fe9b 100644 (file)
@@ -230,12 +230,11 @@ void fgHiResDump()
     char *filename = new char [24];
     static int count = 1;
 
-    static const SGPropertyNode *master_freeze
-        = fgGetNode("/sim/freeze/master");
+    SGPropertyNode *master_freeze = fgGetNode("/sim/freeze/master");
 
     bool freeze = master_freeze->getBoolValue();
     if ( !freeze ) {
-        fgSetBool("/sim/freeze/master", true);
+        master_freeze->setBoolValue(true);
     }
 
     fgSetBool("/sim/menubar/visibility", false);
@@ -416,7 +415,7 @@ void fgHiResDump()
     fgSetBool("/sim/menubar/visibility", menu_status);
 
     if ( !freeze ) {
-        fgSetBool("/sim/freeze/master", false);
+        master_freeze->setBoolValue(false);
     }
 }
 #endif // #if defined( TR_HIRES_SNAP)
@@ -558,11 +557,11 @@ bool fgDumpSnapShot ()
     return GUISnapShotOperation::start();
 #else
     // obsolete code => remove when new code is stable
-    static SGConstPropertyNode_ptr master_freeze = fgGetNode("/sim/freeze/master");
+    SGPropertyNode_ptr master_freeze = fgGetNode("/sim/freeze/master");
 
     bool freeze = master_freeze->getBoolValue();
     if ( !freeze ) {
-        fgSetBool("/sim/freeze/master", true);
+        master_freeze->setBoolValue(true);
     }
 
     int mouse = fgGetMouseCursor();
@@ -614,7 +613,7 @@ bool fgDumpSnapShot ()
     fgSetMouseCursor(mouse);
 
     if ( !freeze ) {
-        fgSetBool("/sim/freeze/master", false);
+        master_freeze->setBoolValue(false);
     }
     return result;
 #endif
@@ -627,12 +626,11 @@ void fgDumpSceneGraph()
     string message;
     static int count = 1;
 
-    static const SGPropertyNode *master_freeze
-       = fgGetNode("/sim/freeze/master");
+    SGPropertyNode *master_freeze = fgGetNode("/sim/freeze/master");
 
     bool freeze = master_freeze->getBoolValue();
     if ( !freeze ) {
-        fgSetBool("/sim/freeze/master", true);
+        master_freeze->setBoolValue(true);
     }
 
     while (count < 1000) {
@@ -658,7 +656,7 @@ void fgDumpSceneGraph()
     delete [] filename;
 
     if ( !freeze ) {
-        fgSetBool("/sim/freeze/master", false);
+        master_freeze->setBoolValue(false);
     }
 }
 
@@ -670,12 +668,11 @@ void fgDumpTerrainBranch()
     string message;
     static int count = 1;
 
-    static const SGPropertyNode *master_freeze
-       = fgGetNode("/sim/freeze/master");
+    SGPropertyNode *master_freeze = fgGetNode("/sim/freeze/master");
 
     bool freeze = master_freeze->getBoolValue();
     if ( !freeze ) {
-        fgSetBool("/sim/freeze/master", true);
+        master_freeze->setBoolValue(true);
     }
 
     while (count < 1000) {
@@ -701,26 +698,22 @@ void fgDumpTerrainBranch()
     delete [] filename;
 
     if ( !freeze ) {
-        fgSetBool("/sim/freeze/master", false);
+        master_freeze->setBoolValue(false);
     }
 }
 
 void fgPrintVisibleSceneInfoCommand()
 {
-    static const SGPropertyNode *master_freeze
-        = fgGetNode("/sim/freeze/master");
+    SGPropertyNode *master_freeze = fgGetNode("/sim/freeze/master");
 
     bool freeze = master_freeze->getBoolValue();
     if ( !freeze ) {
-        fgSetBool("/sim/freeze/master", true);
+        master_freeze->setBoolValue(true);
     }
 
     flightgear::printVisibleSceneInfo(globals->get_renderer());
 
     if ( !freeze ) {
-        fgSetBool("/sim/freeze/master", false);
+        master_freeze->setBoolValue(false);
     }
 }
-
-    
-
index 8966c0f3de8292c084bd673f007c63d3f53f2a97..0c5fdf879c9217543f43cfd90ee6a61fc8611629 100644 (file)
@@ -184,7 +184,7 @@ HeadingIndicatorDG::update (double dt)
 
                                  // calculate the difference between the indicated heading
                                  // and the selected heading for use with an autopilot
-    static SGPropertyNode *bnode
+    SGPropertyNode *bnode
         = fgGetNode( "/autopilot/settings/heading-bug-deg", false );
     if ( bnode ) {
         double diff = bnode->getDoubleValue() - heading;
index fc7bff442bf03bd803f2a9e0aa6443e6deeae6af..32332a3e1a648a257cabee0e140e8eaef96909e3 100644 (file)
@@ -160,7 +160,7 @@ HeadingIndicatorFG::update (double dt)
 
                                     // calculate the difference between the indicated heading
                                     // and the selected heading for use with an autopilot
-       static SGPropertyNode *bnode
+       SGPropertyNode *bnode
         = fgGetNode( "/autopilot/settings/heading-bug-deg", false );
        double diff = 0;
        if ( bnode ){
index 1eb1f239441761a08b2e6d493172bb6767f26fb5..8a77fc175263a6b6044bc6358c77713bddfac5eb 100644 (file)
@@ -233,7 +233,7 @@ MasterReferenceGyro::update (double dt)
     indicated_hdg_rate = _last_yaw_rate;
     // calculate the difference between the indicated heading
     // and the selected heading for use with an autopilot
-    static SGPropertyNode *bnode
+    SGPropertyNode *bnode
         = fgGetNode( "/autopilot/settings/heading-bug-deg", false );
 
     if ( bnode ) {
index f32c29b5757bc1676c2e2e6f8c10f1cf46a01710..746664f2608ca7d255d1b2029d9f4bc4d51c2b7e 100644 (file)
@@ -465,18 +465,17 @@ do_hires_screen_capture (const SGPropertyNode * arg)
 static bool
 do_tile_cache_reload (const SGPropertyNode * arg)
 {
-    static const SGPropertyNode *master_freeze
-       = fgGetNode("/sim/freeze/master");
+    SGPropertyNode *master_freeze = fgGetNode("/sim/freeze/master");
     bool freeze = master_freeze->getBoolValue();
     SG_LOG(SG_INPUT, SG_INFO, "ReIniting TileCache");
     if ( !freeze ) {
-       fgSetBool("/sim/freeze/master", true);
+        master_freeze->setBoolValue(true);
     }
 
     globals->get_subsystem("tile-manager")->reinit();
 
     if ( !freeze ) {
-       fgSetBool("/sim/freeze/master", false);
+        master_freeze->setBoolValue(false);
     }
     return true;
 }
index f7c591d397dc3e17d66307259293b54a2bc4cf66..4abac9a31a498d28c2d3f5979581387282eee2df 100644 (file)
@@ -793,15 +793,14 @@ void fgPostInitSubsystems()
 // Reset: this is what the 'reset' command (and hence, GUI) is attached to
 void fgReInitSubsystems()
 {
-    static const SGPropertyNode *master_freeze
-        = fgGetNode("/sim/freeze/master");
+    SGPropertyNode *master_freeze = fgGetNode("/sim/freeze/master");
 
     SG_LOG( SG_GENERAL, SG_INFO, "fgReInitSubsystems()");
 
 // setup state to begin re-init
     bool freeze = master_freeze->getBoolValue();
     if ( !freeze ) {
-        fgSetBool("/sim/freeze/master", true);
+        master_freeze->setBoolValue(true);
     }
     
     fgSetBool("/sim/signals/reinit", true);
@@ -846,7 +845,7 @@ void fgReInitSubsystems()
 // setup state to end re-init
     fgSetBool("/sim/signals/reinit", false);
     if ( !freeze ) {
-        fgSetBool("/sim/freeze/master", false);
+        master_freeze->setBoolValue(false);
     }
     fgSetBool("/sim/sceneryloaded",false);
 }
index 8f3036776db5d590a20dc3b5e0bfcf0267cb90ac..d8bda0f0829e9b67796f5f3a5f4b2a78a356c954 100644 (file)
@@ -376,14 +376,19 @@ setWindingCCW (bool state)
     glFrontFace ( GL_CW );
 }
 
-static const char *
-getLongitudeString ()
+////////////////////////////////////////////////////////////////////////
+// Tie the properties.
+////////////////////////////////////////////////////////////////////////
+SGConstPropertyNode_ptr FGProperties::_longDeg;
+SGConstPropertyNode_ptr FGProperties::_latDeg;
+SGConstPropertyNode_ptr FGProperties::_lonLatformat;
+
+const char *
+FGProperties::getLongitudeString ()
 {
-  static SGConstPropertyNode_ptr n = fgGetNode("/position/longitude-deg", true);
-  static SGConstPropertyNode_ptr f = fgGetNode("/sim/lon-lat-format", true);
   static char buf[32];
-  double d = n->getDoubleValue();
-  int format = f->getIntValue();
+  double d = _longDeg->getDoubleValue();
+  int format = _lonLatformat->getIntValue();
   char c = d < 0.0 ? 'W' : 'E';
 
   if (format == 0) {
@@ -411,14 +416,12 @@ getLongitudeString ()
   return buf;
 }
 
-static const char *
-getLatitudeString ()
+const char *
+FGProperties::getLatitudeString ()
 {
-  static SGConstPropertyNode_ptr n = fgGetNode("/position/latitude-deg", true);
-  static SGConstPropertyNode_ptr f = fgGetNode("/sim/lon-lat-format", true);
   static char buf[32];
-  double d = n->getDoubleValue();
-  int format = f->getIntValue();
+  double d = _latDeg->getDoubleValue();
+  int format = _lonLatformat->getIntValue();
   char c = d < 0.0 ? 'S' : 'N';
 
   if (format == 0) {
@@ -443,9 +446,6 @@ getLatitudeString ()
 
 
 \f
-////////////////////////////////////////////////////////////////////////
-// Tie the properties.
-////////////////////////////////////////////////////////////////////////
 
 FGProperties::FGProperties ()
 {
@@ -463,6 +463,31 @@ FGProperties::init ()
 void
 FGProperties::bind ()
 {
+  _longDeg      = fgGetNode("/position/longitude-deg", true);
+  _latDeg       = fgGetNode("/position/latitude-deg", true);
+  _lonLatformat = fgGetNode("/sim/lon-lat-format", true);
+
+  _offset = fgGetNode("/sim/time/local-offset", true);
+
+  // utc date/time
+  _uyear = fgGetNode("/sim/time/utc/year", true);
+  _umonth = fgGetNode("/sim/time/utc/month", true);
+  _uday = fgGetNode("/sim/time/utc/day", true);
+  _uhour = fgGetNode("/sim/time/utc/hour", true);
+  _umin = fgGetNode("/sim/time/utc/minute", true);
+  _usec = fgGetNode("/sim/time/utc/second", true);
+  _uwday = fgGetNode("/sim/time/utc/weekday", true);
+  _udsec = fgGetNode("/sim/time/utc/day-seconds", true);
+
+  // real local date/time
+  _ryear = fgGetNode("/sim/time/real/year", true);
+  _rmonth = fgGetNode("/sim/time/real/month", true);
+  _rday = fgGetNode("/sim/time/real/day", true);
+  _rhour = fgGetNode("/sim/time/real/hour", true);
+  _rmin = fgGetNode("/sim/time/real/minute", true);
+  _rsec = fgGetNode("/sim/time/real/second", true);
+  _rwday = fgGetNode("/sim/time/real/weekday", true);
+
   _tiedProperties.setRoot(globals->get_props());
 
   // Simulation
@@ -491,54 +516,39 @@ void
 FGProperties::unbind ()
 {
     _tiedProperties.Untie();
+
+    // drop static references to properties
+    _longDeg = 0;
+    _latDeg = 0;
+    _lonLatformat = 0;
 }
 
 void
 FGProperties::update (double dt)
 {
-    static SGPropertyNode_ptr offset = fgGetNode("/sim/time/local-offset", true);
-    offset->setIntValue(globals->get_time_params()->get_local_offset());
+    _offset->setIntValue(globals->get_time_params()->get_local_offset());
 
     // utc date/time
-    static SGPropertyNode_ptr uyear = fgGetNode("/sim/time/utc/year", true);
-    static SGPropertyNode_ptr umonth = fgGetNode("/sim/time/utc/month", true);
-    static SGPropertyNode_ptr uday = fgGetNode("/sim/time/utc/day", true);
-    static SGPropertyNode_ptr uhour = fgGetNode("/sim/time/utc/hour", true);
-    static SGPropertyNode_ptr umin = fgGetNode("/sim/time/utc/minute", true);
-    static SGPropertyNode_ptr usec = fgGetNode("/sim/time/utc/second", true);
-    static SGPropertyNode_ptr uwday = fgGetNode("/sim/time/utc/weekday", true);
-    static SGPropertyNode_ptr udsec = fgGetNode("/sim/time/utc/day-seconds", true);
-
     struct tm *u = globals->get_time_params()->getGmt();
-    uyear->setIntValue(u->tm_year + 1900);
-    umonth->setIntValue(u->tm_mon + 1);
-    uday->setIntValue(u->tm_mday);
-    uhour->setIntValue(u->tm_hour);
-    umin->setIntValue(u->tm_min);
-    usec->setIntValue(u->tm_sec);
-    uwday->setIntValue(u->tm_wday);
-
-    udsec->setIntValue(u->tm_hour * 3600 + u->tm_min * 60 + u->tm_sec);
-
+    _uyear->setIntValue(u->tm_year + 1900);
+    _umonth->setIntValue(u->tm_mon + 1);
+    _uday->setIntValue(u->tm_mday);
+    _uhour->setIntValue(u->tm_hour);
+    _umin->setIntValue(u->tm_min);
+    _usec->setIntValue(u->tm_sec);
+    _uwday->setIntValue(u->tm_wday);
+    _udsec->setIntValue(u->tm_hour * 3600 + u->tm_min * 60 + u->tm_sec);
 
     // real local date/time
-    static SGPropertyNode_ptr ryear = fgGetNode("/sim/time/real/year", true);
-    static SGPropertyNode_ptr rmonth = fgGetNode("/sim/time/real/month", true);
-    static SGPropertyNode_ptr rday = fgGetNode("/sim/time/real/day", true);
-    static SGPropertyNode_ptr rhour = fgGetNode("/sim/time/real/hour", true);
-    static SGPropertyNode_ptr rmin = fgGetNode("/sim/time/real/minute", true);
-    static SGPropertyNode_ptr rsec = fgGetNode("/sim/time/real/second", true);
-    static SGPropertyNode_ptr rwday = fgGetNode("/sim/time/real/weekday", true);
-
     time_t real = time(0);
     struct tm *r = localtime(&real);
-    ryear->setIntValue(r->tm_year + 1900);
-    rmonth->setIntValue(r->tm_mon + 1);
-    rday->setIntValue(r->tm_mday);
-    rhour->setIntValue(r->tm_hour);
-    rmin->setIntValue(r->tm_min);
-    rsec->setIntValue(r->tm_sec);
-    rwday->setIntValue(r->tm_wday);
+    _ryear->setIntValue(r->tm_year + 1900);
+    _rmonth->setIntValue(r->tm_mon + 1);
+    _rday->setIntValue(r->tm_mday);
+    _rhour->setIntValue(r->tm_hour);
+    _rmin->setIntValue(r->tm_min);
+    _rsec->setIntValue(r->tm_sec);
+    _rwday->setIntValue(r->tm_wday);
 }
 
 
index 023d4dbbff4c1f42db65f3f935b5e01c832c7b0b..81f4baffb571b2febebff1b0bc32525a9238ba4e 100644 (file)
@@ -30,6 +30,15 @@ public:
 
 private:
     simgear::TiedPropertyList _tiedProperties;
+
+    static const char* getLatitudeString ();
+    static const char* getLongitudeString ();
+
+    static SGConstPropertyNode_ptr _longDeg, _latDeg, _lonLatformat;
+
+    SGPropertyNode_ptr _offset;
+    SGPropertyNode_ptr _uyear, _umonth, _uday, _uhour, _umin, _usec, _uwday, _udsec;
+    SGPropertyNode_ptr _ryear, _rmonth, _rday, _rhour, _rmin, _rsec, _rwday, _rdsec;
 };
 
 
index 5455b31068ecbf196ee9ec4a423d05b75d968eec..f8b0fe0aac403ca8de42302c1b4d5f31c43b22f0 100644 (file)
@@ -75,13 +75,12 @@ using std::vector;
 // is initialized.
 extern int _bootstrap_OSInit;
 
+static SGPropertyNode_ptr frame_signal;
+
 // What should we do when we have nothing else to do?  Let's get ready
 // for the next move and update the display?
 static void fgMainLoop( void )
 {
-    static SGPropertyNode_ptr frame_signal
-        = fgGetNode("/sim/signals/frame", true);
-
     frame_signal->fireValueChanged();
 
     SG_LOG( SG_GENERAL, SG_DEBUG, "Running Main Loop");
@@ -264,6 +263,8 @@ static void fgIdleFunction ( void ) {
         // We've finished all our initialization steps, from now on we
         // run the main loop.
         fgSetBool("sim/sceneryloaded", false);
+        // stash current frame signal property
+        frame_signal = fgGetNode("/sim/signals/frame", true);
         fgRegisterIdleHandler( fgMainLoop );
     }
 }
index 9b5b3da8b148076cb969b2755dc6d8b8d71037ba..8efbb93fac80517ddf268d78175a1b4977f781fc 100644 (file)
@@ -129,16 +129,15 @@ fgUnescape (const char *s)
 // or an empty string otherwise.
 const char *fgValidatePath (const char *str, bool write)
 {
-    static SGPropertyNode_ptr r, w;
-    if (!r) {
-        r = fgGetNode("/sim/paths/validate/read", true);
-        r->setAttribute(SGPropertyNode::READ, true);
-        r->setAttribute(SGPropertyNode::WRITE, true);
-
-        w = fgGetNode("/sim/paths/validate/write", true);
-        w->setAttribute(SGPropertyNode::READ, true);
-        w->setAttribute(SGPropertyNode::WRITE, true);
-    }
+    SGPropertyNode_ptr r, w;
+    r = fgGetNode("/sim/paths/validate/read", true);
+    r->setAttribute(SGPropertyNode::READ, true);
+    r->setAttribute(SGPropertyNode::WRITE, true);
+
+    w = fgGetNode("/sim/paths/validate/write", true);
+    w->setAttribute(SGPropertyNode::READ, true);
+    w->setAttribute(SGPropertyNode::WRITE, true);
+
     SGPropertyNode *prop = write ? w : r;
     prop->setStringValue(str);
     const char *result = prop->getStringValue();
index 5930edb6578cc85a3d7c1b82cab5ee05bc82321b..becc423f19bb3e5c60e71dee518da7129b03f21a 100644 (file)
@@ -20,6 +20,7 @@
 //
 // $Id$
 
+// TODO FIXME Module still contains lots of "static SGPropertyNode"s below.
 
 #ifdef HAVE_CONFIG_H
 #  include <config.h>
index c48c3add732a6e65d0046f8a9ec4b5ae2993df31..29c4980fb16f041133b0ef54c05d144b828c1dc4 100644 (file)
 #include "atlas.hxx"
 
 
-FGAtlas::FGAtlas() {
-  fdm = new FlightProperties;
+FGAtlas::FGAtlas() :
+  length(0),
+  fdm(new FlightProperties)
+{
+  _adf_freq        = fgGetNode("/instrumentation/adf/frequencies/selected-khz", true);
+  _nav1_freq       = fgGetNode("/instrumentation/nav/frequencies/selected-mhz", true);
+  _nav1_sel_radial = fgGetNode("/instrumentation/nav/radials/selected-deg", true);
+  _nav2_freq       = fgGetNode("/instrumentation/nav[1]/frequencies/selected-mhz", true);
+  _nav2_sel_radial = fgGetNode("/instrumentation/nav[1]/radials/selected-deg", true);
 }
 
 FGAtlas::~FGAtlas() {
@@ -71,18 +78,6 @@ static char calc_atlas_cksum(char *sentence) {
 // generate Atlas message
 bool FGAtlas::gen_message() {
     // cout << "generating atlas message" << endl;
-
-    static SGPropertyNode *adf_freq
-        = fgGetNode("/instrumentation/adf/frequencies/selected-khz", true);
-    static SGPropertyNode *nav1_freq
-        = fgGetNode("/instrumentation/nav/frequencies/selected-mhz", true);
-    static SGPropertyNode *nav1_sel_radial
-        = fgGetNode("/instrumentation/nav/radials/selected-deg", true);
-    static SGPropertyNode *nav2_freq
-        = fgGetNode("/instrumentation/nav[1]/frequencies/selected-mhz", true);
-    static SGPropertyNode *nav2_sel_radial
-        = fgGetNode("/instrumentation/nav[1]/radials/selected-deg", true);
-
     char rmc[256], gga[256], patla[256];
     char rmc_sum[10], gga_sum[10], patla_sum[10];
     char dir;
@@ -146,11 +141,11 @@ bool FGAtlas::gen_message() {
     sprintf( gga_sum, "%02X", calc_atlas_cksum(gga) );
 
     sprintf( patla, "PATLA,%.2f,%.1f,%.2f,%.1f,%.0f",
-            nav1_freq->getDoubleValue(),
-            nav1_sel_radial->getDoubleValue(),
-            nav2_freq->getDoubleValue(),
-            nav2_sel_radial->getDoubleValue(),
-            adf_freq->getDoubleValue() );
+             _nav1_freq->getDoubleValue(),
+             _nav1_sel_radial->getDoubleValue(),
+             _nav2_freq->getDoubleValue(),
+             _nav2_sel_radial->getDoubleValue(),
+             _adf_freq->getDoubleValue() );
     sprintf( patla_sum, "%02X", calc_atlas_cksum(patla) );
 
     SG_LOG( SG_IO, SG_DEBUG, rmc );
index f73a14d7d56a75f157402192e055412ac15a7961..df211284f166febbfd30df3f9f05076166e548fa 100644 (file)
@@ -30,6 +30,7 @@
 #include <string>
 
 #include "protocol.hxx"
+#include <simgear/props/props.hxx>
 
 class FlightProperties;
 
@@ -38,7 +39,8 @@ class FGAtlas : public FGProtocol {
     char buf[ FG_MAX_MSG_SIZE ];
     int length;
     FlightProperties* fdm;
-    
+    SGPropertyNode_ptr _adf_freq, _nav1_freq,_nav1_sel_radial, _nav2_freq, _nav2_sel_radial;
+
 public:
 
     FGAtlas();
index 720b08dba6c9167717c41578b6ce47e92cffd0a5..e78ac47ffc79e64de9990eecd3d006cefafd030f 100644 (file)
@@ -20,6 +20,7 @@
 //
 // $Id$
 
+// TODO FIXME Module still contains lots of "static SGPropertyNode"s below.
 
 #ifdef HAVE_CONFIG_H
 #  include <config.h>
index dc176ae6a9bc472ae17b76a4b3ccb6687029eafb..5ccbcff278e6a66afb3ce5ae3aade250148ff47c 100644 (file)
@@ -151,6 +151,7 @@ void FGLight::bind () {
 
     _sunAngleRad = prop->getNode("/sim/time/sun-angle-rad", true);
     _sunAngleRad->setDoubleValue(_sun_angle);
+    _humidity = fgGetNode("/environment/relative-humidity", true);
 
     // Read Only
     tie(prop,"/rendering/scene/ambient/red",    SGRawValuePointer<float>(&_scene_ambient[0]));
@@ -210,8 +211,7 @@ void FGLight::update_sky_color () {
 
     // calculate lighting parameters based on sun's relative angle to
     // local up
-    static SGConstPropertyNode_ptr humidity = fgGetNode("/environment/relative-humidity");
-    float av = humidity->getFloatValue() * 45;
+    float av = _humidity->getFloatValue() * 45;
     float visibility_log = log(av)/11.0;
     float visibility_inv = (45000.0 - av)/45000.0;
 
index dd68c47410e41b4b6deffa9c0ee6b7e5f5192ff7..a1f1c8d795d998f48c01b04898171986f95736f5 100644 (file)
@@ -117,6 +117,8 @@ private:
   
     SGPropertyNode_ptr _sunAngleRad;
 
+    SGPropertyNode_ptr _humidity;
+
     simgear::TiedPropertyList _tiedProperties;
 
     /**
index 9951c00278d2060f87f61f63048540e3f5d14a52..1174adc6dd98f3d4266b7f6a908d3fb54436cadc 100644 (file)
@@ -83,6 +83,9 @@ FGEventHandler::FGEventHandler() :
 
     for (int i = 0; i < 128; i++)
         release_keys[i] = i;
+
+    _display = fgGetNode("/sim/rendering/on-screen-statistics", true);
+    _print = fgGetNode("/sim/rendering/print-statistics", true);
 }
 
 namespace
@@ -356,10 +359,7 @@ void FGEventHandler::handleKey(const osgGA::GUIEventAdapter& ea, int& key,
 
 void FGEventHandler::handleStats(osgGA::GUIActionAdapter& us)
 {
-    static SGPropertyNode_ptr display = fgGetNode("/sim/rendering/on-screen-statistics", true);
-    static SGPropertyNode_ptr print = fgGetNode("/sim/rendering/print-statistics", true);
-
-    int type = display->getIntValue() % osgViewer::StatsHandler::LAST;
+    int type = _display->getIntValue() % osgViewer::StatsHandler::LAST;
     if (type != statsType) {
         statsEvent->setKey(displayStatsKey);
         do {
@@ -371,13 +371,13 @@ void FGEventHandler::handleStats(osgGA::GUIActionAdapter& us)
             }
         } while (statsType != type);
 
-        display->setIntValue(statsType);
+        _display->setIntValue(statsType);
     }
 
-    if (print->getBoolValue()) {
+    if (_print->getBoolValue()) {
         statsEvent->setKey(printStatsKey);
         statsHandler->handle(*statsEvent, us);
-        print->setBoolValue(false);
+        _print->setBoolValue(false);
     }
 }
 
index 2e38c411c38acc31d0878e90fbf9bbfca0f160ef..59a25381afc518704b1c4cbb0121baffbdaf17c5 100644 (file)
@@ -120,6 +120,7 @@ protected:
     int release_keys[128];
     void handleStats(osgGA::GUIActionAdapter& us);
     bool changeStatsCameraRenderOrder;
+    SGPropertyNode_ptr _display, _print;
 };
 
 void eventToWindowCoords(const osgGA::GUIEventAdapter* ea, double& x, double& y);
index 8745d4189de38d4dd804df2d28c5661dd10df7c9..3f82a205209c7afb374295a76b451778eabdc938 100644 (file)
@@ -409,7 +409,6 @@ FGRenderer::FGRenderer() :
 #ifdef FG_JPEG_SERVER
    jpgRenderFrame = updateRenderer;
 #endif
-   eventHandler = new FGEventHandler;
 
    _numCascades = 4;
    _cascadeFar[0] = 5.f;
@@ -487,6 +486,8 @@ public:
 void
 FGRenderer::init( void )
 {
+    eventHandler = new FGEventHandler();
+
     sgUserDataInit( globals->get_props() );
 
     _classicalRenderer = !fgGetBool("/sim/rendering/rembrandt/enabled", false);