- if (myJustUpdated.find(aSub) != myJustUpdated.end() ||
- (aSub.get() && aSub->data()->updateID() > theFeature->data()->updateID())) {
- if (aState == ModelAPI_StateDone)
+ if (aSub.get() && aState == ModelAPI_StateDone) {
+ if (myJustUpdated.find(aSub) != myJustUpdated.end() ||
+ (aSub->data()->updateID() > theFeature->data()->updateID())) {
+ aState = ModelAPI_StateMustBeUpdated;
+ }
+ // also check that all results of subs were updated: composite also depends on the results
+ const std::list<std::shared_ptr<ModelAPI_Result> >& aResults = aSub->results();
+ std::list<std::shared_ptr<ModelAPI_Result> >::const_iterator aResIter = aResults.begin();
+ for(; aResIter != aResults.end(); aResIter++) {
+ if (aResIter->get() && (*aResIter)->data()->isValid() && !(*aResIter)->isDisabled() &&
+ (myJustUpdated.find(*aResIter) != myJustUpdated.end() ||
+ ((*aResIter)->data()->updateID() > theFeature->data()->updateID()))) {