Salome HOME
Set font of the Root Label the same as in Tree View
[modules/shaper.git] / src / Model / Model_ResultCompSolid.cpp
index 4747d651174244f7cc3b9abc858af3067f289b54..4b83d3d5941327966c599f75e3bb596e635599d5 100755 (executable)
@@ -23,8 +23,7 @@
 Model_ResultCompSolid::Model_ResultCompSolid()
 {
   myBuilder = new Model_BodyBuilder(this);
-  setIsConcealed(false);
-  myIsDisabled = true; // by default it is not initialized and false to be after created
+  myLastConcealed = false;
   updateSubs(shape()); // in case of open, etc.
 }
 
@@ -99,13 +98,41 @@ bool Model_ResultCompSolid::setDisabled(std::shared_ptr<ModelAPI_Result> theThis
 
 bool Model_ResultCompSolid::isConcealed()
 {
-  if (ModelAPI_ResultCompSolid::isConcealed())
-    return true;
+  bool aResult = false;;
+  if (ModelAPI_ResultCompSolid::isConcealed()) {
+    aResult = true;
+  } else {
+    std::vector<std::shared_ptr<ModelAPI_ResultBody> >::const_iterator aSubIter = mySubs.cbegin();
+    for(; aSubIter != mySubs.cend(); aSubIter++)
+      if ((*aSubIter)->isConcealed())
+        aResult = true;
+  }
+  if (myLastConcealed != aResult) {
+    myLastConcealed = aResult;
+    setIsConcealed(aResult); // set for all subs the same result
+  }
+  return aResult;
+}
+
+void Model_ResultCompSolid::setIsConcealed(const bool theValue)
+{
+  ModelAPI_ResultCompSolid::setIsConcealed(theValue);
   std::vector<std::shared_ptr<ModelAPI_ResultBody> >::const_iterator aSubIter = mySubs.cbegin();
-  for(; aSubIter != mySubs.cend(); aSubIter++)
-    if ((*aSubIter)->isConcealed())
-      return true;
-  return false;
+  for(; aSubIter != mySubs.cend(); aSubIter++) {
+    if ((*aSubIter)->isConcealed() != theValue) {
+      (*aSubIter)->setIsConcealed(theValue);
+      if (theValue) { // hidden unit must be redisplayed (hidden)
+        ModelAPI_EventCreator::get()->sendDeleted(document(), (*aSubIter)->groupName());
+        // redisplay for the viewer (it must be disappeared also)
+        static Events_ID EVENT_DISP = 
+          Events_Loop::loop()->eventByName(EVENT_OBJECT_TO_REDISPLAY);
+        ModelAPI_EventCreator::get()->sendUpdated(*aSubIter, EVENT_DISP);
+      } else { // was not concealed become concealed => delete event
+        static Events_ID anEvent = Events_Loop::eventByName(EVENT_OBJECT_CREATED);
+        ModelAPI_EventCreator::get()->sendUpdated(*aSubIter, anEvent);
+      }
+    }
+  }
 }
 
 void Model_ResultCompSolid::updateSubs(const std::shared_ptr<GeomAPI_Shape>& theThisShape)
@@ -139,6 +166,7 @@ void Model_ResultCompSolid::updateSubs(const std::shared_ptr<GeomAPI_Shape>& the
         aECreator->sendUpdated(aSub, EVENT_UPD);
       }
       aSub->setDisabled(aSub, isDisabled());
+      aSub->setIsConcealed(myLastConcealed);
     }
     // erase left, unused results
     while(mySubs.size() > aSubIndex) {
@@ -160,3 +188,8 @@ void Model_ResultCompSolid::updateSubs(const std::shared_ptr<GeomAPI_Shape>& the
     aECreator->sendUpdated(data()->owner(), EVENT_DISP);
   }
 }
+
+bool Model_ResultCompSolid::isLatestEqual(const std::shared_ptr<GeomAPI_Shape>& theShape)
+{
+  return myBuilder->isLatestEqual(theShape);
+}