Salome HOME
Fix for sketcher rectangle
authorvsv <vsv@opencascade.com>
Mon, 23 Jul 2018 10:03:36 +0000 (13:03 +0300)
committervsv <vsv@opencascade.com>
Mon, 23 Jul 2018 10:03:36 +0000 (13:03 +0300)
src/PartSet/PartSet_TreeNodes.cpp
src/XGUI/XGUI_DataModel.cpp

index 4bff2cb95fffd5b168e06d53bdda7cbf016182fd..c8f970d2a96199b0485f15b988252c7c1a6e5a98 100644 (file)
@@ -134,7 +134,9 @@ QVariant PartSet_ObjectNode::data(int theColumn, int theRole) const
 
 Qt::ItemFlags PartSet_ObjectNode::flags(int theColumn) const
 {
-  if (!myObject->isDisabled()) {
+  if (myObject->isDisabled()) {
+    return (theColumn == 2) ? Qt::ItemIsSelectable : aNullFlag;
+  } else {
     DocumentPtr aDoc = myObject->document();
     SessionPtr aSession = ModelAPI_Session::get();
     if (aSession->activeDocument() == aDoc)
@@ -362,11 +364,8 @@ QTreeNodesList PartSet_FeatureFolderNode::objectCreated(const QObjectPtrList& th
   // Process all folders
   ModuleBase_ITreeNode* aFoder = 0;
   foreach(ModuleBase_ITreeNode* aNode, myChildren) {
-    aFoder = dynamic_cast<PartSet_FolderNode*>(aNode);
-    if (!aFoder)
-      aFoder = dynamic_cast<PartSet_FeatureFolderNode*>(aNode);
-
-    if (aFoder) { // aFolder node
+    if ((aNode->type() == PartSet_FolderNode::typeId()) ||
+      (aNode->type() == PartSet_PartRootNode::typeId())) { // aFolder node
       QTreeNodesList aList = aNode->objectCreated(theObjects);
       if (aList.size() > 0)
         aResult.append(aList);
@@ -381,14 +380,17 @@ QTreeNodesList PartSet_FeatureFolderNode::objectCreated(const QObjectPtrList& th
       if ((aObj->groupName() == ModelAPI_Feature::group()) ||
         (aObj->groupName() == ModelAPI_Folder::group())){
         ModuleBase_ITreeNode* aNode = createNode(aObj);
-        aIdx = aDoc->index(aObj, true) + aNb;
-        bool aHasObject = (aIdx < myChildren.size()) && (myChildren.at(aIdx)->object() == aObj);
-        if (!aHasObject) {
-          if (aIdx < myChildren.size())
-            myChildren.insert(aIdx, aNode);
-          else
-            myChildren.append(aNode);
-          aResult.append(aNode);
+        aIdx = aDoc->index(aObj, true);
+        if (aIdx != -1) {
+          aIdx += aNb;
+          bool aHasObject = (aIdx < myChildren.size()) && (myChildren.at(aIdx)->object() == aObj);
+          if (!aHasObject) {
+            if (aIdx < myChildren.size())
+              myChildren.insert(aIdx, aNode);
+            else
+              myChildren.append(aNode);
+            aResult.append(aNode);
+          }
         }
       }
     }
@@ -429,7 +431,7 @@ QTreeNodesList PartSet_FeatureFolderNode::objectsDeleted(const DocumentPtr& theD
       aId++;
       if (aNode->object().get()) {
         aIndex = aDoc->index(aNode->object(), true);
-        if ((aIndex == -1) || (aId != aIndex))
+        if ((aIndex == -1) || (aId != (aIndex + aNb)))
           aDelList.append(aNode);
       }
     }
index de827fe49f8f8d667aeca60f7f548ffbd5a9a351..e28d26a55a55ce80552d16fdedbd6aaea1a02973 100644 (file)
@@ -98,13 +98,15 @@ void XGUI_DataModel::processEvent(const std::shared_ptr<Events_Message>& theMess
     bool aRebuildAll = false;
     for (aIt = aObjects.cbegin(); aIt != aObjects.cend(); aIt++) {
       ObjectPtr aObj = (*aIt);
+      if (!aObj->isInHistory())
+        continue;
+
       if (aObj->data()->isValid()) {
         if (aObj->groupName() == ModelAPI_Folder::group()) {
           aRebuildAll = true;
           break;
         }
-        if (aObj->isInHistory())
-          aCreated.append(*aIt);
+        aCreated.append(*aIt);
       }
     }
     if (aRebuildAll) {