X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FModuleBase%2FModuleBase_WidgetSelector.cpp;h=99edfb890e390b33024d5a85b05baefa0aa2ed43;hb=8cd56d486b6e96b8814002f9f0f4acadd6cea11b;hp=daafd6431572392d16f687f1c714a6ada8d8275d;hpb=a3d1262c156f7ec6c613ebb537e059e3d17bb019;p=modules%2Fshaper.git diff --git a/src/ModuleBase/ModuleBase_WidgetSelector.cpp b/src/ModuleBase/ModuleBase_WidgetSelector.cpp index daafd6431..99edfb890 100755 --- a/src/ModuleBase/ModuleBase_WidgetSelector.cpp +++ b/src/ModuleBase/ModuleBase_WidgetSelector.cpp @@ -8,11 +8,10 @@ #include #include +#include #include -#include - #include ModuleBase_WidgetSelector::ModuleBase_WidgetSelector(QWidget* theParent, @@ -45,7 +44,11 @@ void ModuleBase_WidgetSelector::onSelectionChanged() QList aSelected = getFilteredSelected(); - bool isDone = setSelection(aSelected, false); + bool isDone = setSelection(aSelected, true/*false*/); + // "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. + // the 3rd click in the same point allow using this point. emit valuesChanged(); // 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. @@ -64,6 +67,10 @@ bool ModuleBase_WidgetSelector::acceptSubShape(const GeomShapePtr& theShape, GeomShapePtr aShape = theShape; QIntList aShapeTypes = getShapeTypes(); + if (aShapeTypes.empty()) { + aValid = true; + return aValid; + } // when the SHAPE type is provided by XML, the hole result shape can be selected. if (!aShape.get() && aShapeTypes.contains(TopAbs_SHAPE)) { aValid = true; @@ -82,7 +89,7 @@ bool ModuleBase_WidgetSelector::acceptSubShape(const GeomShapePtr& theShape, // for compounds check sub-shapes: it may be compound of needed type: // Booleans may produce compounds of Solids if (aShapeType == TopAbs_COMPOUND) { - aShapeType = GeomValidators_Tools::getCompoundSubType(aTopoShape); + aShapeType = ModuleBase_Tools::getCompoundSubType(aTopoShape); } } @@ -103,7 +110,7 @@ bool ModuleBase_WidgetSelector::acceptSubShape(const GeomShapePtr& theShape, } //******************************************************************** -void ModuleBase_WidgetSelector::activateSelection(bool toActivate) +void ModuleBase_WidgetSelector::activateSelectionAndFilters(bool toActivate) { updateSelectionName(); @@ -112,6 +119,7 @@ void ModuleBase_WidgetSelector::activateSelection(bool toActivate) } else { myWorkshop->deactivateSubShapesSelection(); } + activateFilters(toActivate); } //******************************************************************** @@ -120,12 +128,10 @@ void ModuleBase_WidgetSelector::activateCustom() connect(myWorkshop, SIGNAL(selectionChanged()), this, SLOT(onSelectionChanged()), Qt::UniqueConnection); - activateSelection(true); + activateSelectionAndFilters(true); // Restore selection in the viewer by the attribute selection list myWorkshop->setSelected(getAttributeSelection()); - - activateFilters(true); } //******************************************************************** @@ -158,8 +164,9 @@ bool ModuleBase_WidgetSelector::setSelectionCustom(const ModuleBase_ViewerPrs& t //******************************************************************** void ModuleBase_WidgetSelector::deactivate() { + ModuleBase_ModelWidget::deactivate(); disconnect(myWorkshop, SIGNAL(selectionChanged()), this, SLOT(onSelectionChanged())); - activateSelection(false); - activateFilters(false); + activateSelectionAndFilters(false); + ModuleBase_ModelWidget::deactivate(); }