CInterfaceParser in editor mode should look for files in the working directory first.
This commit is contained in:
parent
dec5d7fe2d
commit
0038ae03c4
6 changed files with 39 additions and 4 deletions
|
@ -353,7 +353,15 @@ namespace NLGUI
|
|||
std::map< std::string, std::string > pointerSettings;
|
||||
std::map< std::string, std::map< std::string, std::string > > keySettings;
|
||||
|
||||
std::string _WorkDir;
|
||||
|
||||
public:
|
||||
/// Sets the working directory, where files should be looked for
|
||||
void setWorkDir( const std::string &workdir ){ _WorkDir = workdir; }
|
||||
|
||||
/// Looks up a file in either the working directory or using CPath::lookup
|
||||
std::string lookup( const std::string &file );
|
||||
|
||||
void initLUA();
|
||||
void uninitLUA();
|
||||
bool isLuaInitialized() const{ return luaInitialized; }
|
||||
|
|
|
@ -88,6 +88,7 @@ namespace NLGUI
|
|||
virtual bool serializePointerSettings( xmlNodePtr parentNode ) const = 0;
|
||||
virtual bool serializeKeySettings( xmlNodePtr parentNode ) const = 0;
|
||||
virtual CViewBase* createClass( const std::string &name ) = 0;
|
||||
virtual void setWorkDir( const std::string &workdir ) = 0;
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -233,6 +233,22 @@ namespace NLGUI
|
|||
destStream.seek(0, NLMISC::IStream::begin);
|
||||
}
|
||||
|
||||
std::string CInterfaceParser::lookup( const std::string &file )
|
||||
{
|
||||
std::string filename;
|
||||
|
||||
if( editorMode && !_WorkDir.empty() )
|
||||
{
|
||||
std::string wdpath = CPath::standardizePath( _WorkDir ) + file;
|
||||
if( CFile::fileExists( wdpath ) )
|
||||
filename = wdpath;
|
||||
}
|
||||
if( filename.empty() )
|
||||
filename = CPath::lookup( file );
|
||||
|
||||
return filename;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
bool CInterfaceParser::parseInterface (const std::vector<std::string> & strings, bool reload, bool isFilename, bool checkInData)
|
||||
{
|
||||
|
@ -270,7 +286,7 @@ namespace NLGUI
|
|||
{
|
||||
//get the first file document pointer
|
||||
firstFileName = *it;
|
||||
string filename = CPath::lookup(firstFileName);
|
||||
string filename = lookup( firstFileName );
|
||||
bool isInData = false;
|
||||
string::size_type pos = filename.find ("@");
|
||||
if (pos != string::npos)
|
||||
|
@ -283,7 +299,7 @@ namespace NLGUI
|
|||
isInData = true;
|
||||
}
|
||||
|
||||
if ((needCheck && !isInData) || !file.open (CPath::lookup(firstFileName)))
|
||||
if ((needCheck && !isInData) || !file.open (lookup(firstFileName)))
|
||||
{
|
||||
// todo hulud interface syntax error
|
||||
nlwarning ("could not open file %s, skipping xml parsing",firstFileName.c_str());
|
||||
|
@ -331,7 +347,7 @@ namespace NLGUI
|
|||
{
|
||||
saveParseResult = true;
|
||||
std::string archive = CPath::lookup(nextFileName + "_compressed", false, false);
|
||||
std::string current = CPath::lookup(nextFileName, false, false);
|
||||
std::string current = lookup(nextFileName);
|
||||
if (!archive.empty() && !current.empty())
|
||||
{
|
||||
if (CFile::getFileModificationDate(current) <= CFile::getFileModificationDate(archive))
|
||||
|
@ -351,7 +367,7 @@ namespace NLGUI
|
|||
{
|
||||
if (isFilename)
|
||||
{
|
||||
if (!file.open(CPath::lookup(nextFileName, false, false)))
|
||||
if (!file.open(lookup(nextFileName)))
|
||||
{
|
||||
// todo hulud interface syntax error
|
||||
nlwarning ("could not open file %s, skipping xml parsing",nextFileName.c_str());
|
||||
|
|
|
@ -181,6 +181,8 @@ namespace GUIEditor
|
|||
currentProject = projectFiles.projectName.c_str();
|
||||
currentProjectFile = fileName;
|
||||
projectWindow->setupFiles( projectFiles );
|
||||
GUICtrl->setWorkDir( _lastDir );
|
||||
|
||||
if( GUICtrl->parse( projectFiles ) )
|
||||
{
|
||||
hierarchyView->buildHierarchy( projectFiles.masterGroup );
|
||||
|
|
|
@ -187,6 +187,12 @@ namespace GUIEditor
|
|||
}
|
||||
}
|
||||
|
||||
void NelGUICtrl::setWorkDir( const QString &dir )
|
||||
{
|
||||
IParser *parser = CWidgetManager::getInstance()->getParser();
|
||||
parser->setWorkDir( std::string( dir.toUtf8().constData() ) );
|
||||
}
|
||||
|
||||
QWidget* NelGUICtrl::getViewPort()
|
||||
{
|
||||
return w;
|
||||
|
|
|
@ -52,6 +52,8 @@ namespace GUIEditor
|
|||
void show();
|
||||
void hide();
|
||||
|
||||
void setWorkDir( const QString &dir );
|
||||
|
||||
Q_SIGNALS:
|
||||
void guiLoadComplete();
|
||||
|
||||
|
|
Loading…
Reference in a new issue