X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FModuleBase%2FModuleBase_WidgetMultiSelector.cpp;h=c74b323b83b6f038769f71032f5418ff79a0c24e;hb=acaa4d04df93d44ed6c093584aa7de2f7f86b5e3;hp=d1b383dd2459ec13d09d989578a9dfd0a03c5460;hpb=a64f7a3f4535a429d27fbc298c323c96060370cf;p=modules%2Fshaper.git diff --git a/src/ModuleBase/ModuleBase_WidgetMultiSelector.cpp b/src/ModuleBase/ModuleBase_WidgetMultiSelector.cpp index d1b383dd2..c74b323b8 100644 --- a/src/ModuleBase/ModuleBase_WidgetMultiSelector.cpp +++ b/src/ModuleBase/ModuleBase_WidgetMultiSelector.cpp @@ -198,8 +198,15 @@ void ModuleBase_WidgetMultiSelector::restoreAttributeValue(bool/* theValid*/) //******************************************************************** bool ModuleBase_WidgetMultiSelector::setSelectionCustom(const ModuleBase_ViewerPrs& thePrs) { - ObjectPtr anObject = myWorkshop->selection()->getSelectableObject(thePrs.owner()); - ResultPtr aResult = std::dynamic_pointer_cast(anObject); + ResultPtr aResult; + if (!thePrs.owner().IsNull()) { + ObjectPtr anObject = myWorkshop->selection()->getSelectableObject(thePrs.owner()); + aResult = std::dynamic_pointer_cast(anObject); + } + else { + aResult = std::dynamic_pointer_cast(thePrs.object()); + } + if (myFeature) { // We can not select a result of our feature @@ -230,7 +237,11 @@ bool ModuleBase_WidgetMultiSelector::setSelectionCustom(const ModuleBase_ViewerP else { GeomShapePtr aShape = std::shared_ptr(new GeomAPI_Shape()); aShape->setImpl(new TopoDS_Shape(aTDSShape)); - aSelectionListAttr->append(aResult, aShape); + // We can not select a result of our feature + if (aShape->isEqual(aResult->shape())) + aSelectionListAttr->append(aResult, GeomShapePtr()); + else + aSelectionListAttr->append(aResult, aShape); } return true; } @@ -256,9 +267,10 @@ void ModuleBase_WidgetMultiSelector::onSelectionTypeChanged() { activateShapeSelection(); QObjectPtrList anEmptyList; + // This method will call Selection changed event which will call onSelectionChanged + // To clear mySelection, myListControl and storeValue() + // So, we don't need to call it myWorkshop->setSelected(anEmptyList); - // Clear mySelection, myListControl and storeValue() - onSelectionChanged(); } //********************************************************************