]> SALOME platform Git repositories - modules/geom.git/commitdiff
Salome HOME
Bug fixed: if Plot2D viewer is active, then "computation" of popup crashed.
authorasv <asv@opencascade.com>
Mon, 27 Jun 2005 11:51:58 +0000 (11:51 +0000)
committerasv <asv@opencascade.com>
Mon, 27 Jun 2005 11:51:58 +0000 (11:51 +0000)
src/GEOMGUI/GEOMGUI_Selection.cxx
src/GEOMGUI/GEOMGUI_Selection.h
src/GEOMGUI/GeometryGUI.cxx

index c7ff2558fe8a53152c9533e9f510e0c769edb9b9..ebbcc0e6776043e623b657facf70adfb80f00fef 100644 (file)
@@ -24,6 +24,7 @@
 #include <vtkActorCollection.h>
 
 #include <OCCViewer_ViewModel.h>
+#include <VTKViewer_ViewModel.h>
 
 #include <AIS.hxx>
 #include <AIS_InteractiveObject.hxx>
@@ -82,14 +83,13 @@ bool GEOMGUI_Selection::isVisible( const int index ) const
 
 bool GEOMGUI_Selection::isOCC() const
 {
-  SUIT_ViewWindow* window = SUIT_Session::session()->activeApplication()->desktop()->activeWindow();
-  return ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
+  return activeViewType( OCCViewer_Viewer::Type() );
 }
 
 QString GEOMGUI_Selection::displayMode( const int index ) const
 {
   SALOME_View* view = GEOM_Displayer::GetActiveView();
-  if ( view ) {
+  if ( view /*fix for 9320==>*/&& ( isOCC() || activeViewType( VTKViewer_Viewer::Type() ) ) ) {
     SALOME_Prs* prs = view->CreatePrs( entry( index ) );
     if ( prs ) {
       if ( isOCC() ) { // assuming OCC
@@ -117,7 +117,7 @@ QString GEOMGUI_Selection::displayMode( const int index ) const
          }
        }
       } 
-      else { // assuming VTK
+      else if ( activeViewType( VTKViewer_Viewer::Type() ) ) { // assuming VTK
        SVTK_Prs* vtkPrs = (SVTK_Prs*) prs;
        vtkActorCollection* lst = vtkPrs->GetObjects();
        if ( lst ) {
@@ -178,8 +178,31 @@ GEOM::GEOM_Object_ptr GEOMGUI_Selection::getObject( const int index ) const
   return GEOM::GEOM_Object::_nil();
 }
 
+SUIT_ViewWindow* activeVW()
+{
+  SUIT_Session* session = SUIT_Session::session();
+  if ( session ) {
+    SUIT_Application* app = session->activeApplication();
+    if ( app ) {
+      SUIT_Desktop* desk = app->desktop();
+      if ( desk ) 
+       return desk->activeWindow();
+    }
+  }
+  return 0;
+}
+
 bool GEOMGUI_Selection::isActiveViewer() const
 {
-  return ( SUIT_Session::session()->activeApplication()->desktop()->activeWindow() != 0 );
+  return ( activeVW != 0 );
 }
 
+bool GEOMGUI_Selection::activeViewType( const QString& type ) const
+{
+  SUIT_ViewWindow* win = activeVW();
+  if ( win ) {
+    SUIT_ViewManager* vm = win->getViewManager();
+    return ( vm && vm->getType() == type );
+  }
+  return false;
+}
index 022bf82104b081d8eece5b752e35401ba2b16a2e..01648e32aa18aec06e3c54db5ecfaefbe46b2b02 100644 (file)
@@ -52,6 +52,7 @@ private:
 
   bool                  isComponent( const int ) const;
   GEOM::GEOM_Object_ptr getObject( const int ) const;
+  bool                  activeViewType( const QString& ) const;
 };
 
 #endif
index 0acce6db79608dbcb95cfc853e28e88ca6a5fa7b..4e9a653379063cb335a548165f7df928b3910647 100644 (file)
@@ -953,10 +953,10 @@ void GeometryGUI::initialize( CAM_Application* app )
   dispmodeId = mgr->insert(  tr( "MEN_DISPLAY_MODE" ), -1, -1 ); // display mode menu
   mgr->insert( action(  80311 ), dispmodeId, -1 ); // wireframe
   mgr->setRule( action( 80311 ), "$client in {'OCCViewer' 'VTKViewer'} and selcount>0", true );
-  mgr->setRule( action( 80311 ), "$displaymode in {'Wireframe'}", false );
+  mgr->setRule( action( 80311 ), "$client in {'OCCViewer' 'VTKViewer'} and $displaymode in {'Wireframe'}", false );
   mgr->insert( action(  80312 ), dispmodeId, -1 ); // shading
   mgr->setRule( action( 80312 ), "$client in {'OCCViewer' 'VTKViewer'} and selcount>0", true );
-  mgr->setRule( action( 80312 ), "$displaymode in {'Shading'}", false );
+  mgr->setRule( action( 80312 ), "$client in {'OCCViewer' 'VTKViewer'} and $displaymode in {'Shading'}", false );
   mgr->insert( separator(), -1, -1 );        // -----------
   mgr->insert( action(  8032 ), -1, -1 ); // color
   mgr->setRule( action( 8032 ), "$client in {'OCCViewer' 'VTKViewer'} and selcount>0", true );