X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2FModuleBase%2FModuleBase_WidgetValidated.cpp;h=89315cd4b829db1413656b9e16f19ba008910b51;hb=68b9a069e588359867bc012f9576a13108ebfcdb;hp=d549ac306130b108f731650513e1012abb392f57;hpb=8f09d362a50ccbc085841c24af2e755121e458ba;p=modules%2Fshaper.git diff --git a/src/ModuleBase/ModuleBase_WidgetValidated.cpp b/src/ModuleBase/ModuleBase_WidgetValidated.cpp index d549ac306..89315cd4b 100644 --- a/src/ModuleBase/ModuleBase_WidgetValidated.cpp +++ b/src/ModuleBase/ModuleBase_WidgetValidated.cpp @@ -60,6 +60,13 @@ ObjectPtr ModuleBase_WidgetValidated::findPresentedObject(const AISObjectPtr& th return myPresentedObject; } +//******************************************************************** +void ModuleBase_WidgetValidated::clearValidatedCash() +{ + myValidPrs.clear(); + myInvalidPrs.clear(); +} + //******************************************************************** void ModuleBase_WidgetValidated::storeAttributeValue() { @@ -101,11 +108,14 @@ bool ModuleBase_WidgetValidated::isValidInFilters(const ModuleBase_ViewerPrs& th if (!isActivated) activateFilters(true); - const SelectMgr_ListOfFilter& aFilters = myWorkshop->viewer()->AISContext()->Filters(); - SelectMgr_ListIteratorOfListOfFilter anIt(aFilters); - for (; anIt.More() && aValid; anIt.Next()) { - Handle(SelectMgr_Filter) aFilter = anIt.Value(); - aValid = aFilter->IsOk(anOwner); + Handle(AIS_InteractiveContext) aContext = myWorkshop->viewer()->AISContext(); + if (!aContext.IsNull()) { + const SelectMgr_ListOfFilter& aFilters = aContext->Filters(); + SelectMgr_ListIteratorOfListOfFilter anIt(aFilters); + for (; anIt.More() && aValid; anIt.Next()) { + Handle(SelectMgr_Filter) aFilter = anIt.Value(); + aValid = aFilter->IsOk(anOwner); + } } if (!isActivated) activateFilters(false); @@ -133,17 +143,10 @@ bool ModuleBase_WidgetValidated::isValidSelection(const ModuleBase_ViewerPrs& th return aValid; } - DataPtr aData = myFeature->data(); - AttributePtr anAttribute = myFeature->attribute(attributeID()); - // stores the current values of the widget attribute - Events_Loop* aLoop = Events_Loop::loop(); - // blocks the flush signals to avoid the temporary objects visualization in the viewer - // they should not be shown in order to do not lose highlight by erasing them - bool isActive = aLoop->activateFlushes(false); + bool isFlushesActived, isAttributeSetInitializedBlocked; + blockAttribute(true, isFlushesActived, isAttributeSetInitializedBlocked); - aData->blockSendAttributeUpdated(true); - bool isAttributeBlocked = anAttribute->blockSetInitialized(true); storeAttributeValue(); // saves the owner value to the widget attribute @@ -154,10 +157,8 @@ bool ModuleBase_WidgetValidated::isValidSelection(const ModuleBase_ViewerPrs& th // restores the current values of the widget attribute restoreAttributeValue(aValid); - aData->blockSendAttributeUpdated(false); - anAttribute->blockSetInitialized(isAttributeBlocked); - aLoop->activateFlushes(isActive); + blockAttribute(false, isFlushesActived, isAttributeSetInitializedBlocked); // In particular case the results are deleted and called as redisplayed inside of this // highlight-selection, to they must be flushed as soon as possible. // Example: selection of group-vertices subshapes with shift pressend on body. Without @@ -165,8 +166,8 @@ bool ModuleBase_WidgetValidated::isValidSelection(const ModuleBase_ViewerPrs& th // removed results still in the viewer. static Events_ID aDeletedEvent = Events_Loop::eventByName(EVENT_OBJECT_DELETED); static Events_ID aRedispEvent = Events_Loop::eventByName(EVENT_OBJECT_TO_REDISPLAY); - aLoop->flush(aDeletedEvent); - aLoop->flush(aRedispEvent); + Events_Loop::loop()->flush(aDeletedEvent); + Events_Loop::loop()->flush(aRedispEvent); storeValidState(theValue, aValid); return aValid; @@ -211,6 +212,28 @@ void ModuleBase_WidgetValidated::activateFilters(const bool toActivate) } } +//******************************************************************** +void ModuleBase_WidgetValidated::blockAttribute(const bool& theToBlock, bool& isFlushesActived, + bool& isAttributeSetInitializedBlocked) +{ + Events_Loop* aLoop = Events_Loop::loop(); + DataPtr aData = myFeature->data(); + AttributePtr anAttribute = myFeature->attribute(attributeID()); + if (theToBlock) { + // blocks the flush signals to avoid the temporary objects visualization in the viewer + // they should not be shown in order to do not lose highlight by erasing them + isFlushesActived = aLoop->activateFlushes(false); + + aData->blockSendAttributeUpdated(true); + isAttributeSetInitializedBlocked = anAttribute->blockSetInitialized(true); + } + else { + aData->blockSendAttributeUpdated(false); + anAttribute->blockSetInitialized(isAttributeSetInitializedBlocked); + aLoop->activateFlushes(isFlushesActived); + } +} + //******************************************************************** void ModuleBase_WidgetValidated::storeValidState(const ModuleBase_ViewerPrs& theValue, const bool theValid) {