]> git.mxchange.org Git - flightgear.git/blobdiff - src/Main/globals.cxx
Remove confusing reference to SDL/GLUT
[flightgear.git] / src / Main / globals.cxx
index 1d3e14264843da9f94e27ccaa681f46c0d8972bb..a6381569ba53a8dac4351deef707c01767b2bd6c 100644 (file)
@@ -85,7 +85,6 @@ public:
         }
         
         if (r.exists()) {
-          SG_LOG(SG_IO, SG_DEBUG, "found path:" << aResource << " via /sim/aircraft-dir: " << r.str());
           return r;
         }
     }
@@ -97,7 +96,6 @@ public:
     for (; it != dirs.end(); ++it) {
       SGPath p(*it, res);
       if (p.exists()) {
-        SG_LOG(SG_IO, SG_DEBUG, "found path:" << aResource << " in aircraft dir: " << *it);
         return p;
       }
     } // of aircraft path iteration
@@ -106,6 +104,23 @@ public:
   }
 };
 
+class CurrentAircraftDirProvider : public simgear::ResourceProvider
+{
+public:
+  CurrentAircraftDirProvider() :
+    simgear::ResourceProvider(simgear::ResourceManager::PRIORITY_HIGH)
+  {
+  }
+  
+  virtual SGPath resolve(const std::string& aResource, SGPath&) const
+  {
+    const char* aircraftDir = fgGetString("/sim/aircraft-dir");
+    SGPath p(aircraftDir);
+    p.append(aResource);
+    return p.exists() ? p : SGPath();
+  }
+};
+
 ////////////////////////////////////////////////////////////////////////
 // Implementation of FGGlobals.
 ////////////////////////////////////////////////////////////////////////
@@ -141,7 +156,8 @@ FGGlobals::FGGlobals() :
     channellist( NULL ),
     haveUserSettings(false)
 {
-  simgear::ResourceManager::instance()->addProvider(new AircraftResourceProvider());
+  simgear::ResourceManager::instance()->addProvider(new AircraftResourceProvider);
+  simgear::ResourceManager::instance()->addProvider(new CurrentAircraftDirProvider);
   simgear::PropertyObjectBase::setDefaultRoot(props);
   
   positionLon = props->getNode("position/longitude-deg", true);
@@ -202,7 +218,7 @@ FGGlobals::~FGGlobals()
 }
 
 // set the fg_root path
-void FGGlobals::set_fg_root (const string &root) {
+void FGGlobals::set_fg_root (const std::string &root) {
     SGPath tmp(root);
     fg_root = tmp.realpath();
 
@@ -229,12 +245,60 @@ void FGGlobals::set_fg_root (const string &root) {
 }
 
 // set the fg_home path
-void FGGlobals::set_fg_home (const string &home) {
+void FGGlobals::set_fg_home (const std::string &home) {
     SGPath tmp(home);
     fg_home = tmp.realpath();
 }
 
-void FGGlobals::append_fg_scenery (const string &paths)
+PathList FGGlobals::get_data_paths() const
+{
+    PathList r(additional_data_paths);
+    r.push_back(SGPath(fg_root));
+    return r;
+}
+
+PathList FGGlobals::get_data_paths(const std::string& suffix) const
+{
+    PathList r;
+    BOOST_FOREACH(SGPath p, get_data_paths()) {
+        p.append(suffix);
+        if (p.exists()) {
+            r.push_back(p);
+        }
+    }
+
+    return r;
+}
+
+void FGGlobals::append_data_path(const SGPath& path)
+{
+    if (!path.exists()) {
+        SG_LOG(SG_GENERAL, SG_WARN, "adding non-existant data path:" << path);
+    }
+    
+    additional_data_paths.push_back(path);
+}
+
+SGPath FGGlobals::find_data_dir(const std::string& pathSuffix) const
+{
+    BOOST_FOREACH(SGPath p, additional_data_paths) {
+        p.append(pathSuffix);
+        if (p.exists()) {
+            return p;
+        }
+    }
+    
+    SGPath rootPath(fg_root);
+    rootPath.append(pathSuffix);
+    if (rootPath.exists()) {
+        return rootPath;
+    }
+    
+    SG_LOG(SG_GENERAL, SG_WARN, "dir not found in any data path:" << pathSuffix);
+    return SGPath();
+}
+
+void FGGlobals::append_fg_scenery (const std::string &paths)
 {
 //    fg_scenery.clear();
     SGPropertyNode* sim = fgGetNode("/sim", true);
@@ -327,7 +391,7 @@ SGPath FGGlobals::resolve_maybe_aircraft_path(const std::string& branch) const
   return simgear::ResourceManager::instance()->findPath(branch);
 }
 
-SGPath FGGlobals::resolve_ressource_path(const std::string& branch) const
+SGPath FGGlobals::resolve_resource_path(const std::string& branch) const
 {
   return simgear::ResourceManager::instance()
     ->findPath(branch, SGPath(fgGetString("/sim/aircraft-dir")));
@@ -435,6 +499,17 @@ FGGlobals::saveInitialState ()
   }
 }
 
+static std::string autosaveName()
+{
+    std::ostringstream os;
+    string_list versionParts = simgear::strutils::split(VERSION, ".");
+    if (versionParts.size() < 2) {
+        return "autosave.xml";
+    }
+    
+    os << "autosave_" << versionParts[0] << "_" << versionParts[1] << ".xml";
+    return os.str();
+}
 
 // Restore the saved initial state, if any
 void
@@ -465,7 +540,7 @@ FGGlobals::loadUserSettings(const SGPath& dataPath)
     // remember that we have (tried) to load any existing autsave.xml
     haveUserSettings = true;
 
-    SGPath autosaveFile = simgear::Dir(dataPath).file("autosave.xml");
+    SGPath autosaveFile = simgear::Dir(dataPath).file(autosaveName());
     SGPropertyNode autosave;
     if (autosaveFile.exists()) {
       SG_LOG(SG_INPUT, SG_INFO, "Reading user settings from " << autosaveFile.str());
@@ -493,13 +568,13 @@ FGGlobals::saveUserSettings()
       haveUserSettings = false;
 
       SGPath autosaveFile(globals->get_fg_home());
-      autosaveFile.append( "autosave.xml" );
+      autosaveFile.append(autosaveName());
       autosaveFile.create_dir( 0700 );
       SG_LOG(SG_IO, SG_INFO, "Saving user settings to " << autosaveFile.str());
       try {
         writeProperties(autosaveFile.str(), globals->get_props(), false, SGPropertyNode::USERARCHIVE);
       } catch (const sg_exception &e) {
-        guiErrorMessage("Error writing autosave.xml: ", e);
+        guiErrorMessage("Error writing autosave:", e);
       }
       SG_LOG(SG_INPUT, SG_DEBUG, "Finished Saving user settings");
     }