]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Activate/deactivate selection filter by module activation/deactivation.
authornds <natalia.donis@opencascade.com>
Tue, 23 Jun 2015 06:54:35 +0000 (09:54 +0300)
committernds <natalia.donis@opencascade.com>
Tue, 23 Jun 2015 06:54:35 +0000 (09:54 +0300)
Check case: activate NewGeom, activate GEOM, activate NewGeom, start sketch, create a line. The plane's eges/points should not be selectable.

src/ModuleBase/ModuleBase_IModule.h
src/NewGeom/NewGeom_Module.cpp
src/PartSet/PartSet_Module.cpp
src/PartSet/PartSet_Module.h
src/XGUI/XGUI_Workshop.cpp
src/XGUI/XGUI_Workshop.h

index 1d10eeb1328242463f3579894b2c0c2cee55da41..ba082667ef1cb2a7e099ceca7d9022afbaad72ed 100644 (file)
@@ -40,6 +40,12 @@ class MODULEBASE_EXPORT ModuleBase_IModule : public QObject
 \r
   virtual ~ModuleBase_IModule() {}\r
 \r
+  // Add default selection filters of the module to the current viewer\r
+  virtual void activateSelectionFilters() {};\r
+\r
+  // Remove default selection filters of the module from the current viewer\r
+  virtual void deactivateSelectionFilters() {};\r
+\r
   /// Reads description of features from XML file \r
   virtual void createFeatures();\r
 \r
index 8265e654c66668f3b30c4acf870cb8d99f3b802a..f5927a5efc51d44cac9c0efb6ce2ef8c596dc722 100644 (file)
@@ -159,6 +159,8 @@ bool NewGeom_Module::activateModule(SUIT_Study* theStudy)
         mySelector = createSelector(OCCViewManagers.first());
       }
     }
+    // it should be pefromed after the selector creation in order to have AISContext 
+    myWorkshop->activateModule();
     //action(myEraseAll)->setEnabled(false);
 
     if (myIsOpened) {
@@ -223,6 +225,8 @@ bool NewGeom_Module::deactivateModule(SUIT_Study* theStudy)
   setMenuShown(false);
   setToolShown(false);
 
+  myWorkshop->deactivateModule();
+
   QObject* aObj = myWorkshop->objectBrowser()->parent();
   QDockWidget* aObjDoc = dynamic_cast<QDockWidget*>(aObj);
   if (aObjDoc) {
index 45e3f2d436eafc74170903020708100acdb61d21..483e34ade4123e8120804dfca8dc97bf38959d40 100644 (file)
@@ -15,6 +15,9 @@
 #include "PartSet_SketcherMgr.h"
 #include "PartSet_MenuMgr.h"
 
+#include "PartSet_Filters.h"
+#include "PartSet_FilterInfinite.h"
+
 #include <PartSetPlugin_Remove.h>
 #include <PartSetPlugin_Part.h>
 
@@ -90,6 +93,8 @@
 #include <GeomAlgoAPI_FaceBuilder.h>
 #include <GeomDataAPI_Dir.h>
 
+#include <SelectMgr_ListIteratorOfListOfFilter.hxx>
+
 #ifdef _DEBUG
 #include <QDebug>
 #endif
@@ -128,21 +133,38 @@ PartSet_Module::PartSet_Module(ModuleBase_IWorkshop* theWshop)
   Events_Loop* aLoop = Events_Loop::loop();
   aLoop->registerListener(this, Events_Loop::eventByName(EVENT_DOCUMENT_CHANGED));
 
-  if (myDocumentShapeFilter.IsNull())
-    myDocumentShapeFilter = new PartSet_GlobalFilter(myWorkshop);
-  myWorkshop->viewer()->addSelectionFilter(myDocumentShapeFilter);
-
-  if (myFilterInfinite.IsNull())
-    myFilterInfinite = new PartSet_FilterInfinite();
-  myWorkshop->viewer()->addSelectionFilter(myFilterInfinite);
+  mySelectionFilters.Append(new PartSet_GlobalFilter(myWorkshop));
+  mySelectionFilters.Append(new PartSet_FilterInfinite());
 }
 
 PartSet_Module::~PartSet_Module()
 {
-  if (!myDocumentShapeFilter.IsNull())
-    myDocumentShapeFilter.Nullify();
-  if (!myFilterInfinite.IsNull())
-    myFilterInfinite.Nullify();
+  SelectMgr_ListIteratorOfListOfFilter aIt(mySelectionFilters);
+  for (; aIt.More(); aIt.Next()) {
+    Handle(SelectMgr_Filter) aFilter = aIt.Value();
+    if (!aFilter.IsNull())
+      aFilter.Nullify();
+  }
+}
+
+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::registerValidators()
index 8a469e9bd97e64d38c21e301ee2e7ebf6b600f68..46012ad1667279b0ecef33d45aeb7e7122c4ad40 100644 (file)
@@ -4,9 +4,7 @@
 #define PartSet_Module_H
 
 #include "PartSet.h"
-#include "PartSet_Filters.h"
 #include "PartSet_DocumentDataModel.h"
-#include "PartSet_FilterInfinite.h"
 
 #include <ModuleBase_IModule.h>
 #include <ModuleBase_Definitions.h>
@@ -18,6 +16,7 @@
 
 //#include <StdSelect_FaceFilter.hxx>
 #include <TopoDS_Shape.hxx>
+#include <SelectMgr_ListOfFilter.hxx>
 
 #include <QMap>
 #include <QMenu>
@@ -57,6 +56,11 @@ public:
   PartSet_Module(ModuleBase_IWorkshop* theWshop);
   virtual ~PartSet_Module();
 
+  // Add default selection filters of the module to the current viewer
+  virtual void activateSelectionFilters();
+  // Remove default selection filters of the module from the current viewer
+  virtual void deactivateSelectionFilters();
+
   /// Creates custom widgets for property panel
   virtual ModuleBase_ModelWidget* createWidgetByType(const std::string& theType, QWidget* theParent,
                                                      Config_WidgetAPI* theWidgetApi, std::string theParentId);
@@ -64,7 +68,6 @@ public:
   /// Call back forlast tuning of property panel before operation performance
   virtual void propertyPanelDefined(ModuleBase_Operation* theOperation);
 
-
   /// Realizes some functionality by an operation start
   /// Displays all sketcher sub-Objects, hides sketcher result, appends selection filters
   /// \param theOperation a started operation
@@ -205,9 +208,7 @@ protected slots:
    // Automatical restarting mode flag
    RestartingMode myRestartingMode;
 
-  /// A filter which provides selection within a current document or whole PartSet
-  Handle(PartSet_GlobalFilter) myDocumentShapeFilter;
-  Handle(PartSet_FilterInfinite) myFilterInfinite;
+  SelectMgr_ListOfFilter mySelectionFilters;
 
   PartSet_SketcherMgr* mySketchMgr;
 
index 828a4265505b365e13725ba224ab4ad90c943e4c..203e2a89714a346fed45d9b62ab8d13350b5654b 100644 (file)
@@ -176,7 +176,7 @@ void XGUI_Workshop::startApplication()
   // Calling of  loadCustomProps before activating module is required
   // by Config_PropManger to restore user-defined path to plugins
   ModuleBase_Preferences::loadCustomProps();
-  activateModule();
+  createModule();
   if (myMainWindow) {
     myMainWindow->show();
     updateCommandStatus();
@@ -187,6 +187,29 @@ void XGUI_Workshop::startApplication()
   emit applicationStarted();
 }
 
+void XGUI_Workshop::activateModule()
+{
+  myModule->activateSelectionFilters();
+
+  connect(myDisplayer, SIGNAL(objectDisplayed(ObjectPtr, AISObjectPtr)),
+    myModule, SLOT(onObjectDisplayed(ObjectPtr, AISObjectPtr)));
+  connect(myDisplayer, SIGNAL(beforeObjectErase(ObjectPtr, AISObjectPtr)),
+    myModule, SLOT(onBeforeObjectErase(ObjectPtr, AISObjectPtr)));
+
+  myActionsMgr->update();
+
+}
+
+void XGUI_Workshop::deactivateModule()
+{
+  myModule->deactivateSelectionFilters();
+
+  disconnect(myDisplayer, SIGNAL(objectDisplayed(ObjectPtr, AISObjectPtr)),
+    myModule, SLOT(onObjectDisplayed(ObjectPtr, AISObjectPtr)));
+  disconnect(myDisplayer, SIGNAL(beforeObjectErase(ObjectPtr, AISObjectPtr)),
+    myModule, SLOT(onBeforeObjectErase(ObjectPtr, AISObjectPtr)));
+}
+
 //******************************************************
 void XGUI_Workshop::initMenu()
 {
@@ -1051,7 +1074,7 @@ ModuleBase_IModule* XGUI_Workshop::loadModule(const QString& theModule)
 }
 
 //******************************************************
-bool XGUI_Workshop::activateModule()
+bool XGUI_Workshop::createModule()
 {
   Config_ModuleReader aModuleReader;
   QString moduleName = QString::fromStdString(aModuleReader.getModuleName());
@@ -1059,13 +1082,13 @@ bool XGUI_Workshop::activateModule()
   if (!myModule)
     return false;
 
-  connect(myDisplayer, SIGNAL(objectDisplayed(ObjectPtr, AISObjectPtr)),
-    myModule, SLOT(onObjectDisplayed(ObjectPtr, AISObjectPtr)));
-  connect(myDisplayer, SIGNAL(beforeObjectErase(ObjectPtr, AISObjectPtr)),
-    myModule, SLOT(onBeforeObjectErase(ObjectPtr, AISObjectPtr)));
+  //connect(myDisplayer, SIGNAL(objectDisplayed(ObjectPtr, AISObjectPtr)),
+  //  myModule, SLOT(onObjectDisplayed(ObjectPtr, AISObjectPtr)));
+  //connect(myDisplayer, SIGNAL(beforeObjectErase(ObjectPtr, AISObjectPtr)),
+  //  myModule, SLOT(onBeforeObjectErase(ObjectPtr, AISObjectPtr)));
 
   myModule->createFeatures();
-  myActionsMgr->update();
+  //myActionsMgr->update();
   return true;
 }
 
index f6d1cb7c8c67f260309d8410e41deccb6d053dd4..fccb8575dc8c40a51f9f05596e5391353538697c 100644 (file)
@@ -67,6 +67,12 @@ Q_OBJECT
   //! Starting of the application
   void startApplication();
 
+  // Activates the module controls. Should be called after module creation
+  void activateModule();
+
+  // Deactivates the module controls. Should be called after module creation
+  void deactivateModule();
+
   //! Returns main window (Desktop) of the application
   AppElements_MainWindow* mainWindow() const
   {
@@ -380,8 +386,8 @@ signals:
   /// \param theModule name of the module
   ModuleBase_IModule* loadModule(const QString& theModule);
 
-  /// Activate module
-  bool activateModule();
+  /// Create module
+  bool createModule();
 
   /// Create object browser widget
   /// \param theParent a parent of widget