]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Erroneous cases in SALOME mode: Sketch, start sub-feature operation[some control...
authornds <nds@opencascade.com>
Sat, 12 Sep 2015 09:34:53 +0000 (12:34 +0300)
committernds <nds@opencascade.com>
Sat, 12 Sep 2015 09:34:53 +0000 (12:34 +0300)
Case 2: the same case: when viewer is removed(view is closed), we need to nullify AndFilter of Displayer, otherwise we lost all filters in opened view. It was realized for deactivate module and should be done when viewer is closed.

src/ModuleBase/ModuleBase_WidgetValidated.h
src/PartSet/PartSet_Module.cpp
src/XGUI/XGUI_Displayer.cpp

index a9b77d939980e4267c1e858690815233b8afda4b..70405e695bcb7d5d0475704616779873f80bc182 100644 (file)
@@ -66,6 +66,11 @@ class MODULEBASE_EXPORT ModuleBase_WidgetValidated : public ModuleBase_ModelWidg
   //! Returns data object by AIS
   ObjectPtr findPresentedObject(const AISObjectPtr& theAIS) const;
 
+  /// It obtains selection filters from the workshop and activates them in the active viewer
+  /// \param theWorkshop an active workshop
+  /// \param toActivate a flag about activation or deactivation the filters
+  void activateFilters(const bool toActivate);
+
 protected:
   /// Creates a backup of the current values of the attribute
   /// It should be realized in the specific widget because of different
@@ -95,11 +100,6 @@ protected:
   /// \return boolean value
   bool isFilterActivated() const;
 
-  /// It obtains selection filters from the workshop and activates them in the active viewer
-  /// \param theWorkshop an active workshop
-  /// \param toActivate a flag about activation or deactivation the filters
-  void activateFilters(const bool toActivate);
-
   /// Gets the validity state of the presentation in an internal map. Returns true if the valid state of value is stored
   /// \param theValue a viewer presentation
   /// \param theValid a valid state
index 5713d7decf53ff9694f05cc23d940fd9532c2745..64674f19d028bb725ba9cf1c8cc3d5356a927c09 100755 (executable)
@@ -456,6 +456,11 @@ void PartSet_Module::closeDocument()
 void PartSet_Module::clearViewer()
 {
   myCustomPrs->clearPrs();
+
+  XGUI_ModuleConnector* aConnector = dynamic_cast<XGUI_ModuleConnector*>(myWorkshop);
+  XGUI_Workshop* aWorkshop = aConnector->workshop();
+  XGUI_Displayer* aDisplayer = aWorkshop->displayer();
+  aDisplayer->deactivateSelectionFilters();
 }
 
 void PartSet_Module::propertyPanelDefined(ModuleBase_Operation* theOperation)
@@ -1088,4 +1093,17 @@ void PartSet_Module::onViewCreated(ModuleBase_IViewWindow*)
     if (!aFound)
       aViewer->AddZLayer(myVisualLayerId);
   }
+  // 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_IPropertyPanel* aPanel = aOperation->propertyPanel();
+    ModuleBase_ModelWidget* anActiveWidget = aPanel->activeWidget();
+    if (anActiveWidget) {
+      ModuleBase_WidgetValidated* aWidgetValidated = dynamic_cast<ModuleBase_WidgetValidated*>
+                                                                             (anActiveWidget);
+      if (aWidgetValidated)
+        aWidgetValidated->activateFilters(true);
+    }
+  }
 }
index 344704de0f915a8595b2ded14b51530768a5c8c6..cb24aa4805330e5ddee73462098a363f59af5458 100644 (file)
@@ -830,18 +830,19 @@ XGUI_Displayer::DisplayMode XGUI_Displayer::displayMode(ObjectPtr theObject) con
 void XGUI_Displayer::deactivateSelectionFilters()
 {
   Handle(AIS_InteractiveContext) aContext = AISContext();
-  if (!aContext.IsNull() && !myAndFilter.IsNull()) {
+  if (!myAndFilter.IsNull()) {
     bool aFound = false;
-    const SelectMgr_ListOfFilter& aFilters = aContext->Filters();
-    SelectMgr_ListIteratorOfListOfFilter anIt(aFilters);
-    for (; anIt.More() && !aFound; anIt.Next()) {
-      Handle(SelectMgr_Filter) aFilter = anIt.Value();
-      aFound = aFilter == myAndFilter;
-    }
-    if (aFound) {
-      aContext->RemoveFilter(myAndFilter);
-      myAndFilter.Nullify();
+    if (!aContext.IsNull()) {
+      const SelectMgr_ListOfFilter& aFilters = aContext->Filters();
+      SelectMgr_ListIteratorOfListOfFilter anIt(aFilters);
+      for (; anIt.More() && !aFound; anIt.Next()) {
+        Handle(SelectMgr_Filter) aFilter = anIt.Value();
+        aFound = aFilter == myAndFilter;
+      }
+      if (aFound)
+        aContext->RemoveFilter(myAndFilter);
     }
+    myAndFilter.Nullify();
   }
 }