Salome HOME
Issue #189: Clear GUI state on module closing
authorvsv <vitaly.smetannikov@opencascade.com>
Thu, 30 Oct 2014 17:00:54 +0000 (20:00 +0300)
committervsv <vitaly.smetannikov@opencascade.com>
Thu, 30 Oct 2014 17:00:54 +0000 (20:00 +0300)
src/NewGeom/NewGeom_DataModel.cpp
src/XGUI/XGUI_DocumentDataModel.cpp
src/XGUI/XGUI_DocumentDataModel.h
src/XGUI/XGUI_ObjectsBrowser.cpp
src/XGUI/XGUI_ObjectsBrowser.h
src/XGUI/XGUI_Workshop.cpp
src/XGUI/XGUI_Workshop.h

index 76d8480466297a0f6fcf61821fa66d16ff43ba5f..8593ab6323e07099cf5e6d28a38c913b9f84776d 100644 (file)
@@ -65,8 +65,7 @@ bool NewGeom_DataModel::saveAs(const QString& thePath, CAM_Study* theStudy, QStr
 
 bool NewGeom_DataModel::close()
 {
-  SessionPtr aMgr = ModelAPI_Session::get();
-  aMgr->moduleDocument()->close();
+  myModule->workshop()->closeDocument();
   return LightApp_DataModel::close();
 }
 
index 2744d196d4114b08b7ae71f7ed55397bb2b75454..14a8735b1dcfaec4f4e236cf0c5f189ba3409ae8 100644 (file)
@@ -42,6 +42,7 @@ XGUI_DocumentDataModel::XGUI_DocumentDataModel(QObject* theParent)
 XGUI_DocumentDataModel::~XGUI_DocumentDataModel()
 {
   clearModelIndexes();
+  clearSubModels();
 }
 
 void XGUI_DocumentDataModel::processEvent(const boost::shared_ptr<Events_Message>& theMessage)
@@ -80,10 +81,9 @@ void XGUI_DocumentDataModel::processEvent(const boost::shared_ptr<Events_Message
         }
       } else {  // if sub-objects of first level nodes
         XGUI_PartModel* aPartModel = 0;
-        QList<XGUI_PartModel*>::const_iterator aIt;
-        for (aIt = myPartModels.constBegin(); aIt != myPartModels.constEnd(); ++aIt) {
-          if ((*aIt)->hasDocument(aDoc)) {
-            aPartModel = (*aIt);
+        foreach (XGUI_PartModel* aPart, myPartModels) {
+          if (aPart->hasDocument(aDoc)) {
+            aPartModel = aPart;
             break;
           }
         }
@@ -123,10 +123,9 @@ void XGUI_DocumentDataModel::processEvent(const boost::shared_ptr<Events_Message
         }
       } else {
         XGUI_PartModel* aPartModel = 0;
-        QList<XGUI_PartModel*>::const_iterator aIt;
-        for (aIt = myPartModels.constBegin(); aIt != myPartModels.constEnd(); ++aIt) {
-          if ((*aIt)->hasDocument(aDoc)) {
-            aPartModel = (*aIt);
+        foreach (XGUI_PartModel* aPart, myPartModels) {
+          if (aPart->hasDocument(aDoc)) {
+            aPartModel = aPart;
             break;
           }
         }
@@ -361,12 +360,18 @@ QModelIndex* XGUI_DocumentDataModel::getModelIndex(const QModelIndex& theIndex)
 
 void XGUI_DocumentDataModel::clearModelIndexes()
 {
-  QList<QModelIndex*>::const_iterator aIt;
-  for (aIt = myIndexes.constBegin(); aIt != myIndexes.constEnd(); ++aIt)
-    delete (*aIt);
+  foreach (QModelIndex* aIndex, myIndexes) 
+    delete aIndex;
   myIndexes.clear();
 }
 
+void XGUI_DocumentDataModel::clearSubModels()
+{
+  foreach (XGUI_PartModel* aPart, myPartModels) 
+    delete aPart;
+  myPartModels.clear();
+}
+
 ObjectPtr XGUI_DocumentDataModel::object(const QModelIndex& theIndex) const
 {
   if (theIndex.internalId() == PartsFolder)
@@ -570,3 +575,13 @@ QModelIndex XGUI_DocumentDataModel::objectIndex(const ObjectPtr theObject) const
   }
   return QModelIndex();
 }
+
+
+void XGUI_DocumentDataModel::clear()
+{
+  clearModelIndexes();
+  clearSubModels();
+  myActivePart = 0;
+  myActivePartIndex = QModelIndex();
+  myModel->setItemsColor(ACTIVE_COLOR);
+}
index c2436082783f1e3851053acd4f01f4c3018a15ac..a7e9fc944cb6c99ecd0e03fb8131fa284aec0065 100644 (file)
@@ -78,6 +78,10 @@ Q_OBJECT
 
   void rebuildDataTree();
 
+  //! Clear internal data
+  void clear();
+
+
  private:
 
   enum
@@ -98,6 +102,9 @@ Q_OBJECT
   //! Deletes all saved pointers on QModelIndex objects.
   void clearModelIndexes();
 
+  //! Deletes all saved pointers on QModelIndex objects.
+  void clearSubModels();
+
   //! Removes sub-model on removing a part object. Also it removes QModelIndex-es which refer to this model
   void removeSubModel(int theModelId);
 
index 4268115fde4477d1bbe52412c4d440a4ca291c04..699d6e518e2dcd9b40810f1d0bd3970f7bd15c33 100644 (file)
@@ -84,6 +84,14 @@ void XGUI_DataTree::commitData(QWidget* theEditor)
   }
 }
 
+void XGUI_DataTree::clear() 
+{
+  mySelectedData.clear();
+  XGUI_DocumentDataModel* aModel = dataModel();
+  aModel->clear();
+  reset();
+}
+
 //********************************************************************
 //********************************************************************
 //********************************************************************
@@ -348,3 +356,11 @@ void XGUI_ObjectsBrowser::processEvent(const boost::shared_ptr<Events_Message>&
 { 
   myDocModel->processEvent(theMessage); 
 }
+
+
+//***************************************************
+void XGUI_ObjectsBrowser::clearContent()  
+{ 
+  myObjectsList.clear();
+  myTreeView->clear(); 
+}
index ebcaffe08ef30deee9dfd8b56a8cf1e295f5d7a3..9e7f901d75224c3d9782242cde3c288a30233b1a 100644 (file)
@@ -36,6 +36,9 @@ signals:
   //! Emited on context menu request
   void contextMenuRequested(QContextMenuEvent* theEvent);
 
+public slots:
+  virtual void clear();
+
  protected slots:
   virtual void commitData(QWidget* theEditor);
 
@@ -96,6 +99,9 @@ Q_OBJECT
 
   void processEvent(const boost::shared_ptr<Events_Message>& theMessage);
 
+  // Resets the object browser into initial state
+  void clearContent();
+
 signals:
   //! Emited when selection is changed
   void selectionChanged();
index 22358aab96a01a69400684a6fc335bd2a2d5d9ed..1d72cff78d8cb26ae25ff9cebddb7fbbb925eb40 100644 (file)
@@ -1306,3 +1306,15 @@ void XGUI_Workshop::setDisplayMode(const QList<ObjectPtr>& theList, int theMode)
   if (theList.size() > 0)
     myDisplayer->updateViewer();
 }
+
+//**************************************************************
+void XGUI_Workshop::closeDocument()
+{
+  myDisplayer->closeLocalContexts();
+  myDisplayer->eraseAll();
+  objectBrowser()->clearContent();
+
+  SessionPtr aMgr = ModelAPI_Session::get();
+  aMgr->moduleDocument()->close();
+  objectBrowser()->clearContent();
+}
index d5159189aec9465cd207beae2dd10569b5746560..764e19f2d626079bbe01ce7dffca429f9ddd32ba 100644 (file)
@@ -214,6 +214,8 @@ signals:
 
   void activateLastPart();
 
+  void closeDocument();
+
  protected:
   bool event(QEvent * theEvent);
   //Event-loop processing methods: