X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FMain%2Fglobals.cxx;h=d41e00d5f2bff7e3bec088e73ca2cb2df72124d8;hb=16784d590a315e876a7b18076569620640ffbdf6;hp=8ed71cbd50f9d48dc424359efaa0e57f64ec0950;hpb=94890095707d3c11ff356efeb293ba0d93705c80;p=flightgear.git diff --git a/src/Main/globals.cxx b/src/Main/globals.cxx index 8ed71cbd5..d41e00d5f 100644 --- a/src/Main/globals.cxx +++ b/src/Main/globals.cxx @@ -43,6 +43,7 @@ #include #include #include +#include #include #include @@ -135,7 +136,6 @@ FGGlobals *globals = NULL; // Constructor FGGlobals::FGGlobals() : - initial_state( NULL ), renderer( new FGRenderer ), subsystem_mgr( new SGSubsystemMgr ), event_mgr( new SGEventMgr ), @@ -273,7 +273,8 @@ void FGGlobals::set_fg_root (const std::string &root) { << fg_root << "'\n***\n***"); } - // remove /sim/fg-root before writing to prevent hijacking + // deliberately not a tied property, for fgValidatePath security + // write-protect to avoid accidents SGPropertyNode *n = fgGetNode("/sim", true); n->removeChild("fg-root", 0); n = n->getChild("fg-root", 0, true); @@ -340,7 +341,6 @@ SGPath FGGlobals::find_data_dir(const std::string& pathSuffix) const void FGGlobals::append_fg_scenery (const std::string &paths) { -// fg_scenery.clear(); SGPropertyNode* sim = fgGetNode("/sim", true); // find first unused fg-scenery property in /sim @@ -396,6 +396,27 @@ void FGGlobals::append_fg_scenery (const std::string &paths) } // of path list iteration } +void FGGlobals::clear_fg_scenery() +{ + fg_scenery.clear(); +} + +void FGGlobals::set_catalog_aircraft_path(const SGPath& path) +{ + catalog_aircraft_dir = path; +} + +string_list FGGlobals::get_aircraft_paths() const +{ + string_list r; + if (!catalog_aircraft_dir.isNull()) { + r.push_back(catalog_aircraft_dir.str()); + } + + r.insert(r.end(), fg_aircraft_dirs.begin(), fg_aircraft_dirs.end()); + return r; +} + void FGGlobals::append_aircraft_path(const std::string& path) { SGPath dirPath(path); @@ -403,25 +424,21 @@ void FGGlobals::append_aircraft_path(const std::string& path) SG_LOG(SG_GENERAL, SG_ALERT, "aircraft path not found:" << path); return; } - + SGPath acSubdir(dirPath); acSubdir.append("Aircraft"); if (acSubdir.exists()) { - SG_LOG(SG_GENERAL, SG_WARN, "Specified an aircraft-dir with an 'Aircraft' subdirectory:" << dirPath - << ", will instead use child directory:" << acSubdir); + SG_LOG( + SG_GENERAL, + SG_WARN, + "Specified an aircraft-dir with an 'Aircraft' subdirectory:" << dirPath + << ", will instead use child directory:" << acSubdir + ); dirPath = acSubdir; } - + std::string abspath = dirPath.realpath(); - unsigned int index = fg_aircraft_dirs.size(); fg_aircraft_dirs.push_back(abspath); - -// make aircraft dirs available to Nasal - SGPropertyNode* sim = fgGetNode("/sim", true); - sim->removeChild("fg-aircraft", index); - SGPropertyNode* n = sim->getChild("fg-aircraft", index, true); - n->setStringValue(abspath); - n->setAttribute(SGPropertyNode::WRITE, false); } void FGGlobals::append_aircraft_paths(const std::string& path) @@ -603,31 +620,6 @@ FGGlobals::resetPropertyRoot() n->setAttribute(SGPropertyNode::WRITE, false); } -// Save the current state as the initial state. -void -FGGlobals::saveInitialState () -{ - initial_state = new SGPropertyNode(); - - // copy properties which are READ/WRITEable - but not USERARCHIVEd or PRESERVEd - int checked = SGPropertyNode::READ+SGPropertyNode::WRITE+ - SGPropertyNode::USERARCHIVE+SGPropertyNode::PRESERVE; - int expected = SGPropertyNode::READ+SGPropertyNode::WRITE; - if (!copyProperties(props, initial_state, expected, checked)) - SG_LOG(SG_GENERAL, SG_ALERT, "Error saving initial state"); - - // delete various properties from the initial state, since we want to - // preserve their values even if doing a restore - // => Properties should now use the PRESERVE flag to protect their values - // on sim-reset. Remove some specific properties for backward compatibility. - SGPropertyNode* sim = initial_state->getChild("sim"); - SGPropertyNode* cameraGroupNode = sim->getNode("rendering/camera-group"); - if (cameraGroupNode) { - cameraGroupNode->removeChild("camera"); - cameraGroupNode->removeChild("gui"); - } -} - static std::string autosaveName() { std::ostringstream os; @@ -640,28 +632,6 @@ static std::string autosaveName() return os.str(); } -// Restore the saved initial state, if any -void -FGGlobals::restoreInitialState () -{ - if ( initial_state == 0 ) { - SG_LOG(SG_GENERAL, SG_ALERT, - "No initial state available to restore!!!"); - return; - } - // copy properties which are READ/WRITEable - but not USERARCHIVEd or PRESERVEd - int checked = SGPropertyNode::READ+SGPropertyNode::WRITE+ - SGPropertyNode::USERARCHIVE+SGPropertyNode::PRESERVE; - int expected = SGPropertyNode::READ+SGPropertyNode::WRITE; - if ( copyProperties(initial_state, props, expected, checked)) { - SG_LOG( SG_GENERAL, SG_INFO, "Initial state restored successfully" ); - } else { - SG_LOG( SG_GENERAL, SG_INFO, - "Some errors restoring initial state (read-only props?)" ); - } - -} - // Load user settings from autosave.xml void FGGlobals::loadUserSettings(const SGPath& dataPath) @@ -784,4 +754,14 @@ void FGGlobals::cleanupListeners() _listeners_to_cleanup.clear(); } +simgear::pkg::Root* FGGlobals::packageRoot() +{ + return _packageRoot.get(); +} + +void FGGlobals::setPackageRoot(const SGSharedPtr& p) +{ + _packageRoot = p; +} + // end of globals.cxx