X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FModuleBase%2FModuleBase_WidgetShapeSelector.cpp;h=a88479bc5e845eeb14b88d52b7efc8d7ed8e939f;hb=cdc2caa21375bc96aaad9bb7c3ee1140dac1d738;hp=2c970d1740de74d2ffb4fbe1bb5f4813b1d5354c;hpb=8053cdcd3da8770ad21fb75f2ea69deb6d08f97a;p=modules%2Fshaper.git diff --git a/src/ModuleBase/ModuleBase_WidgetShapeSelector.cpp b/src/ModuleBase/ModuleBase_WidgetShapeSelector.cpp index 2c970d174..a88479bc5 100644 --- a/src/ModuleBase/ModuleBase_WidgetShapeSelector.cpp +++ b/src/ModuleBase/ModuleBase_WidgetShapeSelector.cpp @@ -18,6 +18,7 @@ #include #include #include +#include #include #include @@ -33,7 +34,6 @@ #include #include #include -#include #include #include @@ -132,8 +132,8 @@ bool ModuleBase_WidgetShapeSelector::storeValueCustom() const } //******************************************************************** -bool ModuleBase_WidgetShapeSelector::storeAttributeValues(ObjectPtr theSelectedObject, - GeomShapePtr theShape) const +bool ModuleBase_WidgetShapeSelector::setObject(ObjectPtr theSelectedObject, + GeomShapePtr theShape) { bool isChanged = false; FeaturePtr aSelectedFeature = ModelAPI_Feature::feature(theSelectedObject); @@ -158,9 +158,9 @@ bool ModuleBase_WidgetShapeSelector::storeAttributeValues(ObjectPtr theSelectedO } } 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,15 +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); - 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); } + } //******************************************************************** @@ -264,29 +275,6 @@ bool ModuleBase_WidgetShapeSelector::acceptSubShape(std::shared_ptrattributeType(); - if (anAttrType == ModelAPI_AttributeRefAttr::type()) { - AttributeRefAttrPtr anAttr = std::dynamic_pointer_cast(theAttribute); - if (anAttr != NULL && anAttr->isObject()) - anObject = anAttr->object(); - } - if (anAttrType == ModelAPI_AttributeSelection::type()) { - AttributeSelectionPtr anAttr = std::dynamic_pointer_cast(theAttribute); - if (anAttr != NULL && anAttr->isInitialized()) - anObject = anAttr->context(); - } - if (anAttrType == ModelAPI_AttributeReference::type()) { - AttributeReferencePtr anAttr = std::dynamic_pointer_cast(theAttribute); - if (anAttr.get() != NULL && anAttr->isInitialized()) - anObject = anAttr->value(); - } - return anObject; -} - - //******************************************************************** GeomShapePtr ModuleBase_WidgetShapeSelector::getShape() const { @@ -316,7 +304,7 @@ void ModuleBase_WidgetShapeSelector::updateSelectionName() isNameUpdated = true; } if (!isNameUpdated) { - ObjectPtr anObject = getObject(myFeature->attribute(attributeID())); + ObjectPtr anObject = GeomValidators_Tools::getObject(myFeature->attribute(attributeID())); if (anObject.get() != NULL) { std::string aName = anObject->data()->name(); myTextLine->setText(QString::fromStdString(aName)); @@ -385,50 +373,54 @@ void ModuleBase_WidgetShapeSelector::activateCustom() } //******************************************************************** -void ModuleBase_WidgetShapeSelector::backupAttributeValue(const bool isBackup) +void ModuleBase_WidgetShapeSelector::storeAttributeValue() { DataPtr aData = myFeature->data(); AttributePtr anAttribute = myFeature->attribute(attributeID()); - if (isBackup) { - myObject = getObject(anAttribute); - myShape = getShape(); - myRefAttribute = NULL; - myIsObject = false; - AttributeRefAttrPtr aRefAttr = aData->refattr(attributeID()); - if (aRefAttr) { - myIsObject = aRefAttr->isObject(); - myRefAttribute = aRefAttr->attr(); - } + myObject = GeomValidators_Tools::getObject(anAttribute); + myShape = getShape(); + myRefAttribute = AttributePtr(); + myIsObject = false; + AttributeRefAttrPtr aRefAttr = aData->refattr(attributeID()); + if (aRefAttr) { + myIsObject = aRefAttr->isObject(); + myRefAttribute = aRefAttr->attr(); } - else { - storeAttributeValues(myObject, myShape); - AttributeRefAttrPtr aRefAttr = aData->refattr(attributeID()); - if (aRefAttr) { - if (!myIsObject) - aRefAttr->setAttr(myRefAttribute); - } +} + +//******************************************************************** +void ModuleBase_WidgetShapeSelector::restoreAttributeValue(bool theValid) +{ + DataPtr aData = myFeature->data(); + AttributePtr anAttribute = myFeature->attribute(attributeID()); + + setObject(myObject, myShape); + AttributeRefAttrPtr aRefAttr = aData->refattr(attributeID()); + if (aRefAttr) { + if (!myIsObject) + aRefAttr->setAttr(myRefAttribute); } } //******************************************************************** -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); - ObjectPtr aObject = aPrs.object(); - ObjectPtr aCurrentObject = getObject(myFeature->attribute(attributeID())); + // It should be checked by corresponded validator + ObjectPtr aObject = thePrs.object(); + ObjectPtr aCurrentObject = GeomValidators_Tools::getObject(myFeature->attribute(attributeID())); + /* if ((!aCurrentObject) && (!aObject)) - return false; + return false;*/ + // It should be checked by corresponded validator // Check that the selected object is result (others can not be accepted) ResultPtr aRes = std::dynamic_pointer_cast(aObject); if (!aRes) return false; - - if (myFeature) { + /*if (myFeature) { // We can not select a result of our feature const std::list>& aResList = myFeature->results(); std::list >::const_iterator aIt; @@ -437,27 +429,31 @@ bool ModuleBase_WidgetShapeSelector::setSelection(const Handle_SelectMgr_EntityO return false; } } + */ + // It should be checked by corresponded validator + /* // Check that object belongs to active document or PartSet DocumentPtr aDoc = aRes->document(); SessionPtr aMgr = ModelAPI_Session::get(); if (!(aDoc == aMgr->activeDocument()) && !(aDoc == aMgr->moduleDocument())) - return false; + return false;*/ + // It should be checked by corresponded validator // Check that the result has a shape GeomShapePtr aShape = ModelAPI_Tools::shape(aRes); if (!aShape) 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)) return false; - storeAttributeValues(aObject, aShape); + setObject(aObject, aShape); return true; }