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::string > pointerSettings;
|
||||||
std::map< std::string, std::map< std::string, std::string > > keySettings;
|
std::map< std::string, std::map< std::string, std::string > > keySettings;
|
||||||
|
|
||||||
|
std::string _WorkDir;
|
||||||
|
|
||||||
public:
|
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 initLUA();
|
||||||
void uninitLUA();
|
void uninitLUA();
|
||||||
bool isLuaInitialized() const{ return luaInitialized; }
|
bool isLuaInitialized() const{ return luaInitialized; }
|
||||||
|
|
|
@ -88,6 +88,7 @@ namespace NLGUI
|
||||||
virtual bool serializePointerSettings( xmlNodePtr parentNode ) const = 0;
|
virtual bool serializePointerSettings( xmlNodePtr parentNode ) const = 0;
|
||||||
virtual bool serializeKeySettings( xmlNodePtr parentNode ) const = 0;
|
virtual bool serializeKeySettings( xmlNodePtr parentNode ) const = 0;
|
||||||
virtual CViewBase* createClass( const std::string &name ) = 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);
|
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)
|
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
|
//get the first file document pointer
|
||||||
firstFileName = *it;
|
firstFileName = *it;
|
||||||
string filename = CPath::lookup(firstFileName);
|
string filename = lookup( firstFileName );
|
||||||
bool isInData = false;
|
bool isInData = false;
|
||||||
string::size_type pos = filename.find ("@");
|
string::size_type pos = filename.find ("@");
|
||||||
if (pos != string::npos)
|
if (pos != string::npos)
|
||||||
|
@ -283,7 +299,7 @@ namespace NLGUI
|
||||||
isInData = true;
|
isInData = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((needCheck && !isInData) || !file.open (CPath::lookup(firstFileName)))
|
if ((needCheck && !isInData) || !file.open (lookup(firstFileName)))
|
||||||
{
|
{
|
||||||
// todo hulud interface syntax error
|
// todo hulud interface syntax error
|
||||||
nlwarning ("could not open file %s, skipping xml parsing",firstFileName.c_str());
|
nlwarning ("could not open file %s, skipping xml parsing",firstFileName.c_str());
|
||||||
|
@ -331,7 +347,7 @@ namespace NLGUI
|
||||||
{
|
{
|
||||||
saveParseResult = true;
|
saveParseResult = true;
|
||||||
std::string archive = CPath::lookup(nextFileName + "_compressed", false, false);
|
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 (!archive.empty() && !current.empty())
|
||||||
{
|
{
|
||||||
if (CFile::getFileModificationDate(current) <= CFile::getFileModificationDate(archive))
|
if (CFile::getFileModificationDate(current) <= CFile::getFileModificationDate(archive))
|
||||||
|
@ -351,7 +367,7 @@ namespace NLGUI
|
||||||
{
|
{
|
||||||
if (isFilename)
|
if (isFilename)
|
||||||
{
|
{
|
||||||
if (!file.open(CPath::lookup(nextFileName, false, false)))
|
if (!file.open(lookup(nextFileName)))
|
||||||
{
|
{
|
||||||
// todo hulud interface syntax error
|
// todo hulud interface syntax error
|
||||||
nlwarning ("could not open file %s, skipping xml parsing",nextFileName.c_str());
|
nlwarning ("could not open file %s, skipping xml parsing",nextFileName.c_str());
|
||||||
|
|
|
@ -181,6 +181,8 @@ namespace GUIEditor
|
||||||
currentProject = projectFiles.projectName.c_str();
|
currentProject = projectFiles.projectName.c_str();
|
||||||
currentProjectFile = fileName;
|
currentProjectFile = fileName;
|
||||||
projectWindow->setupFiles( projectFiles );
|
projectWindow->setupFiles( projectFiles );
|
||||||
|
GUICtrl->setWorkDir( _lastDir );
|
||||||
|
|
||||||
if( GUICtrl->parse( projectFiles ) )
|
if( GUICtrl->parse( projectFiles ) )
|
||||||
{
|
{
|
||||||
hierarchyView->buildHierarchy( projectFiles.masterGroup );
|
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()
|
QWidget* NelGUICtrl::getViewPort()
|
||||||
{
|
{
|
||||||
return w;
|
return w;
|
||||||
|
|
|
@ -52,6 +52,8 @@ namespace GUIEditor
|
||||||
void show();
|
void show();
|
||||||
void hide();
|
void hide();
|
||||||
|
|
||||||
|
void setWorkDir( const QString &dir );
|
||||||
|
|
||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
void guiLoadComplete();
|
void guiLoadComplete();
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue