X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FModuleBase%2FModuleBase_WidgetSelector.cpp;h=b9fe6ef9c9db8f643c71abfe33d7cce5514e4e31;hb=1490e92974d2c0bdcdbecd6fa9388e31dccfa363;hp=0f0b2c15a8eda3efe5a491fa3fa50df0ec93a98b;hpb=6d816ec6765d659d9ccef32b726b91e06c2a32f8;p=modules%2Fshaper.git diff --git a/src/ModuleBase/ModuleBase_WidgetSelector.cpp b/src/ModuleBase/ModuleBase_WidgetSelector.cpp index 0f0b2c15a..b9fe6ef9c 100755 --- a/src/ModuleBase/ModuleBase_WidgetSelector.cpp +++ b/src/ModuleBase/ModuleBase_WidgetSelector.cpp @@ -9,6 +9,12 @@ #include #include #include +#include +#include +#include +#include +#include +#include #include @@ -16,9 +22,8 @@ ModuleBase_WidgetSelector::ModuleBase_WidgetSelector(QWidget* theParent, ModuleBase_IWorkshop* theWorkshop, - const Config_WidgetAPI* theData, - const std::string& theParentId) - : ModuleBase_WidgetValidated(theParent, theWorkshop, theData, theParentId) + const Config_WidgetAPI* theData) +: ModuleBase_WidgetValidated(theParent, theWorkshop, theData) { } @@ -28,7 +33,7 @@ ModuleBase_WidgetSelector::~ModuleBase_WidgetSelector() } //******************************************************************** -void ModuleBase_WidgetSelector::getGeomSelection(const ModuleBase_ViewerPrs& thePrs, +void ModuleBase_WidgetSelector::getGeomSelection(const ModuleBase_ViewerPrsPtr& thePrs, ObjectPtr& theObject, GeomShapePtr& theShape) { @@ -40,11 +45,14 @@ void ModuleBase_WidgetSelector::getGeomSelection(const ModuleBase_ViewerPrs& the //******************************************************************** void ModuleBase_WidgetSelector::onSelectionChanged() { - clearAttribute(); - - QList aSelected = getFilteredSelected(); - + QList aSelected = getFilteredSelected(); bool isDone = setSelection(aSelected, true/*false*/); + updateOnSelectionChanged(isDone); +} + +//******************************************************************** +void ModuleBase_WidgetSelector::updateOnSelectionChanged(const bool theDone) +{ // "false" flag should be used here, it connects to the #26658 OCC bug, when the user click in // the same place repeatedly without mouse moved. In the case validation by filters is not // perfromed, so an invalid object is selected. E.g. distance constraint, selection of a point. @@ -54,10 +62,19 @@ void ModuleBase_WidgetSelector::onSelectionChanged() // calls validators for the feature and, as a result, updates the Apply button state. updateObject(myFeature); - if (isDone) + // we need to forget about previous validation result as the current selection can influence on it + clearValidatedCash(); + + if (theDone) updateFocus(); } +//******************************************************************** +QList ModuleBase_WidgetSelector::getAttributeSelection() const +{ + return QList(); +} + //******************************************************************** bool ModuleBase_WidgetSelector::acceptSubShape(const GeomShapePtr& theShape, const ResultPtr& theResult) const @@ -95,22 +112,24 @@ bool ModuleBase_WidgetSelector::acceptSubShape(const GeomShapePtr& theShape, QIntList::const_iterator anIt = aShapeTypes.begin(), aLast = aShapeTypes.end(); for (; anIt != aLast; anIt++) { - if (aShapeType == *anIt) + TopAbs_ShapeEnum aCurrentShapeType = (TopAbs_ShapeEnum)*anIt; + if (aShapeType == aCurrentShapeType) aValid = true; - else if (*anIt == TopAbs_FACE) { + else if (aCurrentShapeType == TopAbs_FACE) { // try to process the construction shape only if there is no a selected shape in the viewer if (!theShape.get() && theResult.get()) { ResultConstructionPtr aCResult = std::dynamic_pointer_cast(theResult); aValid = aCResult.get() && aCResult->facesNum() > 0; } + aValid = ModuleBase_ResultPrs::isValidShapeType(aCurrentShapeType, aShapeType); } } return aValid; } //******************************************************************** -void ModuleBase_WidgetSelector::activateSelectionAndFilters(bool toActivate) +bool ModuleBase_WidgetSelector::activateSelectionAndFilters(bool toActivate) { updateSelectionName(); @@ -119,7 +138,7 @@ void ModuleBase_WidgetSelector::activateSelectionAndFilters(bool toActivate) } else { myWorkshop->deactivateSubShapesSelection(); } - activateFilters(toActivate); + return activateFilters(toActivate); } //******************************************************************** @@ -135,7 +154,7 @@ void ModuleBase_WidgetSelector::activateCustom() } //******************************************************************** -bool ModuleBase_WidgetSelector::isValidSelectionCustom(const ModuleBase_ViewerPrs& thePrs) +bool ModuleBase_WidgetSelector::isValidSelectionCustom(const ModuleBase_ViewerPrsPtr& thePrs) { GeomShapePtr aShape = myWorkshop->selection()->getShape(thePrs); ResultPtr aResult = myWorkshop->selection()->getResult(thePrs); @@ -151,13 +170,13 @@ bool ModuleBase_WidgetSelector::isValidSelectionCustom(const ModuleBase_ViewerPr } //******************************************************************** -bool ModuleBase_WidgetSelector::setSelectionCustom(const ModuleBase_ViewerPrs& thePrs) +bool ModuleBase_WidgetSelector::setSelectionCustom(const ModuleBase_ViewerPrsPtr& thePrs) { ObjectPtr anObject; GeomShapePtr aShape; getGeomSelection(thePrs, anObject, aShape); - setObject(anObject, aShape); + ModuleBase_Tools::setObject(attribute(), anObject, aShape, myWorkshop, myIsInValidate); return true; } @@ -171,13 +190,26 @@ void ModuleBase_WidgetSelector::deactivate() } //******************************************************************** -std::string ModuleBase_WidgetSelector::generateName(const AttributePtr& theAttribute) +std::string ModuleBase_WidgetSelector::generateName(const AttributePtr& theAttribute, + ModuleBase_IWorkshop* theWorkshop) { std::string aName; if (theAttribute.get() != NULL) { - std::stringstream aStreamName; - aStreamName << theAttribute->owner()->data()->name() << "/"<< theAttribute->id(); - aName = aStreamName.str(); + ModuleBase_Operation* anOperation = theWorkshop->currentOperation(); + + FeaturePtr aFeature = ModelAPI_Feature::feature(theAttribute->owner()); + if (aFeature.get()) { + std::string aXmlCfg, aDescription; + theWorkshop->module()->getXMLRepresentation(aFeature->getKind(), aXmlCfg, aDescription); + + ModuleBase_WidgetFactory aFactory(aXmlCfg, theWorkshop); + std::string anAttributeTitle; + aFactory.getAttributeTitle(theAttribute->id(), anAttributeTitle); + + std::stringstream aStreamName; + aStreamName << theAttribute->owner()->data()->name() << "/"<< anAttributeTitle.c_str(); + aName = aStreamName.str(); + } } return aName; }