X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FXGUI%2FXGUI_Tools.cpp;h=cb66e1837fdaf24eb62da0d0f3ce818caf4f65e2;hb=c7d72b1e9c2bf38f8cb27f9251c7a332401dc2fe;hp=104eee4565aa06994c9a8292b62b552baaf564cb;hpb=c4eab94a20a0d93100549a210582d46409fec1cc;p=modules%2Fshaper.git diff --git a/src/XGUI/XGUI_Tools.cpp b/src/XGUI/XGUI_Tools.cpp index 104eee456..cb66e1837 100644 --- a/src/XGUI/XGUI_Tools.cpp +++ b/src/XGUI/XGUI_Tools.cpp @@ -51,6 +51,19 @@ #include #include +#ifndef WIN32 +# include +# include +# include +# define _separator_ '/' +#else +#include +#define F_OK 0 +#define access _access +# include +# define _separator_ '\\' +#endif + namespace XGUI_Tools { //****************************************************************** QString dir(const QString& path, bool isAbs) @@ -147,11 +160,37 @@ bool canRemoveOrRename(QWidget* theParent, const std::set& theFeatur return aResult; } +//****************************************************************** +bool isAscii(const QString& theStr) +{ + char aCh; + for (int i = 0; i < theStr.size(); i++) { + aCh = theStr[i].toLatin1(); + if (aCh == 0) + return false; + if ((aCh >= 0x30) && (aCh <= 0x39)) + continue; + else if ((aCh >= 0x41) && (aCh <= 0x5A)) + continue; + else if ((aCh >= 0x61) && (aCh <= 0x7A)) + continue; + else if (aCh == 0x5f) + continue; + else + return false; + } + return true; +} + //****************************************************************** bool canRename(const ObjectPtr& theObject, const QString& theName) { std::string aType = theObject->groupName(); if (aType == ModelAPI_ResultParameter::group()) { + // For parameters names only ASCII symbols have to be used + if (!isAscii(theName)) + return false; + double aValue; ResultParameterPtr aParam; if (ModelAPI_Tools::findVariable(theObject->document(), @@ -250,4 +289,97 @@ QString generateName(const ModuleBase_ViewerPrsPtr& thePrs) return aName; } +std::wstring strToWStr(const std::string& theStr) { + size_t aLen = theStr.size(); + std::wstring aResult(aLen, L'#'); + mbstowcs(&aResult[0], theStr.c_str(), aLen); + return aResult; +} + +std::string getTmpDirByPath( const std::string& theTmpPath) +{ + std::string aTmpDir = theTmpPath; + if (aTmpDir == "" || access(aTmpDir.c_str() , F_OK) != 0) { +#ifdef WIN32 + char *Tmp_dir = getenv("TEMP"); + if (Tmp_dir == NULL) { + Tmp_dir = getenv("TMP"); + if (Tmp_dir == NULL) + aTmpDir = "C:\\"; + else + aTmpDir = Tmp_dir; + } + else + aTmpDir = Tmp_dir; +#else + aTmpDir = "/tmp/"; +#endif + } + + if (aTmpDir.back() != _separator_) + aTmpDir += _separator_; + + srand((unsigned int)time( NULL )); + //Get a random number to present a name of a sub directory + int aRND = 999 + (int)(100000.0*rand()/(RAND_MAX+1.0)); + char buffer[127]; + sprintf(buffer, "%d", aRND); + std::string aSubDir(buffer); + if (aSubDir.size() <= 1) + aSubDir = "123049876"; + + aTmpDir += aSubDir; //Get RND sub directory + + std::string aDir = aTmpDir; + + for(aRND = 0; access(aDir.c_str() , F_OK) == 0; aRND++) { + sprintf( buffer, "%d", aRND ); + aDir = aTmpDir + buffer; //Build a unique directory name + } + if (aDir.back() != _separator_) + aDir += _separator_; + +#ifdef WIN32 + CreateDirectory(strToWStr(aDir).c_str(), NULL); +#else + mkdir( aDir.c_str(), 0x1ff ); +#endif + + return aDir; +} + +std::string getTmpDirByEnv( const char* thePathEnv) +{ + char* aVal = thePathEnv[0] == 0 ? 0 : getenv(thePathEnv); + std::string dir = aVal ? aVal : ""; + return getTmpDirByPath(dir).c_str(); +} + +void removeTemporaryFiles(const std::string& theDirectory, + const std::list& theFiles) +{ + std::string aDirName = theDirectory; + + std::list::const_iterator aFilesIter = theFiles.cbegin(); + for(; aFilesIter != theFiles.cend(); aFilesIter++) { + const std::string& aFile = *aFilesIter; + if(access(aFile.c_str() , F_OK) != 0) + continue; + +#ifdef WIN32 + DeleteFile(strToWStr(aFile).c_str()); +#else + unlink(aFile.c_str()); +#endif + } + + if(access(aDirName.c_str() , F_OK) == 0) { +#ifdef WIN32 + RemoveDirectory(strToWStr(aDirName).c_str()); +#else + rmdir(aDirName.c_str()); +#endif + } +} + }