]> git.mxchange.org Git - flightgear.git/commitdiff
allow to change/reload HUD by setting path in /sim/path/path[1]
authormfranz <mfranz>
Wed, 11 Mar 2009 19:10:12 +0000 (19:10 +0000)
committerTim Moore <timoore@redhat.com>
Wed, 18 Mar 2009 07:00:07 +0000 (08:00 +0100)
src/Instrumentation/HUD/HUD.cxx
src/Instrumentation/HUD/HUD.hxx

index 4f480b47e72dacccc5d8442bd07b6b1f8bbd057b..d199c3b30428bb8959e445f684fd4fcd64ac105e 100644 (file)
@@ -46,6 +46,7 @@ static float clamp(float f)
 
 
 HUD::HUD() :
+    _path(fgGetNode("/sim/hud/path[1]", "Huds/default.xml")),
     _current(fgGetNode("/sim/hud/current-color", true)),
     _visibility(fgGetNode("/sim/hud/visibility[1]", true)),
     _3DenabledN(fgGetNode("/sim/hud/enable3d[1]", true)),
@@ -72,10 +73,12 @@ HUD::HUD() :
     _font(0),
     _font_size(0.0),
     _style(0),
+    _listener_active(false),
     _clip_box(0)
 {
     SG_LOG(SG_COCKPIT, SG_INFO, "Initializing HUD Instrument");
 
+    _path->addChangeListener(this);
     _visibility->addChangeListener(this);
     _3DenabledN->addChangeListener(this);
     _antialiasing->addChangeListener(this);
@@ -95,6 +98,7 @@ HUD::HUD() :
 
 HUD::~HUD()
 {
+    _path->removeChangeListener(this);
     _visibility->removeChangeListener(this);
     _3DenabledN->removeChangeListener(this);
     _antialiasing->removeChangeListener(this);
@@ -134,7 +138,7 @@ void HUD::init()
     _font_renderer->setPointSize(_font_size);
     _text_list.setFont(_font_renderer);
 
-    load(fgGetString("/sim/hud/path[1]", "Huds/default.xml"));
+    _path->fireValueChanged();
 }
 
 
@@ -411,6 +415,12 @@ int HUD::load(const char *file, float x, float y, int level, const string& inden
 
 void HUD::valueChanged(SGPropertyNode *node)
 {
+    if (_listener_active)
+        return;
+    _listener_active = true;
+    if (!strcmp(node->getName(), "path"))
+        load(fgGetString("/sim/hud/path[1]", "Huds/default.xml"));
+
     if (!strcmp(node->getName(), "current-color")) {
         int i = node->getIntValue();
         if (i < 0)
@@ -450,6 +460,7 @@ void HUD::valueChanged(SGPropertyNode *node)
     _cl = clamp(_alpha_clamp->getFloatValue());
 
     _units = strcmp(_unitsN->getStringValue(), "feet") ? METER : FEET;
+    _listener_active = false;
 }
 
 
index c1a0e21a0a3b422d9acf69fb531969ef5edeaadf..4801ef94748679b9d74853f53f49bb72348fdb4b 100644 (file)
@@ -215,6 +215,7 @@ private:
     deque<Item *> _items;
     deque<Item *> _ladders;
 
+    SGPropertyNode_ptr _path;
     SGPropertyNode_ptr _current;
     SGPropertyNode_ptr _visibility;
     SGPropertyNode_ptr _3DenabledN;
@@ -240,6 +241,7 @@ private:
     fntTexFont *_font;
     float _font_size;
     int _style;
+    bool _listener_active;
 
     ClipBox *_clip_box;
     TextList _text_list;