]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Improvement of the structure
authorvsv <vsv@opencascade.com>
Thu, 19 Jul 2018 14:44:36 +0000 (17:44 +0300)
committervsv <vsv@opencascade.com>
Thu, 19 Jul 2018 14:44:36 +0000 (17:44 +0300)
src/ModuleBase/ModuleBase_ITreeNode.h
src/XGUI/XGUI_DataModel.cpp
src/XGUI/XGUI_DataModel.h

index 9e33eeae5fc9d752bd844d13f27fc034084753fd..ffb69767210fa8c58d7bfb81257b8066062bdc5e 100644 (file)
@@ -132,6 +132,22 @@ public:
   virtual ModuleBase_ITreeNode* findParent(const DocumentPtr& theDoc, QString theGroup)
   { return 0; }
 
+  /// Returns root node of a data tree of the given document
+  /// \param theDoc a document
+  /// \return a tree node which is a root of the document structure
+  virtual ModuleBase_ITreeNode* findRoot(const DocumentPtr& theDoc)
+  {
+    if (document() == theDoc)
+      return this;
+    ModuleBase_ITreeNode* aRoot;
+    foreach(ModuleBase_ITreeNode* aNode, myChildren) {
+      aRoot = aNode->findRoot(theDoc);
+      if (aRoot)
+        return aRoot;
+    }
+    return 0;
+  }
+
 protected:
   ModuleBase_ITreeNode* myParent; //!< Parent of the node
   QTreeNodesList myChildren; //!< Children of the node
index d8fd37391df02b057a66b51bab9d42229f61cf10..dd78f272b310d613f9e96c1cce1e202606a2845a 100644 (file)
@@ -117,8 +117,10 @@ void XGUI_DataModel::processEvent(const std::shared_ptr<Events_Message>& theMess
     std::set<ObjectPtr> aObjects = aUpdMsg->objects();
     QObjectPtrList aCreated;
     std::set<ObjectPtr>::const_iterator aIt;
-    for (aIt = aObjects.cbegin(); aIt != aObjects.cend(); aIt++)
-      aCreated.append(*aIt);
+    for (aIt = aObjects.cbegin(); aIt != aObjects.cend(); aIt++) {
+      if ((*aIt)->isInHistory())
+        aCreated.append(*aIt);
+    }
     QTreeNodesList aNodes = myRoot->objectCreated(aCreated);
     ModuleBase_ITreeNode* aParent;
     int aRow = 0;
@@ -149,18 +151,16 @@ void XGUI_DataModel::processEvent(const std::shared_ptr<Events_Message>& theMess
       ModuleBase_ITreeNode* aNode = myRoot->findParent(aDoc, aGroup.c_str());
       if (aNode) {
         aNode->update();
-        int aRows = aNode->childrenCount();
-        if (aRows) {
-          QModelIndex aParent = getIndex(aNode, 0);
-          QModelIndex aFirstIdx = aParent.child(0, 0);
-          QModelIndex aLastIdx = aParent.child(aRows - 1, 2);
-          dataChanged(aFirstIdx, aLastIdx);
-        }
+        updateSubTree(aNode);
       }
     }
   }
   else if (theMessage->eventID() == Events_Loop::loop()->eventByName(EVENT_DOCUMENT_CHANGED)) {
     DocumentPtr aDoc = ModelAPI_Session::get()->activeDocument();
+    ModuleBase_ITreeNode* aRoot = myRoot->findRoot(aDoc);
+    if (aRoot) {
+      updateSubTree(aRoot);
+    }
   }
   //if (myIsEventsProcessingBlocked)
   //  return;
@@ -460,11 +460,10 @@ QModelIndex XGUI_DataModel::objectIndex(const ObjectPtr theObject, int theColumn
 {
   ModuleBase_ITreeNode* aNode = myRoot->subNode(theObject);
   if (aNode) {
-    ModuleBase_ITreeNode* aParent = aNode->parent();
-    assert(aParent);
     return getIndex(aNode, theColumn);
   }
   return QModelIndex();
+
   //std::string aType = theObject->groupName();
   //DocumentPtr aDoc = theObject->document();
   //int aRow = aDoc->index(theObject, true);
@@ -1336,6 +1335,20 @@ QModelIndex XGUI_DataModel::getParentIndex(ModuleBase_ITreeNode* theNode, int th
 
 QModelIndex XGUI_DataModel::getIndex(ModuleBase_ITreeNode* theNode, int thCol) const
 {
+  if (theNode == myRoot)
+    return QModelIndex();
   int aRow = theNode->parent()->nodeRow(theNode);
-  return createIndex(aRow, 0, theNode);
+  return createIndex(aRow, thCol, theNode);
+}
+
+
+void XGUI_DataModel::updateSubTree(ModuleBase_ITreeNode* theParent)
+{
+  int aRows = theParent->childrenCount();
+  if (aRows) {
+    QModelIndex aParent = getIndex(theParent, 0);
+    QModelIndex aFirstIdx = aParent.child(0, 0);
+    QModelIndex aLastIdx = aParent.child(aRows - 1, 2);
+    dataChanged(aFirstIdx, aLastIdx);
+  }
 }
index 477370cc6309fcc78249930dfcc1f7829da2399e..5e446bf0e55ae13e021dfcd83b9785e29099934f 100644 (file)
@@ -172,6 +172,8 @@ private:
 
   QModelIndex getIndex(ModuleBase_ITreeNode* theNode, int thCol) const;
 
+  void updateSubTree(ModuleBase_ITreeNode* theParent);
+
   /// Find a root index which contains objects of the given document
   /// \param theDoc the document object
   //QModelIndex findDocumentRootIndex(const ModelAPI_Document* theDoc, int aColumn = 1) const;