- std::list<boost::shared_ptr<ModelAPI_Result> >::iterator aResIter = myResults.begin();
- for(; aResIter != myResults.end(); aResIter++) {
- (*aResIter)->data()->erase();
- static Events_ID anEvent = Events_Loop::eventByName(EVENT_OBJECT_DELETED);
- ModelAPI_EventCreator::get()->sendDeleted(document(), (*aResIter)->groupName());
+ std::list<std::shared_ptr<ModelAPI_Result> >::iterator aResIter = myResults.begin();
+ for(int anIndex = 0; anIndex < theSinceIndex && aResIter != myResults.end(); anIndex++)
+ aResIter++;
+
+ std::string aGroup;
+ std::list<std::shared_ptr<ModelAPI_Result> >::iterator aNextIter = aResIter;
+ while( aNextIter != myResults.end()) {
+ aGroup = (*aNextIter)->groupName();
+ // remove previously erased results: to enable later if needed only actual (of history change)
+ if (theSinceIndex == 0 && (*aNextIter)->isDisabled()) {
+ aNextIter = myResults.erase(aNextIter);
+ } else {
+ (*aNextIter)->setDisabled(*aNextIter, true); // just disable results
+ aNextIter++;
+ }
+ }
+ if (!aGroup.empty() && theFlush) {
+ // flush visualisation changes
+ static Events_Loop* aLoop = Events_Loop::loop();
+ static Events_ID aRedispEvent = aLoop->eventByName(EVENT_OBJECT_TO_REDISPLAY);
+ aLoop->flush(aRedispEvent);
+ static Events_ID aDelEvent = aLoop->eventByName(EVENT_OBJECT_DELETED);
+ aLoop->flush(aDelEvent);