X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FModuleBase%2FModuleBase_WidgetShapeSelector.cpp;h=a88479bc5e845eeb14b88d52b7efc8d7ed8e939f;hb=cdc2caa21375bc96aaad9bb7c3ee1140dac1d738;hp=34eb3e189061b69be8b7fff28f62e7a3f76034b5;hpb=9e9c9a449415e86c8635345460e3db6701799ef2;p=modules%2Fshaper.git diff --git a/src/ModuleBase/ModuleBase_WidgetShapeSelector.cpp b/src/ModuleBase/ModuleBase_WidgetShapeSelector.cpp index 34eb3e189..a88479bc5 100644 --- a/src/ModuleBase/ModuleBase_WidgetShapeSelector.cpp +++ b/src/ModuleBase/ModuleBase_WidgetShapeSelector.cpp @@ -158,9 +158,9 @@ bool ModuleBase_WidgetShapeSelector::setObject(ObjectPtr theSelectedObject, } } else { AttributeSelectionPtr aSelectAttr = aData->selection(attributeID()); - ResultPtr aBody = std::dynamic_pointer_cast(theSelectedObject); - if (aSelectAttr && aBody && (theShape.get() != NULL)) { - aSelectAttr->setValue(aBody, theShape); + ResultPtr aResult = std::dynamic_pointer_cast(theSelectedObject); + if (aSelectAttr) { + aSelectAttr->setValue(aResult, theShape); isChanged = true; } } @@ -212,23 +212,26 @@ void ModuleBase_WidgetShapeSelector::onSelectionChanged() // In order to make reselection possible // TODO: check with MPV clearAttribute(); - //QObjectPtrList aObjects = myWorkshop->selection()->selectedPresentations(); - QList aSelected = myWorkshop->selection()->getSelected(); - if (aSelected.size() > 0) { - Handle(SelectMgr_EntityOwner) anOwner = aSelected.first().owner(); - if (isValid(anOwner)) { - setSelection(anOwner); - // the updateObject method should be called to flush the updated sigal. The workshop listens it, - // calls validators for the feature and, as a result, updates the Apply button state. - updateObject(myFeature); - //if (theObj) { - // raisePanel(); - //} - //updateSelectionName(); - //emit valuesChanged(); - emit focusOutWidget(this); - } + QList aSelectedPrs = getSelectedEntitiesOrObjects(myWorkshop->selection()); + if (aSelectedPrs.empty()) + return; + ModuleBase_ViewerPrs aPrs = aSelectedPrs.first(); + if (aPrs.isEmpty() || !isValidSelection(aPrs)) + return; + + if (!aPrs.isEmpty() && isValidSelection(aPrs)) { + setSelectionCustom(aPrs); + // the updateObject method should be called to flush the updated sigal. The workshop listens it, + // calls validators for the feature and, as a result, updates the Apply button state. + updateObject(myFeature); + //if (theObj) { + // raisePanel(); + //} + //updateSelectionName(); + //emit valuesChanged(); + emit focusOutWidget(this); } + } //******************************************************************** @@ -401,14 +404,12 @@ void ModuleBase_WidgetShapeSelector::restoreAttributeValue(bool theValid) } //******************************************************************** -bool ModuleBase_WidgetShapeSelector::setSelection(const Handle_SelectMgr_EntityOwner& theOwner) +bool ModuleBase_WidgetShapeSelector::setSelectionCustom(const ModuleBase_ViewerPrs& thePrs) { bool isDone = false; - ModuleBase_ViewerPrs aPrs; - myWorkshop->selection()->fillPresentation(aPrs, theOwner); // It should be checked by corresponded validator - ObjectPtr aObject = aPrs.object(); + ObjectPtr aObject = thePrs.object(); ObjectPtr aCurrentObject = GeomValidators_Tools::getObject(myFeature->attribute(attributeID())); /* if ((!aCurrentObject) && (!aObject)) @@ -444,9 +445,9 @@ bool ModuleBase_WidgetShapeSelector::setSelection(const Handle_SelectMgr_EntityO return false; // Get sub-shapes from local selection - if (!aPrs.shape().IsNull()) { + if (!thePrs.shape().IsNull()) { aShape = std::shared_ptr(new GeomAPI_Shape()); - aShape->setImpl(new TopoDS_Shape(aPrs.shape())); + aShape->setImpl(new TopoDS_Shape(thePrs.shape())); } // Check that the selection corresponds to selection type if (!acceptSubShape(aShape))