]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Persistent correction in full Salome mode.
authornds <natalia.donis@opencascade.com>
Fri, 19 Dec 2014 07:00:33 +0000 (10:00 +0300)
committernds <natalia.donis@opencascade.com>
Fri, 19 Dec 2014 07:00:33 +0000 (10:00 +0300)
Update the Salome application action buttons(especially 'Save')
An improvement in the 'Save' method of model to put to result all files(even already loaded).
Without this improvement, the saved file is not correcly opened in the full salome mode.

src/Model/Model_Document.cpp
src/NewGeom/NewGeom_DataModel.cpp
src/NewGeom/NewGeom_DataModel.h
src/NewGeom/NewGeom_Module.cpp
src/NewGeom/NewGeom_Module.h
src/XGUI/XGUI_Workshop.cpp
src/XGUI/XGUI_Workshop.h

index 0eca5e7948f158b793b8e68354a013d514e6d114..c4fb2e7aaa8c1003d46b2782231fad0ed83f5ae3 100644 (file)
@@ -226,6 +226,7 @@ bool Model_Document::save(const char* theFileName, std::list<std::string>& theRe
               TCollection_AsciiString aDestinationDir(DocFileName(theFileName, aDocName));
               OSD_Path aDestination(aDestinationDir);
               aFile.Copy(aDestination);
+              theResults.push_back(aDestinationDir.ToCString());
             } else {
               Events_Error::send(
                 std::string("Can not open file ") + aSubPath.ToCString() + " for saving");
index 34922cbbd197263842944d1a4d8271b0e54459fb..88e7db728e938d5396200949082ac24b0b026ab3 100644 (file)
@@ -40,8 +40,6 @@ bool NewGeom_DataModel::open(const QString& thePath, CAM_Study* theStudy, QStrin
   // The following code creates a new tmp directory with a copy of files.
   QString aTmpDir = theFiles.first();
 
-  //LightApp_Driver aDriver;
-  //QString aNewTmpDir = QString(aDriver.GetTmpDir("", false).c_str());
   LightApp_Study* aStudy = dynamic_cast<LightApp_Study*>( myModule->application()->activeStudy() );
   QString aNewTmpDir = aStudy->GetTmpDir("", false).c_str();
 
@@ -57,6 +55,13 @@ bool NewGeom_DataModel::open(const QString& thePath, CAM_Study* theStudy, QStrin
     if (!QFile::copy(aCurrentFile, aNewFile))
       isDone = false;
   }
+  if (isDone) {
+    myTmpDirectory = aNewTmpDir;
+  }
+  else {
+    removeDirectory(aNewTmpDir);
+    myTmpDirectory = "";
+  }
 
   SessionPtr aMgr = ModelAPI_Session::get();
   aMgr->load(qPrintable(aNewTmpDir));
@@ -103,6 +108,8 @@ 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();
 }
 
@@ -125,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);
+}
+
index 184038a7fca5c39be89f4b45348ec22ebfe4bbb3..1024f275d6526488dff58f37acee2f9a42fcec8c 100644 (file)
@@ -27,8 +27,18 @@ class NewGeom_EXPORT NewGeom_DataModel : public LightApp_DataModel
 
   virtual void update(LightApp_DataObject* theObj = 0, LightApp_Study* theStudy = 0);
 
+protected:
+  /**
+   * Removes the directory with content if it exists
+   * \param theDirectoryName a directory name
+   */
+  static void removeDirectory(const QString& theDirectoryName);
+
  private:
   QString myStudyPath;
+  QString myTmpDirectory; /// a path to the temporary directory, created by opening a document file
+  /// it should be created because the files reading is postponed in the module. The directory
+  // should be removed after the model document is closed.
   NewGeom_Module* myModule;
 };
 
index b1a115e23a101eb39a53c97dda5b9d20bb8805d8..c9d875f1373ed6781255f440c61e6cfbdc2e6a38 100644 (file)
@@ -84,6 +84,9 @@ NewGeom_Module::NewGeom_Module()
       mySelector(0), myIsOpened(0), myPopupMgr(0)
 {
   myWorkshop = new XGUI_Workshop(this);
+  connect(myWorkshop, SIGNAL(commandStatusUpdated()),
+          this, SLOT(onUpdateCommandStatus()));
+
   myProxyViewer = new NewGeom_SalomeViewer(this);
 
   ModuleBase_Preferences::setResourceMgr(application()->resourceMgr());
@@ -236,6 +239,12 @@ void NewGeom_Module::onDefaultPreferences()
     pref->retrieve();
 }
 
+//******************************************************
+void NewGeom_Module::onUpdateCommandStatus()
+{
+  getApp()->updateActions();
+}
+
 //******************************************************
 NewGeom_OCCSelector* NewGeom_Module::createSelector(SUIT_ViewManager* theMgr)
 {
index f1f3ec09c5bca006e44f87ac4f5381265184409f..800d6b168957f26eaf83e805436f6a82598d469d 100644 (file)
@@ -99,6 +99,8 @@ Q_OBJECT
  protected slots:
   virtual void onViewManagerAdded(SUIT_ViewManager* theMgr);
   void onDefaultPreferences();
+  // Obtains the current application and updates its actions
+  void onUpdateCommandStatus();
 
  protected:
   CAM_DataModel* createDataModel();
index 0157532e7c003674280e4cac904f9934842ca83a..fa583caead741b96b4c821e5adfb8c5a49a147cb 100644 (file)
@@ -1070,6 +1070,7 @@ void XGUI_Workshop::updateCommandStatus()
     }
   }
   myActionsMgr->update();
+  emit commandStatusUpdated();
 }
 
 //******************************************************
index c35db675bea7811d3e401c589b12d92e52e2b25c..4db6052fe75adebdd0ddf4239698addb4f2e89d6 100644 (file)
@@ -192,6 +192,8 @@ Q_OBJECT
 signals:
   void salomeViewerSelection();
   void errorOccurred(const QString&);
+  //! the signal about the workshop actions states are updated.
+  void commandStatusUpdated();
 
  public slots:
   void updateCommandStatus();