X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FNewGeom%2FNewGeom_DataModel.cpp;h=88e7db728e938d5396200949082ac24b0b026ab3;hb=74e9ba33303efc2282db1261706e904efa36b255;hp=267cb064740a4958beddfe3dc732bd7836e29f4c;hpb=0b06415cbaab3da89567c28ea4a7ae6ecf50511b;p=modules%2Fshaper.git diff --git a/src/NewGeom/NewGeom_DataModel.cpp b/src/NewGeom/NewGeom_DataModel.cpp index 267cb0647..88e7db728 100644 --- a/src/NewGeom/NewGeom_DataModel.cpp +++ b/src/NewGeom/NewGeom_DataModel.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2014-20xx CEA/DEN, EDF R&D + #include "NewGeom_DataModel.h" #include "NewGeom_Module.h" @@ -8,12 +10,13 @@ #include #include #include +#include #include - +#include NewGeom_DataModel::NewGeom_DataModel(NewGeom_Module* theModule) - : LightApp_DataModel(theModule), myModule(theModule) + : LightApp_DataModel(theModule), myStudyPath(""), myModule(theModule) { } @@ -27,12 +30,42 @@ bool NewGeom_DataModel::open(const QString& thePath, CAM_Study* theStudy, QStrin if (theFiles.size() == 0) return false; - QString aFile = theFiles.first(); + myStudyPath = thePath; + + // If the file is Multi(contain all module files inside), the open SALOME functionality creates + // these files in a temporary directory. After the open functionality is finished, it removes + // these files (in the full SALOME mode). + // The postponed loading of the files is realized in the NewGEOM module. So, it is important do + // not remove the opened files. + // The following code creates a new tmp directory with a copy of files. + QString aTmpDir = theFiles.first(); + + LightApp_Study* aStudy = dynamic_cast( myModule->application()->activeStudy() ); + QString aNewTmpDir = aStudy->GetTmpDir("", false).c_str(); + + bool isDone = true; + QDir aDir(aTmpDir); + QStringList aFiles = aDir.entryList(QDir::Files); + QStringList::const_iterator anIt = aFiles.begin(), aLast = aFiles.end(); + for (; anIt != aLast; anIt++) { + QString aFileName = *anIt; + + QString aCurrentFile = SUIT_Tools::addSlash(aTmpDir) + aFileName; + QString aNewFile = SUIT_Tools::addSlash(aNewTmpDir) + aFileName; + if (!QFile::copy(aCurrentFile, aNewFile)) + isDone = false; + } + if (isDone) { + myTmpDirectory = aNewTmpDir; + } + else { + removeDirectory(aNewTmpDir); + myTmpDirectory = ""; + } SessionPtr aMgr = ModelAPI_Session::get(); - aMgr->load(qPrintable(aFile)); + aMgr->load(qPrintable(aNewTmpDir)); myModule->setIsOpened(true); - myStudyPath = aFile; return true; } @@ -42,8 +75,17 @@ bool NewGeom_DataModel::save(QStringList& theFiles) XGUI_Workshop* aWorkShop = myModule->workshop(); std::list aFileNames; - LightApp_Study* aStudy = dynamic_cast( myModule->application()->activeStudy() ); - std::string aTmpDir = aStudy->GetTmpDir(qPrintable(myStudyPath), true ); + CAM_Application* anApp = myModule->application(); + LightApp_Study* aStudy = dynamic_cast(anApp->activeStudy()); + SUIT_ResourceMgr* aResMgr = anApp->resourceMgr(); + + // it is important to check whether the file is saved in the multi-files mode in order to save + // files in temporary directories, which are removed in the full SALOME mode after copiying + // the files content in a result file. + bool isMultiFile = aResMgr ? aResMgr->booleanValue("Study", "multi_file", false) : false; + + std::string aTmpDir = aStudy->GetTmpDir(qPrintable(myStudyPath), isMultiFile); + //std::string aTmpDir = aStudy->GetTmpDir("", false);//true ); theFiles.append(QString(aTmpDir.c_str())); aWorkShop->saveDocument(QString(aTmpDir.c_str()), aFileNames); @@ -65,6 +107,9 @@ bool NewGeom_DataModel::saveAs(const QString& thePath, CAM_Study* theStudy, QStr bool NewGeom_DataModel::close() { + myModule->workshop()->closeDocument(); + removeDirectory(myTmpDirectory); + myTmpDirectory = ""; return LightApp_DataModel::close(); } @@ -87,3 +132,9 @@ bool NewGeom_DataModel::isSaved() const void NewGeom_DataModel::update(LightApp_DataObject* theObj, LightApp_Study* theStudy) { } + +void NewGeom_DataModel::removeDirectory(const QString& theDirectoryName) +{ + Qtx::rmDir(theDirectoryName); +} +