- // the initial code is moved here in order to clear filters, it is possible, that it is excessive and
- // is performed outside
- if (myIsActive && !myObjectTypes.isEmpty()) {
- aViewer->clearSelectionFilters();
- }
- SelectMgr_ListOfFilter aFilters;
- selectionFilters(aFilters);
- SelectMgr_ListIteratorOfListOfFilter aIt(aFilters);
- for (; aIt.More(); aIt.Next()) {
- const Handle(SelectMgr_Filter)& aSelFilter = aIt.Value();
- if (myIsActive)
- aViewer->addSelectionFilter(aSelFilter);
- else
- aViewer->removeSelectionFilter(aSelFilter);
- }
- // the internal filter should be removed by the widget deactivation, it is done historically
- if (!myIsActive && !myObjTypeFilter.IsNull()) {
- myObjTypeFilter.Nullify();
- }
-}
-
-//********************************************************************
-void ModuleBase_WidgetShapeSelector::selectionFilters(SelectMgr_ListOfFilter& theFilters)
-{
- if (!myObjectTypes.isEmpty() && myObjTypeFilter.IsNull()) {
- myObjTypeFilter = new ModuleBase_ObjectTypesFilter(myWorkshop, myObjectTypes);
- }
- theFilters.Append(myObjTypeFilter);
-
- // apply filters loaded from the XML definition of the widget
- ModuleBase_FilterFactory* aFactory = myWorkshop->selectionFilters();
- SelectMgr_ListOfFilter aFilters;
- aFactory->filters(parentID(), attributeID(), aFilters);
- SelectMgr_ListIteratorOfListOfFilter aIt(aFilters);
- for (; aIt.More(); aIt.Next()) {
- Handle(SelectMgr_Filter) aSelFilter = aIt.Value();
- if (aSelFilter.IsNull())
- continue;
-
- theFilters.Append(aSelFilter);
- }