1
0
Fork 0

fgpanel: improved path handling

- Allow relative paths for panels.
- Set FGROOT as resource manager base path, so absolute
  XML includes can be resolved
This commit is contained in:
ThorstenB 2011-10-08 11:28:28 +02:00
parent ef995913e1
commit 32a49cb689
2 changed files with 38 additions and 3 deletions

View file

@ -24,6 +24,7 @@ class ApplicationProperties {
public:
static double getDouble( const char * name, double def = 0.0 );
static SGPath GetRootPath( const char * subDir = NULL );
static SGPath GetCwd();
static SGPropertyNode_ptr Properties;
static std::string root;
static FGFontCache fontCache;

View file

@ -38,6 +38,7 @@
#include <simgear/misc/sg_path.hxx>
#include <simgear/props/props_io.hxx>
#include <simgear/structure/exception.hxx>
#include <simgear/misc/ResourceManager.hxx>
#include <iostream>
@ -85,6 +86,8 @@ FGPanelApplication::FGPanelApplication( int argc, char ** argv ) :
if( fgRoot.length() > 0 )
ApplicationProperties::root = fgRoot;
simgear::ResourceManager::instance()->addBasePath(ApplicationProperties::root);
if( panelFilename.length() == 0 ) {
cerr << "Need a panel filename. Use --panel=path_to_filename" << endl;
throw exception();
@ -294,14 +297,45 @@ double ApplicationProperties::getDouble( const char * name, double def )
return n->getDoubleValue();
}
SGPath ApplicationProperties::GetCwd()
{
SGPath path(".");
char buf[512], *cwd = getcwd(buf, 511);
buf[511] = '\0';
if (cwd)
{
path = cwd;
}
return path;
}
SGPath ApplicationProperties::GetRootPath( const char * sub )
{
SGPath subpath( sub );
if ( subpath.isAbsolute() )
return subpath;
if( sub != NULL )
{
SGPath subpath( sub );
// relative path to current working dir?
if (subpath.isRelative())
{
SGPath path = GetCwd();
path.append( sub );
if (path.exists())
return path;
}
else
if ( subpath.exists() )
{
// absolute path
return subpath;
}
}
// default: relative path to FGROOT
SGPath path( ApplicationProperties::root );
if( sub != NULL )
path.append( sub );
return path;
}