Salome HOME
setDisplayed has to be called in order to synchronize internal state of the object
[modules/shaper.git] / src / Model / Model_Document.cpp
index df85c6e4b7ad3bc2c45cd6b72ec77b4b4660e945..0d35b4533b38d851d93a1bd76261738d40d90746 100644 (file)
@@ -171,7 +171,8 @@ bool Model_Document::load(const char* theFileName, DocumentPtr theThis)
     setCurrentFeature(currentFeature(false), false);
     aSession->setCheckTransactions(true);
     aSession->setActiveDocument(Model_Session::get()->moduleDocument(), false);
-    aSession->setActiveDocument(anApp->getDocument(myID), true);
+    // this is done in Part result "activate", so no needed here. Causes not-blue active part.
+    //aSession->setActiveDocument(anApp->getDocument(myID), true); 
   }
   return !isError;
 }
@@ -544,10 +545,10 @@ FeaturePtr Model_Document::addFeature(std::string theID, const bool theMakeCurre
     aDocToAdd = this;
   }
   if (aFeature) {
-    aDocToAdd->myObjs->addFeature(aFeature, currentFeature(false));
+    aDocToAdd->myObjs->addFeature(aFeature, aDocToAdd->currentFeature(false));
     if (!aFeature->isAction()) {  // do not add action to the data model
       if (theMakeCurrent)  // after all this feature stays in the document, so make it current
-        setCurrentFeature(aFeature, false);
+        aDocToAdd->setCurrentFeature(aFeature, false);
     } else { // feature must be executed
        // no creation event => updater not working, problem with remove part
       aFeature->execute();
@@ -653,17 +654,6 @@ void Model_Document::setCurrentFeature(std::shared_ptr<ModelAPI_Feature> theCurr
   TDF_Label aRefLab = generalLabel().FindChild(TAG_CURRENT_FEATURE);
   CompositeFeaturePtr aMain; // main feature that may nest the new current
   if (theCurrent.get()) {
-    /*
-    if (theVisible) { // make features below which are not in history also enabled: sketch subs
-      FeaturePtr aNext = myObjs->nextFeature(theCurrent);
-      for (; aNext.get(); aNext = myObjs->nextFeature(theCurrent)) {
-        if (aNext->isInHistory()) {
-          break; // next in history is not needed
-        } else { // next not in history is good for making current
-          theCurrent = aNext;
-        }
-      }
-    }*/
     aMain = std::dynamic_pointer_cast<ModelAPI_CompositeFeature>(theCurrent);
     if (!aMain.get()) {
       // if feature nests into compisite feature, make the composite feature as current
@@ -678,7 +668,20 @@ void Model_Document::setCurrentFeature(std::shared_ptr<ModelAPI_Feature> theCurr
         }
       }
     }
+  }
 
+  if (theVisible) { // make features below which are not in history also enabled: sketch subs
+    FeaturePtr aNext = 
+      theCurrent.get() ? myObjs->nextFeature(theCurrent) : myObjs->firstFeature();
+    for (; aNext.get(); aNext = myObjs->nextFeature(theCurrent)) {
+      if (aNext->isInHistory()) {
+        break; // next in history is not needed
+      } else { // next not in history is good for making current
+        theCurrent = aNext;
+      }
+    }
+  }
+  if (theCurrent.get()) {
     std::shared_ptr<Model_Data> aData = std::static_pointer_cast<Model_Data>(theCurrent->data());
     if (!aData.get()) return; // unknown case
     TDF_Label aFeatureLabel = aData->label().Father();
@@ -703,7 +706,9 @@ void Model_Document::setCurrentFeature(std::shared_ptr<ModelAPI_Feature> theCurr
     if (anIter == theCurrent) aPassed = true;
 
     bool aDisabledFlag = !aPassed;
-    if (aMain.get() && aMain->isSub(anIter))
+    if (aMain.get() && aMain->isSub(anIter)) // sub-elements of not-disabled feature are not disabled
+      aDisabledFlag = false;
+    if (anIter->getKind() == "Parameter") // parameters are always out of the history
       aDisabledFlag = false;
     if (anIter->setDisabled(aDisabledFlag)) {
       // state of feature is changed => so feature become updated