From 1606a334fe827e5590545762bdf61c2131274660 Mon Sep 17 00:00:00 2001 From: nds Date: Thu, 4 Jun 2015 10:06:16 +0300 Subject: [PATCH] An improvement of setCurrentFeature to avoid each object visualization in the viewer. It blocks flushes send and unblock them after the functionality is performed. --- src/Model/Model_Document.cpp | 11 ++++++++++- src/PartSet/PartSet_PartDataModel.cpp | 12 ------------ 2 files changed, 10 insertions(+), 13 deletions(-) diff --git a/src/Model/Model_Document.cpp b/src/Model/Model_Document.cpp index 517b4231f..ee8193036 100644 --- a/src/Model/Model_Document.cpp +++ b/src/Model/Model_Document.cpp @@ -662,6 +662,11 @@ std::shared_ptr Model_Document::currentFeature(const bool theV void Model_Document::setCurrentFeature(std::shared_ptr theCurrent, const bool theVisible) { + // blocks the flush signals to avoid each objects visualization in the viewer + // they should not be shown once after all modifications are performed + Events_Loop* aLoop = Events_Loop::loop(); + aLoop->activateFlushes(false); + TDF_Label aRefLab = generalLabel().FindChild(TAG_CURRENT_FEATURE); CompositeFeaturePtr aMain; // main feature that may nest the new current if (theCurrent.get()) { @@ -707,8 +712,8 @@ void Model_Document::setCurrentFeature(std::shared_ptr theCurr aRefLab.ForgetAttribute(TDF_Reference::GetID()); } // make all features after this feature disabled in reversed order (to remove results without deps) - static Events_Loop* aLoop = Events_Loop::loop(); static Events_ID aRedispEvent = aLoop->eventByName(EVENT_OBJECT_TO_REDISPLAY); + static Events_ID aCreateEvent = Events_Loop::eventByName(EVENT_OBJECT_CREATED); static Events_ID aDeleteEvent = aLoop->eventByName(EVENT_OBJECT_DELETED); bool aPassed = false; // flag that the current object is already passed in cycle @@ -730,6 +735,10 @@ void Model_Document::setCurrentFeature(std::shared_ptr theCurr ModelAPI_EventCreator::get()->sendUpdated(anIter, aRedispEvent /*, false*/); } } + // unblock the flush signals and up them after this + aLoop->activateFlushes(true); + + aLoop->flush(aCreateEvent); aLoop->flush(aRedispEvent); aLoop->flush(aDeleteEvent); } diff --git a/src/PartSet/PartSet_PartDataModel.cpp b/src/PartSet/PartSet_PartDataModel.cpp index 9265e983e..12e7312da 100644 --- a/src/PartSet/PartSet_PartDataModel.cpp +++ b/src/PartSet/PartSet_PartDataModel.cpp @@ -577,12 +577,6 @@ int PartSet_PartDataModel::lastHistoryRow() const void PartSet_PartDataModel::setLastHistoryItem(const QModelIndex& theIndex) { - // the viewer update should be blocked in order to avoid the features blinking before they are - // hidden - std::shared_ptr aMsg = std::shared_ptr( - new Events_Message(Events_Loop::eventByName(EVENT_UPDATE_VIEWER_BLOCKED))); - Events_Loop::loop()->send(aMsg); - SessionPtr aMgr = ModelAPI_Session::get(); DocumentPtr aDoc = partDocument(); std::string aOpName = tr("History change").toStdString(); @@ -596,12 +590,6 @@ void PartSet_PartDataModel::setLastHistoryItem(const QModelIndex& theIndex) aDoc->setCurrentFeature(FeaturePtr(), true); aMgr->finishOperation(); } - // the viewer update should be unblocked in order to avoid the features blinking before they are - // hidden - aMsg = std::shared_ptr( - new Events_Message(Events_Loop::eventByName(EVENT_UPDATE_VIEWER_UNBLOCKED))); - - Events_Loop::loop()->send(aMsg); } QModelIndex PartSet_PartDataModel::lastHistoryItem() const -- 2.39.2