Salome HOME
Issue #3123: Provide chain of create Angle constraint operations
[modules/shaper.git] / src / PartSet / PartSet_TreeNodes.cpp
index c08539925ec34de2a67ea6c9985c940525bc0739..e886365e2b28a63e4b789b5108d2b33b4cba15e3 100644 (file)
@@ -232,6 +232,9 @@ void PartSet_ObjectNode::update()
 
     // If the object is a field result then delete extra sub-objects
     if (aFieldRes.get()) {
+      // Call shape in order to update content of Field.
+      // It is necessary to do for cases when field was created by script when module is inactive.
+      aFieldRes->shape();
       while (myChildren.size() > aNb) {
         ModuleBase_ITreeNode* aNode = myChildren.last();
         myChildren.removeAll(aNode);
@@ -273,16 +276,18 @@ void PartSet_ObjectNode::update()
         }
       }
       else if (aFieldRes.get()) {
-        ModelAPI_ResultField::ModelAPI_FieldStep* aStep = aFieldRes->step(i);
-        if (i < myChildren.size()) {
-          PartSet_StepNode* aStepNode = static_cast<PartSet_StepNode*>(myChildren.at(i));
-          if (aStepNode->entity() != aStep) {
-            aStepNode->setEntity(aStep);
+        FieldStepPtr aStep = aFieldRes->step(i);
+        if (aStep.get()) {
+          if (i < myChildren.size()) {
+            PartSet_StepNode* aStepNode = static_cast<PartSet_StepNode*>(myChildren.at(i));
+            if (aStepNode->object() != aStep) {
+              aStepNode->setObject(aStep);
+            }
+          }
+          else {
+            aNode = new PartSet_StepNode(aStep, this);
+            myChildren.append(aNode);
           }
-        }
-        else {
-          aNode = new PartSet_StepNode(aStep, this);
-          myChildren.append(aNode);
         }
       }
     }
@@ -309,6 +314,10 @@ QTreeNodesList PartSet_ObjectNode::objectCreated(const QObjectPtrList& theObject
     ResultFieldPtr aFieldRes = std::dynamic_pointer_cast<ModelAPI_ResultField>(myObject);
     ObjectPtr aBody;
     int i;
+    // Call shape in order to update content of Field.
+    // It is necessary to do for cases when field was created by script when module is inactive.
+    if (aFieldRes.get())
+      aFieldRes->shape();
     for (i = 0; i < aNb; i++) {
       aBody = subObject(i);
       if (aBody.get()) {
@@ -327,16 +336,18 @@ QTreeNodesList PartSet_ObjectNode::objectCreated(const QObjectPtrList& theObject
         }
       }
       else {
-        ModelAPI_ResultField::ModelAPI_FieldStep* aStep = aFieldRes->step(i);
-        if (i < myChildren.size()) {
-          PartSet_StepNode* aStepNode = static_cast<PartSet_StepNode*>(myChildren.at(i));
-          if (aStepNode->entity() != aStep) {
-            aStepNode->setEntity(aStep);
+        FieldStepPtr aStep = aFieldRes->step(i);
+        if (aStep.get()) {
+          if (i < myChildren.size()) {
+            PartSet_StepNode* aStepNode = static_cast<PartSet_StepNode*>(myChildren.at(i));
+            if (aStepNode->object() != aStep) {
+              aStepNode->setObject(aStep);
+            }
+          }
+          else {
+            aNode = new PartSet_StepNode(aStep, this);
+            myChildren.append(aNode);
           }
-        }
-        else {
-          aNode = new PartSet_StepNode(aStep, this);
-          myChildren.append(aNode);
         }
       }
     }
@@ -1194,11 +1205,24 @@ QTreeNodesList PartSet_ObjectFolderNode::objectsDeleted(const DocumentPtr& theDo
 QVariant PartSet_StepNode::data(int theColumn, int theRole) const
 {
   if ((theColumn == 1) && (theRole == Qt::DisplayRole)) {
-    ModelAPI_ResultField::ModelAPI_FieldStep* aStep =
-      dynamic_cast<ModelAPI_ResultField::ModelAPI_FieldStep*>(myEntity);
+    FieldStepPtr aStep =
+      std::dynamic_pointer_cast<ModelAPI_ResultField::ModelAPI_FieldStep>(myObject);
 
     return "Step " + QString::number(aStep->id() + 1) + " " +
       aStep->field()->textLine(aStep->id()).c_str();
   }
-  return PartSet_TreeNode::data(theColumn, theRole);
+  return PartSet_ObjectNode::data(theColumn, theRole);
+}
+
+ModuleBase_ITreeNode::VisibilityState PartSet_StepNode::visibilityState() const
+{
+  Qt::ItemFlags aFlags = flags(1);
+  if (aFlags == Qt::ItemFlags())
+    return NoneState;
+
+  ModuleBase_IWorkshop* aWork = workshop();
+  if (aWork->isVisible(myObject))
+    return Visible;
+  else
+    return Hidden;
 }