X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FModel%2FModel_Session.cpp;h=2a830e788a740f3414a5ad29d9de423470f07db3;hb=b73fb7468bea81901dbeed8e229d742f788ec282;hp=8a0b7b89f6d10bb8ee6cc6360eb848b3d39ea837;hpb=52d2c585a70385e30f13898f46ee5e27f5dbccdf;p=modules%2Fshaper.git diff --git a/src/Model/Model_Session.cpp b/src/Model/Model_Session.cpp index 8a0b7b89f..2a830e788 100644 --- a/src/Model/Model_Session.cpp +++ b/src/Model/Model_Session.cpp @@ -504,8 +504,14 @@ void Model_Session::processEvent(const std::shared_ptr& theMessa if (theMessage->eventID() == kDeletedEvent) { std::shared_ptr aDeleted = std::dynamic_pointer_cast(theMessage); - if (aDeleted && - aDeleted->groups().find(ModelAPI_ResultPart::group()) != aDeleted->groups().end()) + + std::list, std::string>>::const_iterator + aGIter = aDeleted->groups().cbegin(); + for (; aGIter != aDeleted->groups().cend(); aGIter++) { + if (aGIter->second == ModelAPI_ResultPart::group()) + break; + } + if (aGIter != aDeleted->groups().cend()) { // check that the current feature of the session is still the active Part (even disabled) bool aFound = false; @@ -571,3 +577,42 @@ int Model_Session::transactionID() { return ROOT_DOC->transactionID(); } + +bool Model_Session::isAutoUpdateBlocked() +{ + Handle(Model_Application) anApp = Model_Application::getApplication(); + if (!anApp->hasRoot()) // when document is not yet created, do not create it by such simple call + return false; + return !ROOT_DOC->autoRecomutationState(); +} + +void Model_Session::blockAutoUpdate(const bool theBlock) +{ + bool aCurrentState = isAutoUpdateBlocked(); + if (aCurrentState != theBlock) { + // if there is no operation, start it to avoid modifications outside of transaction + bool isOperation = this->isOperation(); + if (!isOperation) + startOperation("Auto update"); + ROOT_DOC->setAutoRecomutationState(!theBlock); + static Events_Loop* aLoop = Events_Loop::loop(); + if (theBlock) { + static const Events_ID kAutoOff = aLoop->eventByName(EVENT_AUTOMATIC_RECOMPUTATION_DISABLE); + std::shared_ptr aMsg(new Events_Message(kAutoOff)); + aLoop->send(aMsg); + } else { + // if there is no operation, start it to avoid modifications outside of transaction + bool isOperation = this->isOperation(); + if (!isOperation) + startOperation("Auto update enabling"); + static const Events_ID kAutoOn = aLoop->eventByName(EVENT_AUTOMATIC_RECOMPUTATION_ENABLE); + std::shared_ptr aMsg(new Events_Message(kAutoOn)); + aLoop->send(aMsg); + } + if (!isOperation) { + finishOperation(); + // append this transaction to the previous one: ne don't need this separated operation in list + ROOT_DOC->appendTransactionToPrevious(); + } + } +}