Salome HOME
Copyright update 2022
[modules/shaper.git] / src / SHAPERGUI / SHAPERGUI_DataModel.cpp
index b11d10e362294a3a183b62859fb73d9b0dc5f8c7..fa54519aed63aa776a6e59e72299bdb91b1f5418 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2014-2019  CEA/DEN, EDF R&D
+// Copyright (C) 2014-2022  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -24,6 +24,7 @@
 
 #include <ModelAPI_Session.h>
 #include <ModelAPI_AttributeString.h>
+#include <ModelAPI_AttributeBoolean.h>
 #include <ExchangePlugin_Dump.h>
 
 #include <LightApp_Study.h>
@@ -67,7 +68,6 @@ bool SHAPERGUI_DataModel::open(const QString& thePath, CAM_Study* theStudy, QStr
   LightApp_Study* aStudy = dynamic_cast<LightApp_Study*>( 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();
@@ -85,7 +85,7 @@ bool SHAPERGUI_DataModel::open(const QString& thePath, CAM_Study* theStudy, QStr
 
 bool SHAPERGUI_DataModel::save(QStringList& theFiles)
 {
-  // Pyblish to study before saving of the data model
+  // Publish to study before saving of the data model
   myModule->publishToStudy();
 
   LightApp_DataModel::save( theFiles );
@@ -157,13 +157,13 @@ void SHAPERGUI_DataModel::update(LightApp_DataObject* theObj, LightApp_Study* th
 
 void SHAPERGUI_DataModel::initRootObject()
 {
-  //LightApp_Study* study = dynamic_cast<LightApp_Study*>( module()->application()->activeStudy() );
-  //CAM_ModuleObject *aModelRoot = dynamic_cast<CAM_ModuleObject*>(root());
-  //if(study && aModelRoot == NULL) {
-  //  aModelRoot = createModuleObject( study->root() );
-  //  aModelRoot->setDataModel( this );
-  //  setRoot(aModelRoot);
-  //}
+  LightApp_Study* study = dynamic_cast<LightApp_Study*>( module()->application()->activeStudy() );
+  CAM_ModuleObject *aModelRoot = dynamic_cast<CAM_ModuleObject*>(root());
+  if(study && aModelRoot == NULL) {
+    aModelRoot = createModuleObject( study->root() );
+    aModelRoot->setDataModel( this );
+    setRoot(aModelRoot);
+  }
 }
 
 void SHAPERGUI_DataModel::removeDirectory(const QString& theDirectoryName)
@@ -184,6 +184,14 @@ bool SHAPERGUI_DataModel::dumpPython(const QString& thePath, CAM_Study* theStudy
   ModelAPI_Session::get()->startOperation(ExchangePlugin_Dump::ID());
   FeaturePtr aFeature = aDoc->addFeature(ExchangePlugin_Dump::ID());
   if (aFeature.get()) {
+    // keep path to the true dumping directory for external files dumping
+    AttributeStringPtr aAttr = aFeature->string(ExchangePlugin_Dump::DUMP_DIR_ID());
+    if (aAttr.get()) {
+      QString aDirPath = QFileInfo(thePath).path();
+      aAttr->setValue(aDirPath.toStdString());
+    }
+
+    // tmp path to write the script
     std::string aTmpDir = aStudy->GetTmpDir(thePath.toStdString().c_str(), isMultiFile);
     std::string aFileName = aTmpDir + DUMP_NAME;
 
@@ -191,7 +199,7 @@ bool SHAPERGUI_DataModel::dumpPython(const QString& thePath, CAM_Study* theStudy
       QFile::remove(aFileName.c_str());
     }
 
-    AttributeStringPtr aAttr = aFeature->string(ExchangePlugin_Dump::FILE_PATH_ID());
+    aAttr = aFeature->string(ExchangePlugin_Dump::FILE_PATH_ID());
     if (aAttr.get())
       aAttr->setValue(aFileName);
 
@@ -199,10 +207,14 @@ bool SHAPERGUI_DataModel::dumpPython(const QString& thePath, CAM_Study* theStudy
     if (aAttr.get())
       aAttr->setValue(".py");
 
+#ifdef HAVE_SALOME
+    aFeature->boolean(ExchangePlugin_Dump::EXPORT_VARIABLES_ID())->setValue(true);
+#endif
+
     ModelAPI_Session::get()->finishOperation();
 
     if (QFile::exists(aFileName.c_str())) {
-        QFile aInFile(aFileName.c_str());
+      QFile aInFile(aFileName.c_str());
       if (!aInFile.open(QIODevice::ReadOnly | QIODevice::Text))
         return false;
       QTextStream aText(&aInFile);
@@ -226,7 +238,7 @@ bool SHAPERGUI_DataModel::dumpPython(const QString& thePath, CAM_Study* theStudy
         return false;
 
       QTextStream aOut(&aOutFile);
-      aOut << aTrace.toStdString().c_str() << "\n";
+      aOut << aTrace << "\n";
       aOut.flush();
       aOutFile.close();
 
@@ -237,4 +249,3 @@ bool SHAPERGUI_DataModel::dumpPython(const QString& thePath, CAM_Study* theStudy
   }
   return false;
 }
-