]> git.mxchange.org Git - simgear.git/blobdiff - simgear/props/props_io.cxx
Revert "Use simgear internal stuff for the singleton class."
[simgear.git] / simgear / props / props_io.cxx
index 9fea449730bf94122e3eea9c23c826b4eae5de68..8fae12f8b205c3a09f4344cedd8b62b4d86c6104 100644 (file)
@@ -21,6 +21,7 @@
 #include <simgear/math/SGMath.hxx>
 #include <simgear/misc/sg_path.hxx>
 #include <simgear/xml/easyxml.hxx>
+#include <simgear/misc/ResourceManager.hxx>
 
 #include "props.hxx"
 #include "props_io.hxx"
@@ -170,12 +171,15 @@ PropsVisitor::startElement (const char * name, const XMLAttributes &atts)
                                // Check for an include.
     attval = atts.getValue("include");
     if (attval != 0) {
-      SGPath path(SGPath(_base).dir());
-      path.append(attval);
       try {
-       readProperties(path.str(), _root, 0, _extended);
+          SGPath path = simgear::ResourceManager::instance()->findPath(attval, SGPath(_base).dir());
+          if (path.isNull())
+          {
+              throw sg_io_exception("Cannot open file", sg_location(attval));
+          }
+          readProperties(path.str(), _root, 0, _extended);
       } catch (sg_io_exception &e) {
-       setException(e);
+          setException(e);
       }
     }
 
@@ -242,12 +246,15 @@ PropsVisitor::startElement (const char * name, const XMLAttributes &atts)
     bool omit = false;
     attval = atts.getValue("include");
     if (attval != 0) {
-      SGPath path(SGPath(_base).dir());
-      path.append(attval);
       try {
-       readProperties(path.str(), node, 0, _extended);
+          SGPath path = simgear::ResourceManager::instance()->findPath(attval, SGPath(_base).dir());
+          if (path.isNull())
+          {
+              throw sg_io_exception("Cannot open file", sg_location(attval));
+          }
+          readProperties(path.str(), node, 0, _extended);
       } catch (sg_io_exception &e) {
-       setException(e);
+          setException(e);
       }
 
       attval = atts.getValue("omit-node");
@@ -255,7 +262,10 @@ PropsVisitor::startElement (const char * name, const XMLAttributes &atts)
     }
 
     const char *type = atts.getValue("type");
-    if (type)
+    // if a type is given and the node is tied,
+    // don't clear the value because
+    // clearValue() unties the property
+    if (type && false == node->isTied() )
       node->clearValue();
     push_state(node, type, mode, omit);
   }