]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Update just modified part tree in object browser
authorvsv <vitaly.smetannikov@opencascade.com>
Fri, 11 Apr 2014 09:03:50 +0000 (13:03 +0400)
committervsv <vitaly.smetannikov@opencascade.com>
Fri, 11 Apr 2014 09:03:50 +0000 (13:03 +0400)
src/XGUI/XGUI_DocumentDataModel.cpp

index b7f65b746b688082973d6bbb776a807edd10385e..1e53953f7a9af85c3e650f02ed1cbf91144f804d 100644 (file)
@@ -12,6 +12,7 @@
 
 
 #include <QIcon>
+#include <QString>
 
 
 XGUI_DocumentDataModel::XGUI_DocumentDataModel(QObject* theParent)
@@ -38,21 +39,32 @@ XGUI_DocumentDataModel::~XGUI_DocumentDataModel()
 
 void XGUI_DocumentDataModel::processEvent(const Event_Message* theMessage)
 {
-  beginResetModel();
-  int aNbParts = myDocument->featuresIterator(PARTS_GROUP)->numIterationsLeft();
-  if (myPartModels.size() != aNbParts) { // resize internal models
-    while (myPartModels.size() > aNbParts) {
-      delete myPartModels.last();
-      myPartModels.removeLast();
-    }
-    while (myPartModels.size() < aNbParts) {
-      myPartModels.append(new XGUI_PartDataModel(myDocument, this));
+  if (QString(theMessage->eventID().eventText()) == EVENT_FEATURE_CREATED) {
+    // Add a new part
+    int aStart = myModel->rowCount(QModelIndex()) + myPartModels.size();
+    beginInsertRows(QModelIndex(), aStart, aStart + 1);
+    XGUI_PartDataModel* aModel = new XGUI_PartDataModel(myDocument, this);
+    aModel->setPartId(myPartModels.count());
+    myPartModels.append(aModel);
+    endInsertRows();
+  } else {
+    // Reset whole tree
+    beginResetModel();
+    int aNbParts = myDocument->featuresIterator(PARTS_GROUP)->numIterationsLeft();
+    if (myPartModels.size() != aNbParts) { // resize internal models
+      while (myPartModels.size() > aNbParts) {
+        delete myPartModels.last();
+        myPartModels.removeLast();
+      }
+      while (myPartModels.size() < aNbParts) {
+        myPartModels.append(new XGUI_PartDataModel(myDocument, this));
+      }
+      for (int i = 0; i < myPartModels.size(); i++)
+        myPartModels.at(i)->setPartId(i);
     }
-    for (int i = 0; i < myPartModels.size(); i++)
-      myPartModels.at(i)->setPartId(i);
+    clearModelIndexes();
+    endResetModel();
   }
-  clearModelIndexes();
-  endResetModel();
 }
 
 QVariant XGUI_DocumentDataModel::data(const QModelIndex& theIndex, int theRole) const