X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FPartSet%2FPartSet_Listener.cpp;h=355142a31449d3cf0eff57d1dad009b7f04e57f9;hb=004fa7f94b343a782405d3fe21973521150729b4;hp=580186b567b1d3cde612fe1802bb91aa9da2b11a;hpb=8396394eba586fc212fe4cb3e1e838a54ebf4ffe;p=modules%2Fshaper.git diff --git a/src/PartSet/PartSet_Listener.cpp b/src/PartSet/PartSet_Listener.cpp index 580186b56..355142a31 100644 --- a/src/PartSet/PartSet_Listener.cpp +++ b/src/PartSet/PartSet_Listener.cpp @@ -6,6 +6,8 @@ #include +#include + #include #include @@ -19,8 +21,9 @@ PartSet_Listener::PartSet_Listener(PartSet_Module* theModule) : myModule(theModule) { Events_Loop* aLoop = Events_Loop::loop(); - Events_ID aFeatureUpdatedId = aLoop->eventByName(EVENT_FEATURE_UPDATED); - aLoop->registerListener(this, aFeatureUpdatedId); + aLoop->registerListener(this, aLoop->eventByName(EVENT_FEATURE_UPDATED)); + aLoop->registerListener(this, Events_Loop::eventByName(EVENT_FEATURE_CREATED)); + aLoop->registerListener(this, Events_Loop::eventByName(EVENT_FEATURE_DELETED)); } PartSet_Listener::~PartSet_Listener() @@ -30,8 +33,38 @@ PartSet_Listener::~PartSet_Listener() //****************************************************** void PartSet_Listener::processEvent(const Events_Message* theMessage) { - if (QString(theMessage->eventID().eventText()) == EVENT_FEATURE_UPDATED) + QString aType = QString(theMessage->eventID().eventText()); + if (aType == EVENT_FEATURE_UPDATED || + aType == EVENT_FEATURE_CREATED) + { + const Model_FeatureUpdatedMessage* aUpdMsg = dynamic_cast + (theMessage); + std::set > aFeatures = aUpdMsg->features(); + std::set >::const_iterator anIt = aFeatures.begin(), + aLast = aFeatures.end(); + for (; anIt != aLast; anIt++) { + boost::shared_ptr aFeature = *anIt; + if (myModule->workshop()->displayer()->IsVisible(aFeature) || + aType == EVENT_FEATURE_CREATED) { + myModule->visualizePreview(aFeature, true, false); + myModule->activateFeature(aFeature, true); + } + } + myModule->workshop()->displayer()->UpdateViewer(); + } + if (aType == EVENT_FEATURE_DELETED) { - myModule->visualizePreview(true); + const Model_FeatureDeletedMessage* aDelMsg = dynamic_cast(theMessage); + boost::shared_ptr aDoc = aDelMsg->document(); + + std::set aGroups = aDelMsg->groups(); + std::set::const_iterator anIt = aGroups.begin(), aLast = aGroups.end(); + for (; anIt != aLast; anIt++) { + std::string aGroup = *anIt; + if (aGroup.compare("Sketch") == 0) { // Update only Sketch group + myModule->workshop()->displayer()->EraseDeletedFeatures(); + myModule->updateCurrentPreview(aGroup); + } + } } }