]> git.mxchange.org Git - flightgear.git/commitdiff
Updates from David Megginson relating to the property manager.
authorcurt <curt>
Sat, 30 Sep 2000 03:35:38 +0000 (03:35 +0000)
committercurt <curt>
Sat, 30 Sep 2000 03:35:38 +0000 (03:35 +0000)
src/Cockpit/cockpit.cxx
src/Cockpit/panel.cxx
src/Cockpit/panel.hxx
src/Cockpit/panel_io.cxx
src/Joystick/joystick.cxx
src/Main/bfi.cxx

index 6a9142b21c3bc6de44941b6d8bd54ac0f86fad92..c26c65e867f71cfd324afbe839729c8ec75e9c47 100644 (file)
@@ -524,5 +524,6 @@ void fgCockpitUpdate( void ) {
     
     xglViewport( 0, 0, iwidth, iheight );
 
-    current_panel->update();
+    if (current_panel != 0)
+      current_panel->update();
 }
index 8a5bb68b6fd1e986a182b2fc4fa0d12a455b5757..cf4a9baf9eb756913f5b2cdf6c4d1b2f8ae7a215 100644 (file)
@@ -112,6 +112,8 @@ FGCroppedTexture::getTexture ()
 ////////////////////////////////////////////////////////////////////////
 
 FGPanel * current_panel = NULL;
+static fntRenderer text_renderer;
+
 
 FGPanel::FGPanel (int x, int y, int w, int h)
   : _mouseDown(false),
@@ -365,15 +367,6 @@ FGPanelTransformation::FGPanelTransformation ()
 {
 }
 
-FGPanelTransformation::FGPanelTransformation (Type _type,
-                                             const SGValue * _value,
-                                             float _min, float _max,
-                                             float _factor, float _offset)
-  : type(_type), value(_value), min(_min), max(_max),
-    factor(_factor), offset(_offset)
-{
-}
-
 FGPanelTransformation::~FGPanelTransformation ()
 {
 }
@@ -628,50 +621,17 @@ FGTexturedLayer::draw ()
 }
 
 
-\f
-////////////////////////////////////////////////////////////////////////
-// Implementation of FGWindowLayer.
-////////////////////////////////////////////////////////////////////////
-
-FGWindowLayer::FGWindowLayer (int w, int h)
-  : FGTexturedLayer (w, h)
-{
-}
-
-FGWindowLayer::FGWindowLayer (const FGCroppedTexture &texture, int w, int h)
-  : FGTexturedLayer(texture, w, h)
-{
-}
-
-FGWindowLayer::~FGWindowLayer ()
-{
-}
-
-void
-FGWindowLayer::draw ()
-{
-  // doesn't do anything yet
-  FGTexturedLayer::draw();
-}
-
-
 \f
 ////////////////////////////////////////////////////////////////////////
 // Implementation of FGTextLayer.
 ////////////////////////////////////////////////////////////////////////
 
-FGTextLayer::FGTextLayer (int w, int h, Chunk * chunk1, Chunk * chunk2,
-                         Chunk * chunk3)
+FGTextLayer::FGTextLayer (int w, int h)
   : FGInstrumentLayer(w, h), _pointSize(14.0)
 {
+  _then.stamp();
   _color[0] = _color[1] = _color[2] = 0.0;
   _color[3] = 1.0;
-  if (chunk1)
-    addChunk(chunk1);
-  if (chunk2)
-    addChunk(chunk2);
-  if (chunk3)
-    addChunk(chunk3);
 }
 
 FGTextLayer::~FGTextLayer ()
@@ -689,19 +649,19 @@ FGTextLayer::draw ()
   glPushMatrix();
   glColor4fv(_color);
   transform();
-  _renderer.setFont(guiFntHandle);
-  _renderer.setPointSize(_pointSize);
-  _renderer.begin();
-  _renderer.start3f(0, 0, 0);
-
-                               // Render each of the chunks.
-  chunk_list::const_iterator it = _chunks.begin();
-  chunk_list::const_iterator last = _chunks.end();
-  for ( ; it != last; it++) {
-    _renderer.puts((char *)((*it)->getValue()));
+  text_renderer.setFont(guiFntHandle);
+  text_renderer.setPointSize(_pointSize);
+  text_renderer.begin();
+  text_renderer.start3f(0, 0, 0);
+
+  _now.stamp();
+  if (_now - _then > 100000) {
+    recalc_value();
+    _then = _now;
   }
+  text_renderer.puts((char *)(_value.c_str()));
 
-  _renderer.end();
+  text_renderer.end();
   glColor4f(1.0, 1.0, 1.0, 1.0);       // FIXME
   glPopMatrix();
 }
@@ -730,7 +690,19 @@ FGTextLayer::setPointSize (float size)
 void
 FGTextLayer::setFont(fntFont * font)
 {
-  _renderer.setFont(font);
+  text_renderer.setFont(font);
+}
+
+
+void
+FGTextLayer::recalc_value () const
+{
+  _value = "";
+  chunk_list::const_iterator it = _chunks.begin();
+  chunk_list::const_iterator last = _chunks.end();
+  for ( ; it != last; it++) {
+    _value += (*it)->getValue();
+  }
 }
 
 
index 70ff5c2a67e5c38addd45e52b7e43c411f83296c..85b035f6bc0dbaec6ddd06062b4819c4ee5f0f5a 100644 (file)
@@ -45,6 +45,8 @@
 #include <map>
 #include <plib/fnt.h>
 
+#include <Time/timestamp.hxx>
+
 FG_USING_STD(vector);
 FG_USING_STD(map);
 
@@ -343,9 +345,6 @@ public:
   };
 
   FGPanelTransformation ();
-  FGPanelTransformation (Type type, const SGValue * value,
-                        float min, float max,
-                        float factor, float offset);
   virtual ~FGPanelTransformation ();
 
   Type type;
@@ -413,7 +412,6 @@ protected:
 class FGLayeredInstrument : public FGPanelInstrument
 {
 public:
-  typedef vector<FGInstrumentLayer *> layer_list;
   FGLayeredInstrument (int x, int y, int w, int h);
   virtual ~FGLayeredInstrument ();
 
@@ -427,6 +425,7 @@ public:
   virtual void addTransformation (FGPanelTransformation * transformation);
 
 protected:
+  typedef vector<FGInstrumentLayer *> layer_list;
   layer_list _layers;
 };
 
@@ -460,34 +459,6 @@ private:
 };
 
 
-\f
-////////////////////////////////////////////////////////////////////////
-// A moving window on a texture.
-//
-// This layer automatically recrops a cropped texture based on
-// property values, creating a moving window over the texture.
-////////////////////////////////////////////////////////////////////////
-
-class FGWindowLayer : public FGTexturedLayer
-{
-public:
-  FGWindowLayer (int w = -1, int h = -1);
-  FGWindowLayer (const FGCroppedTexture &texture, int w = -1, int h = -1);
-  virtual ~FGWindowLayer ();
-
-  virtual void draw ();
-
-  virtual const SGValue * getXValue () const { return _xValue; }
-  virtual void setXValue (const SGValue * value) { _xValue = value; }
-  virtual const SGValue * getYValue () const { return _yValue; }
-  virtual void setYValue (const SGValue * value) { _yValue = value; }
-
-private:
-  const SGValue * _xValue;
-  const SGValue * _yValue;
-};
-
-
 \f
 ////////////////////////////////////////////////////////////////////////
 // A text layer of an instrument.
@@ -522,8 +493,7 @@ public:
     mutable char _buf[1024];
   };
 
-  FGTextLayer (int w = -1, int h = -1, Chunk * chunk1 = 0, Chunk * chunk2 = 0,
-              Chunk * chunk3 = 0);
+  FGTextLayer (int w = -1, int h = -1);
   virtual ~FGTextLayer ();
 
   virtual void draw ();
@@ -535,13 +505,18 @@ public:
   virtual void setFont (fntFont * font);
 
 private:
+
+  void recalc_value () const;
+
   typedef vector<Chunk *> chunk_list;
   chunk_list _chunks;
   float _color[4];
 
   float _pointSize;
-                               // FIXME: need only one globally
-  mutable fntRenderer _renderer;
+
+  mutable string _value;
+  mutable FGTimeStamp _then;
+  mutable FGTimeStamp _now;
 };
 
 
index 61e6e4f8717f86fa44f12dd406f4c1a6fae3e39f..8e550aee3a01e46d5cf1a699a821d023d0622d5f 100644 (file)
@@ -46,6 +46,53 @@ FG_USING_STD(ifstream);
 FG_USING_STD(string);
 
 
+\f
+////////////////////////////////////////////////////////////////////////
+// Default panel, instrument, and layer for when things go wrong...
+////////////////////////////////////////////////////////////////////////
+
+static FGCroppedTexture defaultTexture("Textures/default.rgb");
+
+
+/**
+ * Default layer: the default texture.
+ */
+class DefaultLayer : public FGTexturedLayer
+{
+public:
+  DefaultLayer () : FGTexturedLayer(defaultTexture)
+  {
+  }
+  
+};
+
+/**
+ * Default instrument: a single default layer.
+ */
+class DefaultInstrument : public FGLayeredInstrument
+{
+public:
+  DefaultInstrument (int x, int y, int w, int h)
+    : FGLayeredInstrument(x, y, w, h)
+  {
+    addLayer(new DefaultLayer());
+  }
+};
+
+
+/**
+ * Default panel: the default texture.
+ */
+class DefaultPanel : public FGPanel
+{
+public:
+  DefaultPanel (int x, int y, int w, int h) : FGPanel(x, y, w, h)
+  {
+    setBackground(defaultTexture.getTexture());
+  }
+};
+
+
 \f
 ////////////////////////////////////////////////////////////////////////
 // Built-in layer for the magnetic compass ribbon layer.
@@ -168,10 +215,10 @@ static FGCroppedTexture
 readTexture (SGPropertyNode node)
 {
   FGCroppedTexture texture(node.getStringValue("path"),
-                        node.getFloatValue("x1"),
-                        node.getFloatValue("y1"),
-                        node.getFloatValue("x2", 1.0),
-                        node.getFloatValue("y2", 1.0));
+                          node.getFloatValue("x1"),
+                          node.getFloatValue("y1"),
+                          node.getFloatValue("x2", 1.0),
+                          node.getFloatValue("y2", 1.0));
   FG_LOG(FG_INPUT, FG_INFO, "Read texture " << node.getName());
   return texture;
 }
@@ -575,12 +622,10 @@ readInstrument (SGPropertyNode node, int x, int y, int real_w, int real_h)
   if (real_w != -1) {
     hscale = float(real_w) / float(w);
     w = real_w;
-    cerr << "hscale is " << hscale << endl;
   }
   if (real_h != -1) {
     vscale = float(real_h) / float(h);
     h = real_h;
-    cerr << "vscale is " << hscale << endl;
   }
 
   FG_LOG(FG_INPUT, FG_INFO, "Reading instrument " << name);
@@ -598,7 +643,7 @@ readInstrument (SGPropertyNode node, int x, int y, int real_w, int real_h)
                                        hscale, vscale);
     if (action == 0) {
       delete instrument;
-      return 0;
+      return new DefaultInstrument(x, y, w, h);
     }
     instrument->addAction(action);
   }
@@ -613,7 +658,7 @@ readInstrument (SGPropertyNode node, int x, int y, int real_w, int real_h)
                                          hscale, vscale);
     if (layer == 0) {
       delete instrument;
-      return 0;
+      return new DefaultInstrument(x, y, w, h);
     }
     instrument->addLayer(layer);
   }
@@ -693,17 +738,14 @@ fgReadPanel (istream &input)
       return 0;
     }
 
-    if (!readPropertyList(path.str(), &props2)) {
-      delete panel;
-      return 0;
-    }
 
-    FGPanelInstrument * instrument =
-      readInstrument(SGPropertyNode("/", &props2), x, y, w, h);
+    FGPanelInstrument * instrument = 0;
+
+    if (readPropertyList(path.str(), &props2)) {
+      instrument = readInstrument(SGPropertyNode("/", &props2), x, y, w, h);
+    }
     if (instrument == 0) {
-      delete instrument;
-      delete panel;
-      return 0;
+      instrument = new DefaultInstrument(x, y, w, h);
     }
     panel->addInstrument(instrument);
   }
@@ -726,16 +768,19 @@ fgReadPanel (istream &input)
 FGPanel *
 fgReadPanel (const string &relative_path)
 {
+  FGPanel * panel = 0;
   FGPath path(current_options.get_fg_root());
   path.append(relative_path);
   ifstream input(path.c_str());
   if (!input.good()) {
     FG_LOG(FG_INPUT, FG_ALERT,
           "Cannot read panel configuration from " << path.str());
-    return 0;
+  } else {
+    panel = fgReadPanel(input);
+    input.close();
   }
-  FGPanel * panel = fgReadPanel(input);
-  input.close();
+  if (panel == 0)
+    panel = new DefaultPanel(0, 0, 1024, 768);
   return panel;
 }
 
index 3ab0dcc2681037e45743d85bef1672c40461f940..d0227744fbf9fbeb71d98b311268eccf9fbe687c 100644 (file)
@@ -446,15 +446,14 @@ fgJoystickRead()
                    continue;
 
                switch (b.action) {
+               case button::ADJUST:
                case button::TOGGLE:
                    // no op
+                   flag = true;
                    break;
                case button::SWITCH:
                    flag = b.value->setDoubleValue(0.0);
                    break;
-               case button::ADJUST:
-                   // no op
-                   break;
                default:
                    flag = false;
                    break;
index c124e0dfd8b6be79ae22f48f6dca661c328927e7..9c34278ba1a8ea87875152e680dba92fc8062d30 100644 (file)
@@ -163,14 +163,6 @@ FGBFI::init ()
   current_properties.tieDouble("/controls/brakes/center",
                               getRightBrake, setCenterBrake);
 
-                               // Deprecated...
-  current_properties.tieDouble("/controls/brake",
-                              getBrakes, setBrakes);
-  current_properties.tieDouble("/controls/left-brake",
-                              getLeftBrake, setLeftBrake);
-  current_properties.tieDouble("/controls/right-brake",
-                              getRightBrake, setRightBrake);
-
                                // Autopilot
   current_properties.tieBool("/autopilot/locks/altitude",
                             getAPAltitudeLock, setAPAltitudeLock);
@@ -231,6 +223,9 @@ FGBFI::init ()
   current_properties.tieDouble("/radios/adf/rotation",
                               getADFRotation, setADFRotation);
 
+  current_properties.tieDouble("/environment/visibility",
+                              getVisibility, setVisibility);
+
   FG_LOG(FG_GENERAL, FG_INFO, "Ending BFI init");
 }