Salome HOME
Sketch shape in plane selection filter should not be activated while PartSet_WidgetSh...
[modules/shaper.git] / src / PartSet / PartSet_Module.cpp
index 8b2d83405749f57bd4f0cafde6c51d18217c8589..8951ac04b3e2f24f76ea6cd65da54ee37b90f90e 100755 (executable)
@@ -51,6 +51,7 @@
 #include <ModuleBase_IViewer.h>
 #include <ModuleBase_IViewWindow.h>
 #include <ModuleBase_IPropertyPanel.h>
+#include <ModuleBase_ISelectionActivate.h>
 #include <ModuleBase_WidgetChoice.h>
 #include <ModuleBase_WidgetEditor.h>
 #include <ModuleBase_WidgetValidated.h>
@@ -143,6 +144,7 @@ extern "C" PARTSET_EXPORT ModuleBase_IModule* createModule(ModuleBase_IWorkshop*
   return new PartSet_Module(theWshop);
 }
 
+//******************************************************
 PartSet_Module::PartSet_Module(ModuleBase_IWorkshop* theWshop)
 : ModuleBase_IModule(theWshop),
   myVisualLayerId(0),
@@ -171,8 +173,8 @@ PartSet_Module::PartSet_Module(ModuleBase_IWorkshop* theWshop)
   Events_Loop* aLoop = Events_Loop::loop();
   aLoop->registerListener(this, Events_Loop::eventByName(EVENT_DOCUMENT_CHANGED));
 
-  mySelectionFilters.Append(new PartSet_GlobalFilter(myWorkshop));
-  mySelectionFilters.Append(new PartSet_FilterInfinite(myWorkshop));
+  registerSelectionFilter(SF_GlobalFilter, new PartSet_GlobalFilter(myWorkshop));
+  registerSelectionFilter(SF_FilterInfinite, new PartSet_FilterInfinite(myWorkshop));
 
   setDefaultConstraintShown();
 
@@ -191,13 +193,20 @@ PartSet_Module::PartSet_Module(ModuleBase_IWorkshop* theWshop)
   Config_PropManager::registerProp("Visualization", "sketch_preview_plane",
                           "Color of sketch plane", Config_Prop::Color,
                           PartSet_CustomPrs::OPERATION_SKETCH_PLANE());
+
+  Config_PropManager::registerProp("Visualization", "hidden_face_transparency",
+                                   "Hidden faces transparency",
+                                   Config_Prop::Double,
+                                   "0.8");
 }
 
+//******************************************************
 PartSet_Module::~PartSet_Module()
 {
-  SelectMgr_ListIteratorOfListOfFilter aIt(mySelectionFilters);
-  for (; aIt.More(); aIt.Next()) {
-    Handle(SelectMgr_Filter) aFilter = aIt.Value();
+  std::map<PartSet_SelectionFilterType, Handle(SelectMgr_Filter)>::const_iterator aFiltersIt =
+    mySelectionFilters.begin();
+  for (; aFiltersIt != mySelectionFilters.end(); aFiltersIt++) {
+    Handle(SelectMgr_Filter) aFilter = aFiltersIt->second;
     if (!aFilter.IsNull())
       aFilter.Nullify();
   }
@@ -205,37 +214,7 @@ PartSet_Module::~PartSet_Module()
   delete myOverconstraintListener;
 }
 
-void PartSet_Module::activateSelectionFilters()
-{
-  SelectMgr_ListIteratorOfListOfFilter aIt(mySelectionFilters);
-  for (; aIt.More(); aIt.Next()) {
-    Handle(SelectMgr_Filter) aFilter = aIt.Value();
-    if (!aFilter.IsNull())
-      myWorkshop->viewer()->addSelectionFilter(aFilter);
-  }
-}
-
-void PartSet_Module::deactivateSelectionFilters()
-{
-  SelectMgr_ListIteratorOfListOfFilter aIt(mySelectionFilters);
-  for (; aIt.More(); aIt.Next()) {
-    Handle(SelectMgr_Filter) aFilter = aIt.Value();
-    if (!aFilter.IsNull())
-      myWorkshop->viewer()->removeSelectionFilter(aFilter);
-  }
-}
-
-void PartSet_Module::updateActiveSelectionFilters()
-{
-  XGUI_Workshop* aWorkshop = XGUI_Tools::workshop(workshop());
-  XGUI_ActiveControlSelector* anActiveSelector = aWorkshop->activeControlMgr()->activeSelector();
-
-  if (anActiveSelector && anActiveSelector->getType() == XGUI_FacesPanelSelector::Type())
-    sketchMgr()->deactivateSelectionFilters();
-  else
-    sketchMgr()->activateSelectionFilters();
-}
-
+//******************************************************
 void PartSet_Module::storeSelection()
 {
   // cash is used only to restore selection, so it should be filled in storeSelection and
@@ -244,6 +223,7 @@ void PartSet_Module::storeSelection()
   sketchMgr()->storeSelection(PartSet_SketcherMgr::ST_SelectType, myCurrentSelection);
 }
 
+//******************************************************
 void PartSet_Module::restoreSelection()
 {
   // cash is used only to restore selection, so it should be filled in storeSelection and
@@ -252,6 +232,7 @@ void PartSet_Module::restoreSelection()
   myCurrentSelection.clear();
 }
 
+//******************************************************
 void PartSet_Module::registerValidators()
 {
   //Registering of validators
@@ -280,12 +261,14 @@ void PartSet_Module::registerValidators()
   aFactory->registerValidator("PartSet_ProjectionSelection", new PartSet_ProjectionSelection);
 }
 
+//******************************************************
 void PartSet_Module::connectToPropertyPanel(ModuleBase_ModelWidget* theWidget,
                                             const bool isToConnect)
 {
   mySketchMgr->connectToPropertyPanel(theWidget, isToConnect);
 }
 
+//******************************************************
 void PartSet_Module::operationCommitted(ModuleBase_Operation* theOperation)
 {
   if (sketchMgr()->isNestedSketchOperation(theOperation)) {
@@ -309,6 +292,7 @@ void PartSet_Module::operationCommitted(ModuleBase_Operation* theOperation)
   }
 }
 
+//******************************************************
 void PartSet_Module::operationAborted(ModuleBase_Operation* theOperation)
 {
   /// Restart sketcher operations automatically
@@ -318,6 +302,7 @@ void PartSet_Module::operationAborted(ModuleBase_Operation* theOperation)
     overconstraintListener()->setActive(false);
 }
 
+//******************************************************
 void PartSet_Module::operationStarted(ModuleBase_Operation* theOperation)
 {
   ModuleBase_OperationFeature* aFOperation = dynamic_cast<ModuleBase_OperationFeature*>
@@ -405,6 +390,7 @@ void PartSet_Module::operationStarted(ModuleBase_Operation* theOperation)
   }
 }
 
+//******************************************************
 void PartSet_Module::updateSketcherOnStart(ModuleBase_Operation* theOperation)
 {
   if (PartSet_SketcherMgr::isSketchOperation(theOperation)) {
@@ -415,6 +401,7 @@ void PartSet_Module::updateSketcherOnStart(ModuleBase_Operation* theOperation)
   }
 }
 
+//******************************************************
 void PartSet_Module::updatePresentationsOnStart(ModuleBase_Operation* theOperation)
 {
   ModuleBase_OperationFeature* aFOperation =
@@ -425,6 +412,7 @@ void PartSet_Module::updatePresentationsOnStart(ModuleBase_Operation* theOperati
   }
 }
 
+//******************************************************
 void PartSet_Module::operationResumed(ModuleBase_Operation* theOperation)
 {
   ModuleBase_IModule::operationResumed(theOperation);
@@ -437,6 +425,7 @@ void PartSet_Module::operationResumed(ModuleBase_Operation* theOperation)
   }
 }
 
+//******************************************************
 void PartSet_Module::operationStopped(ModuleBase_Operation* theOperation)
 {
   bool isModifiedArgs = myCustomPrs->deactivate(ModuleBase_IModule::CustomizeArguments, false);
@@ -463,6 +452,7 @@ void PartSet_Module::operationStopped(ModuleBase_Operation* theOperation)
   }
 }
 
+//******************************************************
 ModuleBase_Operation* PartSet_Module::currentOperation() const
 {
   XGUI_ModuleConnector* aConnector = dynamic_cast<XGUI_ModuleConnector*>(workshop());
@@ -470,6 +460,7 @@ ModuleBase_Operation* PartSet_Module::currentOperation() const
   return anOpMgr->currentOperation();
 }
 
+//******************************************************
 bool PartSet_Module::canUndo() const
 {
   bool aCanUndo = false;
@@ -482,6 +473,7 @@ bool PartSet_Module::canUndo() const
   return aCanUndo;
 }
 
+//******************************************************
 bool PartSet_Module::canRedo() const
 {
   bool aCanRedo = false;
@@ -494,6 +486,7 @@ bool PartSet_Module::canRedo() const
   return aCanRedo;
 }
 
+//******************************************************
 bool PartSet_Module::canApplyAction(const ObjectPtr& theObject, const QString& theActionId) const
 {
   bool aValid = true;
@@ -509,18 +502,21 @@ bool PartSet_Module::canApplyAction(const ObjectPtr& theObject, const QString& t
   return aValid;
 }
 
+//******************************************************
 bool PartSet_Module::canEraseObject(const ObjectPtr& theObject) const
 {
   // the sketch manager put the restriction to the objects erase
   return mySketchMgr->canEraseObject(theObject);
 }
 
+//******************************************************
 bool PartSet_Module::canDisplayObject(const ObjectPtr& theObject) const
 {
   // the sketch manager put the restriction to the objects display
   return mySketchMgr->canDisplayObject(theObject);
 }
 
+//******************************************************
 bool PartSet_Module::canUsePreselection(const QString& thePreviousOperationKind,
                                         const QString& theStartedOperationKind)
 {
@@ -535,6 +531,7 @@ bool PartSet_Module::canUsePreselection(const QString& thePreviousOperationKind,
   mySketchMgr->processHiddenObject(theObjects);
 }*/
 
+//******************************************************
 bool PartSet_Module::canActivateSelection(const ObjectPtr& theObject) const
 {
   bool aCanActivate = ModuleBase_IModule::canActivateSelection(theObject);
@@ -552,6 +549,7 @@ bool PartSet_Module::canActivateSelection(const ObjectPtr& theObject) const
   return aCanActivate;
 }
 
+//******************************************************
 bool PartSet_Module::addViewerMenu(const QMap<QString, QAction*>& theStdActions,
                                    QWidget* theParent,
                                    QMap<int, QAction*>& theMenuActions) const
@@ -559,11 +557,13 @@ bool PartSet_Module::addViewerMenu(const QMap<QString, QAction*>& theStdActions,
   return myMenuMgr->addViewerMenu(theStdActions, theParent, theMenuActions);
 }
 
+//******************************************************
 void PartSet_Module::updateViewerMenu(const QMap<QString, QAction*>& theStdActions)
 {
   myMenuMgr->updateViewerMenu(theStdActions);
 }
 
+//******************************************************
 bool PartSet_Module::isActionEnableStateFixed(const int theActionId) const
 {
   bool isEnabledFixed = false;
@@ -573,6 +573,7 @@ bool PartSet_Module::isActionEnableStateFixed(const int theActionId) const
   return isEnabledFixed;
 }
 
+//******************************************************
 QString PartSet_Module::getFeatureError(const FeaturePtr& theFeature)
 {
   QString anError = ModuleBase_IModule::getFeatureError(theFeature);
@@ -582,6 +583,7 @@ QString PartSet_Module::getFeatureError(const FeaturePtr& theFeature)
   return anError;
 }
 
+//******************************************************
 void PartSet_Module::grantedOperationIds(ModuleBase_Operation* theOperation,
                                          QStringList& theIds) const
 {
@@ -593,21 +595,90 @@ void PartSet_Module::grantedOperationIds(ModuleBase_Operation* theOperation,
   }
 }
 
+//******************************************************
 void PartSet_Module::activeSelectionModes(QIntList& theModes)
 {
-  theModes.clear();
   if (mySketchMgr->activeSketch().get())
-    PartSet_SketcherMgr::sketchSelectionModes(theModes);
+    PartSet_SketcherMgr::sketchSelectionModes(mySketchMgr->activeSketch(), theModes);
+  else
+    theModes = XGUI_Tools::workshop(myWorkshop)->viewerSelectionModes();
+}
+
+//******************************************************
+void PartSet_Module::moduleSelectionModes(int theModesType, QIntList& theModes)
+{
+  customSubShapesSelectionModes(theModes);
+
+  //theModes.append(XGUI_Tools::workshop(myWorkshop)->viewerSelectionModes());
+  //myWorkshop->module()->activeSelectionModes(theModes);
 }
 
-void PartSet_Module::customSubShapesSelectionModes(QIntList& theTypes)
+//******************************************************
+void PartSet_Module::moduleSelectionFilters(const QIntList& theFilterTypes,
+                                            SelectMgr_ListOfFilter& theSelectionFilters)
 {
-  if (theTypes.contains(TopAbs_FACE))
-    theTypes.append(SketcherPrs_Tools::Sel_Sketch_Face);
-  if (theTypes.contains(TopAbs_WIRE))
-    theTypes.append(SketcherPrs_Tools::Sel_Sketch_Wire);
+  bool isSketchActive = mySketchMgr->activeSketch();
+
+  std::map<PartSet_SelectionFilterType, Handle(SelectMgr_Filter)>::const_iterator aFiltersIt =
+    mySelectionFilters.begin();
+  for (; aFiltersIt != mySelectionFilters.end(); aFiltersIt++) {
+    int aFilterType = aFiltersIt->first;
+    // do not add not participating filters in given parameters
+    if (!theFilterTypes.contains(aFilterType))
+      continue;
+
+    // using sketch filters only if sketch operation is active
+    if (!isSketchActive &&
+        mySketchMgr->sketchSelectionFilter((PartSet_SelectionFilterType)aFilterType))
+      continue;
+
+    theSelectionFilters.Append(aFiltersIt->second);
+  }
+}
+
+//******************************************************
+QIntList PartSet_Module::selectionFilters()
+{
+  QIntList aTypes;
+
+  std::map<PartSet_SelectionFilterType, Handle(SelectMgr_Filter)>::const_iterator aFiltersIt =
+    mySelectionFilters.begin();
+  for (; aFiltersIt != mySelectionFilters.end(); aFiltersIt++)
+    aTypes.append(aFiltersIt->first);
+
+  return aTypes;
 }
 
+//******************************************************
+void PartSet_Module::registerSelectionFilter(const PartSet_SelectionFilterType theFilterType,
+                                             const Handle(SelectMgr_Filter)& theFilter)
+{
+  mySelectionFilters[theFilterType] = theFilter;
+}
+
+//******************************************************
+Handle(SelectMgr_Filter) PartSet_Module::selectionFilter(
+  const PartSet_SelectionFilterType theFilterType)
+{
+  if (mySelectionFilters.find(theFilterType) != mySelectionFilters.end())
+    return mySelectionFilters[theFilterType];
+  else
+    return Handle(SelectMgr_Filter)();
+}
+
+//******************************************************
+void PartSet_Module::customSubShapesSelectionModes(QIntList& theModes)
+{
+  if (theModes.contains(TopAbs_FACE))
+    theModes.append(SketcherPrs_Tools::Sel_Sketch_Face);
+  if (theModes.contains(TopAbs_WIRE))
+    theModes.append(SketcherPrs_Tools::Sel_Sketch_Wire);
+
+  if (mySketchMgr->activeSketch().get())
+    PartSet_SketcherMgr::sketchSelectionModes(mySketchMgr->activeSketch(), theModes);
+}
+
+//******************************************************
 void PartSet_Module::getGeomSelection(const std::shared_ptr<ModuleBase_ViewerPrs>& theSelected,
                                       ObjectPtr& theObject, AttributePtr& theAttribute)
 {
@@ -619,11 +690,13 @@ void PartSet_Module::getGeomSelection(const std::shared_ptr<ModuleBase_ViewerPrs
   theObject = anObject;
 }
 
+//******************************************************
 bool PartSet_Module::isMouseOverWindow()
 {
   return mySketchMgr->isMouseOverWindow();
 }
 
+//******************************************************
 bool PartSet_Module::isSketchNeutralPointActivated() const
 {
   bool isNeutralPoint = true;
@@ -635,20 +708,23 @@ bool PartSet_Module::isSketchNeutralPointActivated() const
   return isNeutralPoint;
 }
 
+//******************************************************
 void PartSet_Module::closeDocument()
 {
   myActivePartIndex = QModelIndex();
 }
 
+//******************************************************
 void PartSet_Module::clearViewer()
 {
   myCustomPrs->clearPrs();
 
   XGUI_Workshop* aWorkshop = getWorkshop();
   XGUI_Displayer* aDisplayer = aWorkshop->displayer();
-  aDisplayer->deactivateSelectionFilters();
+  aDisplayer->deactivateSelectionFilters(false);
 }
 
+//******************************************************
 void PartSet_Module::propertyPanelDefined(ModuleBase_Operation* theOperation)
 {
   ModuleBase_OperationFeature* aFOperation =
@@ -662,6 +738,7 @@ void PartSet_Module::propertyPanelDefined(ModuleBase_Operation* theOperation)
     aPanel->activateWidget(aPanel->modelWidgets().first());
 }
 
+//******************************************************
 bool PartSet_Module::createWidgets(ModuleBase_Operation* theOperation,
                                    QList<ModuleBase_ModelWidget*>& theWidgets) const
 {
@@ -714,6 +791,7 @@ bool PartSet_Module::createWidgets(ModuleBase_Operation* theOperation,
   return aProcessed;
 }
 
+//******************************************************
 void PartSet_Module::onSelectionChanged()
 {
   ModuleBase_Operation* aOperation = myWorkshop->currentOperation();
@@ -747,6 +825,7 @@ void PartSet_Module::onSelectionChanged()
   }
 }
 
+//******************************************************
 void PartSet_Module::onKeyRelease(ModuleBase_IViewWindow* theWnd, QKeyEvent* theEvent)
 {
   XGUI_ModuleConnector* aConnector = dynamic_cast<XGUI_ModuleConnector*>(workshop());
@@ -754,6 +833,7 @@ void PartSet_Module::onKeyRelease(ModuleBase_IViewWindow* theWnd, QKeyEvent* the
   anOpMgr->onKeyReleased(theWnd->viewPort(), theEvent);
 }
 
+//******************************************************
 ModuleBase_ModelWidget* PartSet_Module::createWidgetByType(const std::string& theType,
                                                            QWidget* theParent,
                                                            Config_WidgetAPI* theWidgetApi)
@@ -812,6 +892,7 @@ ModuleBase_ModelWidget* PartSet_Module::createWidgetByType(const std::string& th
   return aWgt;
 }
 
+//******************************************************
 ModuleBase_ModelWidget* PartSet_Module::activeWidget() const
 {
   ModuleBase_ModelWidget* anActiveWidget = 0;
@@ -827,6 +908,7 @@ ModuleBase_ModelWidget* PartSet_Module::activeWidget() const
   return anActiveWidget;
 }
 
+//******************************************************
 bool PartSet_Module::deleteObjects()
 {
   bool isProcessed = false;
@@ -900,17 +982,20 @@ bool PartSet_Module::deleteObjects()
   return isProcessed;
 }
 
+//******************************************************
 void PartSet_Module::editFeature(FeaturePtr theFeature)
 {
   storeConstraintsState(theFeature->getKind());
   ModuleBase_IModule::editFeature(theFeature);
 }
 
+//******************************************************
 bool PartSet_Module::canCommitOperation() const
 {
   return true;
 }
 
+//******************************************************
 void PartSet_Module::launchOperation(const QString& theCmdId, const bool& isStartAfterCommitOnly)
 {
   myIsOperationIsLaunched = true;
@@ -922,6 +1007,7 @@ void PartSet_Module::launchOperation(const QString& theCmdId, const bool& isStar
   myIsOperationIsLaunched = false;
 }
 
+//******************************************************
 void PartSet_Module::storeConstraintsState(const std::string& theFeatureKind)
 {
   if (myWorkshop->currentOperation() &&
@@ -932,6 +1018,7 @@ void PartSet_Module::storeConstraintsState(const std::string& theFeatureKind)
   }
 }
 
+//******************************************************
 void PartSet_Module::updateConstraintsState(const std::string& theFeatureKind)
 {
   if (PartSet_SketcherMgr::constraintsIdList().contains(theFeatureKind.c_str()) ||
@@ -944,6 +1031,7 @@ void PartSet_Module::updateConstraintsState(const std::string& theFeatureKind)
   }
 }
 
+//******************************************************
 void PartSet_Module::onObjectDisplayed(ObjectPtr theObject, AISObjectPtr theAIS)
 {
   Handle(AIS_InteractiveObject) anAIS = theAIS->impl<Handle(AIS_InteractiveObject)>();
@@ -962,10 +1050,12 @@ void PartSet_Module::onObjectDisplayed(ObjectPtr theObject, AISObjectPtr theAIS)
       if (!aCons.IsNull())
       aToUseZLayer = true;
     }
-    aCtx->SetZLayer(anAIS, myVisualLayerId);
+    if (aToUseZLayer)
+      aCtx->SetZLayer(anAIS, myVisualLayerId);
   }
 }
 
+//******************************************************
 void PartSet_Module::onBeforeObjectErase(ObjectPtr theObject, AISObjectPtr theAIS)
 {
   // this is obsolete
@@ -975,6 +1065,7 @@ void PartSet_Module::onBeforeObjectErase(ObjectPtr theObject, AISObjectPtr theAI
   //  myCustomPrs->redisplay(theObject, false);
 }
 
+//******************************************************
 void PartSet_Module::onViewTransformed(int theTrsfType)
 {
   // Set length of arrows constant in pixel size
@@ -1034,11 +1125,13 @@ void PartSet_Module::onViewTransformed(int theTrsfType)
   }
 }
 
+//******************************************************
 bool PartSet_Module::isCustomPrsActivated(const ModuleBase_CustomizeFlag& theFlag) const
 {
   return myCustomPrs->isActive(theFlag);
 }
 
+//******************************************************
 void PartSet_Module::activateCustomPrs(const FeaturePtr& theFeature,
                                        const ModuleBase_CustomizeFlag& theFlag,
                                        const bool theUpdateViewer)
@@ -1046,12 +1139,14 @@ void PartSet_Module::activateCustomPrs(const FeaturePtr& theFeature,
   myCustomPrs->activate(theFeature, theFlag, theUpdateViewer);
 }
 
+//******************************************************
 void PartSet_Module::deactivateCustomPrs(const ModuleBase_CustomizeFlag& theFlag,
                                          const bool theUpdateViewer)
 {
   myCustomPrs->deactivate(theFlag, theUpdateViewer);
 }
 
+//******************************************************
 bool PartSet_Module::customisePresentation(ResultPtr theResult, AISObjectPtr thePrs,
                                            std::shared_ptr<GeomAPI_ICustomPrs> theCustomPrs)
 {
@@ -1076,6 +1171,7 @@ bool PartSet_Module::customisePresentation(ResultPtr theResult, AISObjectPtr the
   return aCustomized;
 }
 
+//******************************************************
 bool PartSet_Module::afterCustomisePresentation(std::shared_ptr<ModelAPI_Result> theResult,
                                                 AISObjectPtr thePrs,
                                                 GeomCustomPrsPtr theCustomPrs)
@@ -1118,6 +1214,7 @@ bool PartSet_Module::afterCustomisePresentation(std::shared_ptr<ModelAPI_Result>
   return aCustomized;
 }
 
+//******************************************************
 bool PartSet_Module::customizeObject(ObjectPtr theObject, const ModuleBase_CustomizeFlag& theFlag,
                                      const bool theUpdateViewer)
 {
@@ -1128,6 +1225,7 @@ bool PartSet_Module::customizeObject(ObjectPtr theObject, const ModuleBase_Custo
   return isRedisplayed;
 }
 
+//******************************************************
 void PartSet_Module::customizeObjectBrowser(QWidget* theObjectBrowser)
 {
   XGUI_ObjectsBrowser* aOB = dynamic_cast<XGUI_ObjectsBrowser*>(theObjectBrowser);
@@ -1145,6 +1243,7 @@ void PartSet_Module::customizeObjectBrowser(QWidget* theObjectBrowser)
   }
 }
 
+//******************************************************
 void PartSet_Module::onActiveDocPopup(const QPoint& thePnt)
 {
   SessionPtr aMgr = ModelAPI_Session::get();
@@ -1160,12 +1259,13 @@ void PartSet_Module::onActiveDocPopup(const QPoint& thePnt)
   aMenu.exec(aHeader->mapToGlobal(thePnt));
 }
 
+//******************************************************
 Handle(AIS_InteractiveObject) PartSet_Module::createPresentation(const ResultPtr& theResult)
 {
   return mySketchMgr->createPresentation(theResult);
 }
 
-
+//******************************************************
 ObjectPtr PartSet_Module::findPresentedObject(const AISObjectPtr& theAIS) const
 {
   ObjectPtr anObject;
@@ -1188,6 +1288,7 @@ ObjectPtr PartSet_Module::findPresentedObject(const AISObjectPtr& theAIS) const
   return anObject;
 }
 
+//******************************************************
 bool PartSet_Module::canBeShaded(Handle(AIS_InteractiveObject) theAIS) const
 {
   bool aCanBeShaged = true;
@@ -1199,6 +1300,7 @@ bool PartSet_Module::canBeShaded(Handle(AIS_InteractiveObject) theAIS) const
   return aCanBeShaged;
 }
 
+//******************************************************
 void PartSet_Module::addObjectBrowserMenu(QMenu* theMenu) const
 {
   QObjectPtrList aObjects = myWorkshop->selection()->selectedObjects();
@@ -1258,6 +1360,7 @@ void PartSet_Module::addObjectBrowserMenu(QMenu* theMenu) const
   }
 }
 
+//******************************************************
 #define EXPAND_PARENT(OBJ) \
 QModelIndex aObjIndex = aDataModel->objectIndex(OBJ); \
 if (aObjIndex.isValid()) { \
@@ -1267,7 +1370,7 @@ if (aObjIndex.isValid()) { \
     aTreeView->setExpanded(aParent, true); \
 }
 
-
+//******************************************************
 void PartSet_Module::processEvent(const std::shared_ptr<Events_Message>& theMessage)
 {
   if (theMessage->eventID() == Events_Loop::loop()->eventByName(EVENT_DOCUMENT_CHANGED)) {
@@ -1354,6 +1457,7 @@ void PartSet_Module::processEvent(const std::shared_ptr<Events_Message>& theMess
   }
 }
 
+//******************************************************
 void PartSet_Module::onTreeViewDoubleClick(const QModelIndex& theIndex)
 {
   if (myWorkshop->currentOperation()) // Do not change activation of parts if an operation active
@@ -1390,7 +1494,7 @@ void PartSet_Module::onTreeViewDoubleClick(const QModelIndex& theIndex)
   }
 }
 
-
+//******************************************************
 void PartSet_Module::onViewCreated(ModuleBase_IViewWindow*)
 {
   // z layer is created for all started operations in order to visualize operation AIS presentation
@@ -1418,16 +1522,8 @@ void PartSet_Module::onViewCreated(ModuleBase_IViewWindow*)
   }
   // if there is an active operation with validated widget,
   // the filters of this widget should be activated in the created view
-  ModuleBase_Operation* aOperation = myWorkshop->currentOperation();
-  if (aOperation) {
-    ModuleBase_ModelWidget* anActiveWidget = activeWidget();
-    if (anActiveWidget) {
-      ModuleBase_WidgetSelector* aWSelector =
-        dynamic_cast<ModuleBase_WidgetSelector*>(anActiveWidget);
-      if (aWSelector)
-        aWSelector->activateSelectionAndFilters(true);
-    }
-  }
+  myWorkshop->selectionActivate()->updateSelectionFilters();
+  myWorkshop->selectionActivate()->updateSelectionModes();
 }
 
 //******************************************************
@@ -1436,6 +1532,7 @@ void PartSet_Module::widgetStateChanged(int thePreviousState)
   mySketchMgr->widgetStateChanged(thePreviousState);
 }
 
+//******************************************************
 bool PartSet_Module::processEnter(const std::string& thePreviousAttributeID)
 {
   return mySketchReentrantMgr->processEnter(thePreviousAttributeID);