}
}
}
- // proccess also results
+ // process also results
std::list<ResultPtr> allResults; // list of this feature and results
ModelAPI_Tools::allResults(theFeature, allResults);
std::list<ResultPtr>::iterator aRes = allResults.begin();
#ifdef DEB_UPDATE
std::cout<<"****** Event "<<theMessage->eventID().eventText()<<std::endl;
#endif
+ // check the automatic update flag on any event
+ bool aNewAutomaticState = ModelAPI_Session::get()->isAutoUpdateBlocked();
+ if (myUpdateBlocked != aNewAutomaticState) {
+ myUpdateBlocked = aNewAutomaticState;
+ if (!myUpdateBlocked) { // process all modified features, even if preview is blocked
+ bool aPreviewBlockedState = myIsPreviewBlocked; // to update the selected arguments
+ myIsPreviewBlocked = false;
+ // iterate everything and add features in state "MustBeUpdated" into modified
+ std::list<std::shared_ptr<ModelAPI_Document> > allDocs =
+ ModelAPI_Session::get()->allOpenedDocuments();
+ std::list<std::shared_ptr<ModelAPI_Document> >::iterator aDoc = allDocs.begin();
+ for(; aDoc != allDocs.end(); aDoc++) {
+ std::list<std::shared_ptr<ModelAPI_Feature> > allFeats = (*aDoc)->allFeatures();
+ std::list<std::shared_ptr<ModelAPI_Feature> >::iterator aFeat = allFeats.begin();
+ for(; aFeat != allFeats.end(); aFeat++) {
+ if ((*aFeat)->data()->isValid() &&
+ (*aFeat)->data()->execState() == ModelAPI_StateMustBeUpdated) {
+ addModified(*aFeat, FeaturePtr());
+ }
+ }
+ }
+ processFeatures();
+ myIsPreviewBlocked = myIsPreviewBlocked;
+ }
+ }
+
if (theMessage->eventID() == kStabilityEvent) {
updateStability(theMessage->sender());
return;
}
return;
}
- if (theMessage->eventID() == kAutomaticOff) {
- myUpdateBlocked = true;
- return;
- }
- if (theMessage->eventID() == kAutomaticOn) {
- myUpdateBlocked = false; // then process all modified features, even if preview is blocked
- bool aPreviewBlockedState = myIsPreviewBlocked; // to update the selected arguments
- myIsPreviewBlocked = false;
- // iterate everything and add efatures in state "MustBeUpdated" into modified
- std::list<std::shared_ptr<ModelAPI_Document> > allDocs =
- ModelAPI_Session::get()->allOpenedDocuments();
- std::list<std::shared_ptr<ModelAPI_Document> >::iterator aDoc = allDocs.begin();
- for(; aDoc != allDocs.end(); aDoc++) {
- std::list<std::shared_ptr<ModelAPI_Feature> > allFeats = (*aDoc)->allFeatures();
- std::list<std::shared_ptr<ModelAPI_Feature> >::iterator aFeat = allFeats.begin();
- for(; aFeat != allFeats.end(); aFeat++) {
- if ((*aFeat)->data()->isValid() &&
- (*aFeat)->data()->execState() == ModelAPI_StateMustBeUpdated) {
- addModified(*aFeat, FeaturePtr());
- }
- }
- }
- processFeatures();
- myIsPreviewBlocked = myIsPreviewBlocked;
- return;
- }
if (theMessage->eventID() == kUpdatedSel) {
std::shared_ptr<ModelAPI_ObjectUpdatedMessage> aMsg =
std::dynamic_pointer_cast<ModelAPI_ObjectUpdatedMessage>(theMessage);
if ((*anObjIter)->groupName() == ModelAPI_ResultParameter::group()) {
myIsParamUpdated = true;
}
- // on undo/redo, abort do not update persisten features
+ // on undo/redo, abort do not update persistent features
FeaturePtr anUpdated = std::dynamic_pointer_cast<ModelAPI_Feature>(*anObjIter);
if (anUpdated.get()) {
if (addModified(anUpdated, FeaturePtr()))
}
myIsFinish = false;
}
- // processed features must be only on finish, so clear anyway (to avoid reimport on load)
+ // processed features must be only on finish, so clear anyway (to avoid re-import on load)
myProcessOnFinish.clear();
// #2156: current must be sketch, left after the macro execution
}
if (anActiveDoc.get() && aCurrent.get() && aCurrent->data()->isValid()) {
- if (anActiveDoc->currentFeature(false) != aCurrent)
+ if (anActiveDoc->currentFeature(false) != aCurrent &&
+ ModelAPI_Tools::compositeOwner(anActiveDoc->currentFeature(false)) == aCurrent)
anActiveDoc->setCurrentFeature(aCurrent, false); // #2156 make the current feature back
}
}
}
-// collects all the feautres this feature depends on: reasons
+// collects all the features this feature depends on: reasons
static void allReasons(FeaturePtr theFeature, std::set<FeaturePtr>& theReasons) {
std::list<std::pair<std::string, std::list<std::shared_ptr<ModelAPI_Object> > > > aDeps;
theFeature->data()->referencesToObjects(aDeps);
theFeature->data()->execState(ModelAPI_StateDone);
// this checking must be after the composite feature sub-elements processing:
- // composite feature status may depend on it's subelements
+ // composite feature status may depend on it's sub-elements
if ((theFeature->data()->execState() == ModelAPI_StateInvalidArgument || isReferencedInvalid) &&
theFeature->getKind() != "Part") {
// don't disable Part because it will make disabled all the features