]> git.mxchange.org Git - flightgear.git/blobdiff - src/Instrumentation/mk_viii.hxx
James Turner:
[flightgear.git] / src / Instrumentation / mk_viii.hxx
index 4969a137d65707948882a1324dd6ccca13521256..d3d581e649fab712108fae749b8da0402a0903eb 100755 (executable)
@@ -32,9 +32,9 @@
 #include <simgear/sound/sample_openal.hxx>
 #include <simgear/structure/subsystem_mgr.hxx>
 
-SG_USING_STD(vector);
-SG_USING_STD(deque);
-SG_USING_STD(map);
+using std::vector;
+using std::deque;
+using std::map;
 
 #include "Airports/runways.hxx"
 #include "Airports/simple.hxx"
@@ -181,37 +181,37 @@ class MK_VIII : public SGSubsystem
   {
     MK_VIII *mk;
 
-    vector<SGPropertyNode *> tied_properties;
+    vector<SGPropertyNode_ptr> tied_properties;
 
   public:
     struct
     {
-      SGPropertyNode *ai_caged;
-      SGPropertyNode *ai_roll;
-      SGPropertyNode *ai_serviceable;
-      SGPropertyNode *altimeter_altitude;
-      SGPropertyNode *altimeter_serviceable;
-      SGPropertyNode *altitude;
-      SGPropertyNode *altitude_agl;
-      SGPropertyNode *asi_serviceable;
-      SGPropertyNode *asi_speed;
-      SGPropertyNode *autopilot_heading_lock;
-      SGPropertyNode *flaps;
-      SGPropertyNode *gear_down;
-      SGPropertyNode *latitude;
-      SGPropertyNode *longitude;
-      SGPropertyNode *nav0_cdi_serviceable;
-      SGPropertyNode *nav0_gs_distance;
-      SGPropertyNode *nav0_gs_needle_deflection;
-      SGPropertyNode *nav0_gs_serviceable;
-      SGPropertyNode *nav0_has_gs;
-      SGPropertyNode *nav0_heading_needle_deflection;
-      SGPropertyNode *nav0_in_range;
-      SGPropertyNode *nav0_nav_loc;
-      SGPropertyNode *nav0_serviceable;
-      SGPropertyNode *power;
-      SGPropertyNode *replay_state;
-      SGPropertyNode *vs;
+      SGPropertyNode_ptr ai_caged;
+      SGPropertyNode_ptr ai_roll;
+      SGPropertyNode_ptr ai_serviceable;
+      SGPropertyNode_ptr altimeter_altitude;
+      SGPropertyNode_ptr altimeter_serviceable;
+      SGPropertyNode_ptr altitude;
+      SGPropertyNode_ptr altitude_agl;
+      SGPropertyNode_ptr asi_serviceable;
+      SGPropertyNode_ptr asi_speed;
+      SGPropertyNode_ptr autopilot_heading_lock;
+      SGPropertyNode_ptr flaps;
+      SGPropertyNode_ptr gear_down;
+      SGPropertyNode_ptr latitude;
+      SGPropertyNode_ptr longitude;
+      SGPropertyNode_ptr nav0_cdi_serviceable;
+      SGPropertyNode_ptr nav0_gs_distance;
+      SGPropertyNode_ptr nav0_gs_needle_deflection;
+      SGPropertyNode_ptr nav0_gs_serviceable;
+      SGPropertyNode_ptr nav0_has_gs;
+      SGPropertyNode_ptr nav0_heading_needle_deflection;
+      SGPropertyNode_ptr nav0_in_range;
+      SGPropertyNode_ptr nav0_nav_loc;
+      SGPropertyNode_ptr nav0_serviceable;
+      SGPropertyNode_ptr power;
+      SGPropertyNode_ptr replay_state;
+      SGPropertyNode_ptr vs;
     } external_properties;
 
     inline PropertiesHandler (MK_VIII *device)
@@ -232,10 +232,16 @@ class MK_VIII : public SGSubsystem
       tie(node->getNode(relative_path, true), raw_value);
     }
 
+    PropertiesHandler() {};
+
     void init ();
     void unbind ();
   };
 
+public:
+  PropertiesHandler     properties_handler;
+
+private:
   /////////////////////////////////////////////////////////////////////////////
   // MK_VIII::PowerHandler ////////////////////////////////////////////////////
   /////////////////////////////////////////////////////////////////////////////
@@ -431,6 +437,7 @@ class MK_VIII : public SGSubsystem
   // MK_VIII::IOHandler ///////////////////////////////////////////////////////
   /////////////////////////////////////////////////////////////////////////////
 
+public:
   class IOHandler
   {
   public:
@@ -604,6 +611,8 @@ class MK_VIII : public SGSubsystem
 
     void bind (SGPropertyNode *node);
 
+    MK_VIII *mk;
+
   private:
 
     ///////////////////////////////////////////////////////////////////////////
@@ -612,7 +621,8 @@ class MK_VIII : public SGSubsystem
 
     class TerrainClearanceFilter
     {
-      deque< Sample<double> >  samples;
+      typedef deque< Sample<double> > samples_type;
+      samples_type             samples;
       double                   value;
 
     public:
@@ -627,8 +637,6 @@ class MK_VIII : public SGSubsystem
     // MK_VIII::IOHandler (continued) /////////////////////////////////////////
     ///////////////////////////////////////////////////////////////////////////
 
-    MK_VIII *mk;
-
     TerrainClearanceFilter terrain_clearance_filter;
 
     Lamp       _lamp;
@@ -647,7 +655,8 @@ class MK_VIII : public SGSubsystem
     bool last_landing_gear;
     bool last_real_flaps_down;
 
-    deque< Sample< Parameter<double> > > altitude_samples;
+    typedef deque< Sample< Parameter<double> > > altitude_samples_type;
+    altitude_samples_type altitude_samples;
 
     struct
     {
@@ -678,6 +687,8 @@ class MK_VIII : public SGSubsystem
                     const char *name,
                     int *output);
 
+  public:
+
     bool get_discrete_input (bool *ptr) const;
     void set_discrete_input (bool *ptr, bool value);
 
@@ -736,10 +747,10 @@ class MK_VIII : public SGSubsystem
        inline SampleElement (SGSoundSample *sample, double volume = 1.0)
          : _sample(sample), _volume(volume) { silence = false; }
 
-       virtual inline void play (double volume) { set_volume(volume); _sample->play_once(); }
-       virtual inline void stop () { _sample->stop(); }
-       virtual inline bool is_playing () { return _sample->is_playing(); }
-       virtual inline void set_volume (double volume) { _sample->set_volume(volume * _volume); }
+        virtual inline void play (double volume) { if (_sample) { set_volume(volume); _sample->play_once(); } }
+       virtual inline void stop () { if (_sample) _sample->stop(); }
+        virtual inline bool is_playing () { return _sample ? _sample->is_playing() : false; }
+       virtual inline void set_volume (double volume) { if (_sample) _sample->set_volume(volume * _volume); }
       };
 
       /////////////////////////////////////////////////////////////////////////
@@ -860,7 +871,7 @@ class MK_VIII : public SGSubsystem
 
     inline void bind (SGPropertyNode *node) { speaker.bind(node); }
 
-  private:
+  public:
 
     ///////////////////////////////////////////////////////////////////////////
     // MK_VIII::VoicePlayer::Speaker //////////////////////////////////////////
@@ -890,13 +901,13 @@ class MK_VIII : public SGSubsystem
            &MK_VIII::VoicePlayer::Speaker::set_property));
       }
 
+    public:
       template <class T>
       inline void set_property (T *ptr, T value) { *ptr = value; update_configuration(); }
 
       template <class T>
       inline T get_property (T *ptr) const { return *ptr; }
 
-    public:
       double volume;
 
       inline Speaker (VoicePlayer *_player)
@@ -917,6 +928,7 @@ class MK_VIII : public SGSubsystem
       void update_configuration ();
     };
 
+  private:
     ///////////////////////////////////////////////////////////////////////////
     // MK_VIII::VoicePlayer (continued) ///////////////////////////////////////
     ///////////////////////////////////////////////////////////////////////////
@@ -949,6 +961,7 @@ class MK_VIII : public SGSubsystem
     inline void make_voice (Voice **voice, T1 e1, T2 e2, T3 e3, T4 e4) { make_voice(voice, e1, e2, e3); append(*voice, e4); }
   };
 
+private:
   /////////////////////////////////////////////////////////////////////////////
   // MK_VIII::SelfTestHandler /////////////////////////////////////////////////
   /////////////////////////////////////////////////////////////////////////////
@@ -1491,6 +1504,18 @@ class MK_VIII : public SGSubsystem
     bool is_high_bank_angle ();
     unsigned int get_bank_angle_alerts ();
     void update_bank_angle ();
+    
+    class AirportFilter : public FGAirportSearchFilter
+    {
+    public: 
+      AirportFilter(Mode6Handler *s)
+        : self(s) {}
+        
+      virtual bool pass(FGAirport *a);
+      
+    private:
+      Mode6Handler* self;
+    };
   };
 
   /////////////////////////////////////////////////////////////////////////////
@@ -1539,7 +1564,6 @@ class MK_VIII : public SGSubsystem
     double get_azimuth_difference (const FGRunway *_runway);
 
     void select_runway (const FGAirport *airport, FGRunway *_runway);
-    bool test_airport (const FGAirport *airport);
     void update_runway ();
 
     void get_bias_area_edges (Position *edge,
@@ -1554,6 +1578,17 @@ class MK_VIII : public SGSubsystem
     bool is_tcf ();
     bool is_rfcf ();
 
+    class AirportFilter : public FGAirportSearchFilter
+    {
+    public: 
+      AirportFilter(MK_VIII *device)
+        : mk(device) {}
+        
+      virtual bool pass(FGAirport *a);
+      
+    private:
+      MK_VIII* mk;
+    };
   public:
     struct
     {
@@ -1573,7 +1608,6 @@ class MK_VIII : public SGSubsystem
   string       name;
   int          num;
 
-  PropertiesHandler    properties_handler;
   PowerHandler         power_handler;
   SystemHandler                system_handler;
   ConfigurationModule  configuration_module;