]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
An improvement of setCurrentFeature to avoid each object visualization in the viewer...
authornds <natalia.donis@opencascade.com>
Thu, 4 Jun 2015 07:06:16 +0000 (10:06 +0300)
committernds <natalia.donis@opencascade.com>
Thu, 4 Jun 2015 07:06:16 +0000 (10:06 +0300)
src/Model/Model_Document.cpp
src/PartSet/PartSet_PartDataModel.cpp

index 517b4231f5695d97fe0e7aaba24849cf97b8b46c..ee8193036cdf8b67edec80a3e0daaf843782f047 100644 (file)
@@ -662,6 +662,11 @@ std::shared_ptr<ModelAPI_Feature> Model_Document::currentFeature(const bool theV
 void Model_Document::setCurrentFeature(std::shared_ptr<ModelAPI_Feature> 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<ModelAPI_Feature> 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<ModelAPI_Feature> 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);
 }
index 9265e983e874ba641d82964dc7558b253bbf0d04..12e7312da2961b8c010f9b1c82becc7ae096c3af 100644 (file)
@@ -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<Events_Message> aMsg = std::shared_ptr<Events_Message>(
-      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<Events_Message>(
-                new Events_Message(Events_Loop::eventByName(EVENT_UPDATE_VIEWER_UNBLOCKED)));
-
-  Events_Loop::loop()->send(aMsg);
 }
 
 QModelIndex PartSet_PartDataModel::lastHistoryItem() const