]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Update tree on Undo/Redo
authorvsv <vitaly.smetannikov@opencascade.com>
Fri, 11 Apr 2014 14:57:58 +0000 (18:57 +0400)
committervsv <vitaly.smetannikov@opencascade.com>
Fri, 11 Apr 2014 14:57:58 +0000 (18:57 +0400)
src/XGUI/XGUI_DataTreeModel.h
src/XGUI/XGUI_DocumentDataModel.cpp
src/XGUI/XGUI_PartDataModel.cpp
src/XGUI/XGUI_PartDataModel.h

index 8f0ffd8d32303cf2a29cc6229b070d21a520f14b..359fbdabdeac434cef82644fa682ff003daa2c80 100644 (file)
@@ -25,6 +25,9 @@ public:
   //! Returns parent index of the given feature
   virtual QModelIndex findParent(const std::shared_ptr<ModelAPI_Feature>& theFeature) const = 0;
 
+  //! Returns index corresponded to the group
+  virtual QModelIndex findGroup(const std::string& theGroup) const = 0;
+
 protected:
   std::shared_ptr<ModelAPI_Document> myDocument;
 };
index 7c4a0c2c84dfc6d2e21128eaf5a04f989fd643b9..b5d86ed231a647eaeb60b1c482050237dc9e77a4 100644 (file)
@@ -83,12 +83,37 @@ void XGUI_DocumentDataModel::processEvent(const Event_Message* theMessage)
     std::shared_ptr<ModelAPI_Document> aDoc = aUpdMsg->document();
 
     if (aDoc == myDocument) {  // If root objects
-      int aStart = myPartModels.count() - 2;
-      delete myPartModels.last();
-      myPartModels.removeLast();
-      beginRemoveRows(QModelIndex(), aStart, aStart);
-      endRemoveRows();
+      if (aUpdMsg->group().compare(PARTS_GROUP) == 0) { // Updsate only Parts group
+        int aStart = myModel->rowCount(QModelIndex()) + myPartModels.size() - 1;
+        beginRemoveRows(QModelIndex(), aStart, aStart);
+        delete myPartModels.last();
+        myPartModels.removeLast();
+        endRemoveRows();
+      } else { // Update top groups (other except parts
+        QModelIndex aIndex = myModel->findGroup(aUpdMsg->group());
+        int aStart = myModel->rowCount(aIndex);
+        aIndex = createIndex(aIndex.row(), aIndex.column(), (void*)getModelIndex(aIndex));
+        beginRemoveRows(aIndex, aStart, aStart);
+        endRemoveRows();
+      }
+    } 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);
+          break;
+        }
+      }
+      if (aPartModel) {
+        QModelIndex aIndex = aPartModel->findGroup(aUpdMsg->group());
+        int aStart = aPartModel->rowCount(aIndex);
+        aIndex = createIndex(aIndex.row(), aIndex.column(), (void*)getModelIndex(aIndex));
+        beginRemoveRows(aIndex, aStart, aStart);
+        endRemoveRows();
+      }
     }
+
   // Reset whole tree **************************
   } else {  
     beginResetModel();
index e58d06ef0206a69e733f21d4d36f8451a9614aae..f0e1d9f4b7c0d8fc4d7e0c40f5148be514c0a995 100644 (file)
@@ -152,6 +152,15 @@ QModelIndex XGUI_TopDataModel::findParent(const std::shared_ptr<ModelAPI_Feature
   return QModelIndex();
 }
 
+QModelIndex XGUI_TopDataModel::findGroup(const std::string& theGroup) const
+{
+  if (theGroup.compare(PARAMETERS_GROUP) == 0)
+    return createIndex(0, 0, (quintptr) ParamsFolder);
+  if (theGroup.compare(CONSTRUCTIONS_GROUP) == 0)
+    return createIndex(1, 0, (quintptr) ConstructFolder);
+  return QModelIndex();
+}
+
 
 //******************************************************************
 //******************************************************************
@@ -327,4 +336,13 @@ QModelIndex XGUI_PartDataModel::findParent(const std::shared_ptr<ModelAPI_Featur
   if (theFeature->getGroup().compare(CONSTRUCTIONS_GROUP) == 0)
     return createIndex(1, 0, (quintptr) ConstructFolder);
   return QModelIndex();
+}
+
+QModelIndex XGUI_PartDataModel::findGroup(const std::string& theGroup) const
+{
+  if (theGroup.compare(PARAMETERS_GROUP) == 0)
+    return createIndex(0, 0, (quintptr) ParamsFolder);
+  if (theGroup.compare(CONSTRUCTIONS_GROUP) == 0)
+    return createIndex(1, 0, (quintptr) ConstructFolder);
+  return QModelIndex();
 }
\ No newline at end of file
index 1b3b069bf1c1d152cf9a85c41f4d30d3a579a57d..7910724aa0680926a1e5b6a429ba1e6e31f37f79 100644 (file)
@@ -35,8 +35,12 @@ public:
   //! Returns 0 if the given index is not index of a feature
   virtual FeaturePtr feature(const QModelIndex& theIndex) const;
 
+  //! Returns parent index of the given feature
   virtual QModelIndex findParent(const std::shared_ptr<ModelAPI_Feature>& theFeature) const;
 
+  //! Returns index corresponded to the group
+  virtual QModelIndex findGroup(const std::string& theGroup) const;
+
 private:
   //! Types of QModelIndexes
   enum DataIds {
@@ -86,6 +90,9 @@ public:
   //! Returns parent index of the given feature
   virtual QModelIndex findParent(const std::shared_ptr<ModelAPI_Feature>& theFeature) const;
 
+  //! Returns index corresponded to the group
+  virtual QModelIndex findGroup(const std::string& theGroup) const;
+
 private: 
   std::shared_ptr<ModelAPI_Document> featureDocument() const;