static const Events_ID kOpStartEvent = aLoop->eventByName("StartOperation");
bool isAutomaticChanged = false;
if (theMessage->eventID() == kChangedEvent) { // automatic and manual rebuild flag is changed
- isAutomatic =
- Config_PropManager::findProp("Model update", "automatic_rebuild")->value() == "true";
+ bool aPropVal =
+ Config_PropManager::findProp("Model update", "automatic_rebuild")->value() == "true";
+ if (aPropVal == isAutomatic)
+ return;// nothing to
+ isAutomatic = aPropVal;
} else if (theMessage->eventID() == kRebuildEvent) { // the rebuild command
if (isAutomatic == false) {
isAutomaticChanged = true;
// all sub-documents one by one
std::shared_ptr<Model_Document> aDoc = std::dynamic_pointer_cast<Model_Document>(theDoc);
if (aDoc) {
- const std::set<std::string>& aSubs = aDoc->subDocuments();
+ const std::set<std::string> aSubs = aDoc->subDocuments(true);
for(std::set<std::string>::iterator aSub = aSubs.begin(); aSub != aSubs.end(); aSub++) {
DocumentPtr aSubDoc = theDoc->subDocument(*aSub);
if (aSubDoc) {
std::shared_ptr<ModelAPI_AttributeSelection> aSel =
std::dynamic_pointer_cast<ModelAPI_AttributeSelection>(*aRefsIter);
if (!aSel->update()) { // this must be done on execution since it may be long operation
- if (!aFactory->isNotObligatory(theFeature->getKind(), theFeature->data()->id(aSel)))
+ if (!aFactory->isNotObligatory(theFeature->getKind(), theFeature->data()->id(aSel)) &&
+ aFactory->isCase(theFeature, theFeature->data()->id(aSel)))
aState = ModelAPI_StateInvalidArgument;
}
}
if (aSelAttr) {
if (!aSelAttr->update()) {
if (!aFactory->isNotObligatory(
- theFeature->getKind(), theFeature->data()->id(aSel)))
+ theFeature->getKind(), theFeature->data()->id(aSel)) &&
+ aFactory->isCase(theFeature, theFeature->data()->id(aSel)))
aState = ModelAPI_StateInvalidArgument;
}
}