// Copyright (C) 2014-20xx CEA/DEN, EDF R&D
-// File: ModuleBase_WidgetSelector.h
+// File: ModuleBase_WidgetSelector.cpp
// Created: 19 June 2015
// Author: Natalia ERMOLAEVA
#include <ModelAPI_ResultConstruction.h>
+#include <TopoDS_Iterator.hxx>
+
ModuleBase_WidgetSelector::ModuleBase_WidgetSelector(QWidget* theParent,
ModuleBase_IWorkshop* theWorkshop,
const Config_WidgetAPI* theData,
const std::string& theParentId)
- : ModuleBase_WidgetValidated(theParent, theData, theParentId),
- myWorkshop(theWorkshop)
+ : ModuleBase_WidgetValidated(theParent, theWorkshop, theData, theParentId)
{
}
{
clearAttribute();
- QList<ModuleBase_ViewerPrs> aSelected = myWorkshop->selection()->getSelected(
- ModuleBase_ISelection::AllControls);
- bool isDone = setSelection(aSelected);
+ QList<ModuleBase_ViewerPrs> aSelected = getFilteredSelected();
+ bool isDone = setSelection(aSelected, false);
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.
// Check that the selection corresponds to selection type
TopoDS_Shape aTopoShape = aShape->impl<TopoDS_Shape>();
aShapeType = aTopoShape.ShapeType();
+ // for compounds check sub-shapes: it may be compound of needed type:
+ // Booleans may produce compounds of Solids
+ if (aShapeType == TopAbs_COMPOUND) {
+ for(TopoDS_Iterator aSubs(aTopoShape); aSubs.More(); aSubs.Next()) {
+ if (!aSubs.Value().IsNull()) {
+ TopAbs_ShapeEnum aSubType = aSubs.Value().ShapeType();
+ if (aSubType == TopAbs_COMPOUND) { // compound of compound(s)
+ aShapeType = TopAbs_COMPOUND;
+ break;
+ }
+ if (aShapeType == TopAbs_COMPOUND) {
+ aShapeType = aSubType;
+ } else if (aShapeType != aSubType) { // compound of shapes of different types
+ aShapeType = TopAbs_COMPOUND;
+ break;
+ }
+ }
+ }
+ }
}
QIntList aShapeTypes = getShapeTypes();
// Restore selection in the viewer by the attribute selection list
myWorkshop->setSelected(getAttributeSelection());
- activateFilters(myWorkshop, true);
+ activateFilters(true);
}
//********************************************************************
{
disconnect(myWorkshop, SIGNAL(selectionChanged()), this, SLOT(onSelectionChanged()));
activateSelection(false);
- activateFilters(myWorkshop, false);
+ activateFilters(false);
}
+