]> SALOME platform Git repositories - modules/gui.git/commitdiff
Salome HOME
PAL18352, PAL19290: Conflict in objects selections when switching modules
authoreap <eap@opencascade.com>
Thu, 17 Apr 2008 09:05:53 +0000 (09:05 +0000)
committereap <eap@opencascade.com>
Thu, 17 Apr 2008 09:05:53 +0000 (09:05 +0000)
+  virtual bool                        isSelectionCompatible();

src/CAM/CAM_Module.cxx
src/CAM/CAM_Module.h
src/LightApp/LightApp_Module.cxx
src/LightApp/LightApp_Module.h

index 9b37b334795b8786ddfe0982a41c59ea0199193e..b5a714c7d73dce56d0ec08bc4350b84091cf2f5e 100755 (executable)
@@ -132,6 +132,13 @@ CAM_Application* CAM_Module::application() const
   return myApp;
 }
 
+/*! \brief If return false, selection will be cleared at module activation
+ */
+bool CAM_Module::isSelectionCompatible()
+{
+  return false;
+}
+
 /*!Public slot
  * \retval true.
  */
index 3409905e764e985401eb90cee97e9d4362754677..3768d3fe53e44d441380ca42c53efc5a349b2b91 100755 (executable)
@@ -90,6 +90,8 @@ public slots:
   virtual void           onApplicationClosed( SUIT_Application* );
 
 protected: 
+  virtual bool           isSelectionCompatible();
+
   virtual CAM_DataModel* createDataModel();
 
   virtual void           setModuleName( const QString& );
index 15eb8b0114c665c06cbba4a11ff8a5052d3eb11a..5d897786682e001e14438191a24ef653300b324d 100644 (file)
 #include "LightApp_SwitchOp.h"
 #include "LightApp_UpdateFlags.h"
 #include "LightApp_ShowHideOp.h"
+#include "LightApp_SelectionMgr.h"
 
 #include "SUIT_Operation.h"
 #include <SUIT_Study.h>
 #include <SUIT_DataObject.h>
 #include <SUIT_ResourceMgr.h>
 
+#include "SALOME_ListIO.hxx"
+#include "SALOME_ListIteratorOfListIO.hxx"
+
 #ifndef DISABLE_VTKVIEWER
 #ifndef DISABLE_SALOMEOBJECT
   #include <SVTK_ViewWindow.h>
@@ -164,11 +168,39 @@ void LightApp_Module::selectionChanged()
 {
 }
 
+/*! \brief If return false, selection will be cleared at module activation
+ */
+bool LightApp_Module::isSelectionCompatible()
+{
+  // return true if selected objects belong to this module
+  bool isCompatible = true;
+  SALOME_ListIO selected;
+  if ( LightApp_SelectionMgr *Sel = getApp()->selectionMgr() )
+    Sel->selectedObjects( selected );
+
+  LightApp_Study* aStudy = dynamic_cast<LightApp_Study*>( getApp()->activeStudy() );
+  LightApp_DataObject* aRoot = dynamic_cast<LightApp_DataObject*>( dataModel()->root() );
+  if ( aStudy && aRoot ) {
+    // my data type
+    QString moduleDataType = aRoot->componentDataType();
+    // check data type of selection
+    SALOME_ListIteratorOfListIO It( selected );
+    for ( ; isCompatible && It.More(); It.Next()) {
+      Handle(SALOME_InteractiveObject)& io = It.Value();
+      isCompatible = ( aStudy->componentDataType( io->getEntry() ) == moduleDataType );
+    }
+  }
+  return isCompatible;
+}
+
 /*!Activate module.*/
 bool LightApp_Module::activateModule( SUIT_Study* study )
 {
   bool res = CAM_Module::activateModule( study );
 
+  if ( !isSelectionCompatible() )// PAL19290, PAL18352
+    getApp()->selectionMgr()->clearSelected();
+
   if ( res && application() && application()->resourceMgr() )
     application()->resourceMgr()->raiseTranslators( name() );
 
index de4e6600f0319862f56b695a5f9cdbaa7031a53d..2332b4bd4b095d9bfe9128a61c20855a4b3f3b5c 100644 (file)
@@ -128,6 +128,8 @@ protected:
 
   virtual void                        updateControls();
 
+  virtual bool                        isSelectionCompatible();
+
 private:
   typedef QMap<int,LightApp_Operation*> MapOfOperation;