diff --git a/utils/fgpanel/ApplicationProperties.hxx b/utils/fgpanel/ApplicationProperties.hxx index f5578feb2..69de27226 100644 --- a/utils/fgpanel/ApplicationProperties.hxx +++ b/utils/fgpanel/ApplicationProperties.hxx @@ -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; diff --git a/utils/fgpanel/FGPanelApplication.cxx b/utils/fgpanel/FGPanelApplication.cxx index cf4bbcca3..568d171b1 100644 --- a/utils/fgpanel/FGPanelApplication.cxx +++ b/utils/fgpanel/FGPanelApplication.cxx @@ -22,6 +22,7 @@ #ifdef HAVE_WINDOWS_H #include +#include #endif #include "FGGLApplication.hxx" @@ -38,6 +39,7 @@ #include #include #include +#include #include @@ -85,6 +87,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 +298,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; }