Salome HOME
PAL12608: Add possibility to check geometry of a shape.
[modules/geom.git] / src / DisplayGUI / DisplayGUI.cxx
index 7ceed3f63463e80292a42cbd638b821dec0e76b9..3e7b44dd6f0b32a46bd5067d87564634e84f311a 100644 (file)
@@ -17,7 +17,7 @@
 //  License along with this library; if not, write to the Free Software 
 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
 // 
-//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 //
 //
 #include <SUIT_ViewWindow.h>
 #include <SUIT_OverrideCursor.h>
 
-#include <VTKViewer_ViewWindow.h>
-#include <VTKViewer_RenderWindowInteractor.h>
 #include <OCCViewer_ViewManager.h>
 #include <OCCViewer_ViewModel.h>
 #include <OCCViewer_ViewWindow.h>
 
 #include <SALOME_ListIteratorOfListIO.hxx>
 
+#include <SVTK_ViewWindow.h>
+#include <SVTK_View.h>
 #include <SVTK_ViewModel.h>
 #include <SOCC_ViewModel.h>
 #include <SVTK_Prs.h>
 #include <SOCC_Prs.h>
 
+#include <QtxActionMenuMgr.h>
+
 #include <SalomeApp_Application.h>
-#include <SalomeApp_SelectionMgr.h>
+#include <LightApp_SelectionMgr.h>
 #include <SalomeApp_Study.h>
 
 #include <AIS_ListIteratorOfListOfInteractive.hxx>
@@ -97,23 +99,30 @@ DisplayGUI::~DisplayGUI()
 bool DisplayGUI::OnGUIEvent(int theCommandID, SUIT_Desktop* parent)
 {
   DisplayGUI* myDisplayGUI = GetDisplayGUI( getGeometryGUI() );
+  LightApp_SelectionMgr *Sel = getGeometryGUI()->getApp()->selectionMgr();
+  SALOME_ListIO selected;
+  Sel->selectedObjects( selected );
 
   switch (theCommandID) {
   case 211: // MENU VIEW - WIREFRAME/SHADING
     {
       myDisplayGUI->InvertDisplayMode();
       int newMode = myDisplayGUI->GetDisplayMode();
-      SUIT_Session::session()->activeApplication()->desktop()->menuBar()->
-       changeItem( 211, newMode == 1 ? tr( "GEOM_MEN_WIREFRAME" ) : tr("GEOM_MEN_SHADING") );
+      getGeometryGUI()->action( 211 )->setMenuText( newMode == 1 ? tr( "GEOM_MEN_WIREFRAME" ) : tr("GEOM_MEN_SHADING") );
+      getGeometryGUI()->menuMgr()->update();
+//      SUIT_Session::session()->activeApplication()->desktop()->menuBar()->
+//     changeItem( 211, newMode == 1 ? tr( "GEOM_MEN_WIREFRAME" ) : tr("GEOM_MEN_SHADING") );
       break;
     }
   case 212: // MENU VIEW - DISPLAY ALL
     {
+      getGeometryGUI()->EmitSignalDeactivateDialog();
       myDisplayGUI->DisplayAll();
       break;
     }
   case 213: // MENU VIEW - DISPLAY ONLY
     {
+      getGeometryGUI()->EmitSignalDeactivateDialog();
       myDisplayGUI->DisplayOnly();
       break;
     }
@@ -129,6 +138,7 @@ bool DisplayGUI::OnGUIEvent(int theCommandID, SUIT_Desktop* parent)
     }
   case 216: // MENU VIEW - DISPLAY
     {
+      getGeometryGUI()->EmitSignalDeactivateDialog();
       myDisplayGUI->Display();
       break;
     }
@@ -148,6 +158,7 @@ bool DisplayGUI::OnGUIEvent(int theCommandID, SUIT_Desktop* parent)
       break;
     }
   }
+  Sel->setSelectedObjects( selected );
   return true;
 }
 
@@ -197,7 +208,7 @@ void DisplayGUI::EraseAll()
       SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( app->activeStudy() );
       SUIT_ViewManager* vman = vw->getViewManager();
       if ( vman->getType() == OCCViewer_Viewer::Type() || 
-          vman->getType() == VTKViewer_Viewer::Type() ) {
+          vman->getType() == SVTK_Viewer::Type() ) {
        GEOM_Displayer( appStudy ).EraseAll();
       }
     }
@@ -229,7 +240,7 @@ void DisplayGUI::Display()
   if ( !anActiveStudy ) return;
   
   //get SalomeApp selection manager
-  SalomeApp_SelectionMgr* aSelMgr = app->selectionMgr();
+  LightApp_SelectionMgr* aSelMgr = app->selectionMgr();
   if ( !aSelMgr ) return;
   
   SALOME_ListIO aList;
@@ -285,7 +296,7 @@ void DisplayGUI::Erase()
   if ( !anActiveStudy ) return;
   
   //get SalomeApp selection manager
-  SalomeApp_SelectionMgr* aSelMgr = app->selectionMgr();
+  LightApp_SelectionMgr* aSelMgr = app->selectionMgr();
   if ( !aSelMgr ) return;
   
   SALOME_ListIO aList;
@@ -336,9 +347,9 @@ void DisplayGUI::SetDisplayMode( const int mode, SUIT_ViewWindow* viewWindow )
 
   if ( !viewWindow ) 
     viewWindow = SUIT_Session::session()->activeApplication()->desktop()->activeWindow();
-  if ( viewWindow->getViewManager()->getType() == VTKViewer_Viewer::Type() ) {
-    VTKViewer_RenderWindowInteractor* myRenderInter= ((VTKViewer_ViewWindow*)viewWindow)->getRWInteractor();
-    myRenderInter->SetDisplayMode( mode );
+  if ( viewWindow->getViewManager()->getType() == SVTK_Viewer::Type() ) {
+    SVTK_View* aView = ((SVTK_ViewWindow*)viewWindow)->getView();
+    aView->SetDisplayMode( mode );
   } 
   else if ( viewWindow->getViewManager()->getType() == OCCViewer_Viewer::Type() ) {
     OCCViewer_Viewer* v3d = ((OCCViewer_ViewManager*)(viewWindow->getViewManager()))->getOCCViewer();
@@ -372,9 +383,9 @@ int DisplayGUI::GetDisplayMode( SUIT_ViewWindow* viewWindow )
   int dispMode = 0;
   if ( !viewWindow ) 
     viewWindow = SUIT_Session::session()->activeApplication()->desktop()->activeWindow();
-  if ( viewWindow->getViewManager()->getType() == VTKViewer_Viewer::Type() ) {
-    VTKViewer_RenderWindowInteractor* myRenderInter= ((VTKViewer_ViewWindow*)viewWindow)->getRWInteractor();
-    dispMode = myRenderInter->GetDisplayMode();
+  if ( viewWindow->getViewManager()->getType() == SVTK_Viewer::Type() ) {
+    SVTK_View* aView = ((SVTK_ViewWindow*)viewWindow)->getView();
+    dispMode = aView->GetDisplayMode();
   } 
   else if ( viewWindow->getViewManager()->getType() == OCCViewer_Viewer::Type() ) {
     OCCViewer_Viewer* v3d = ((OCCViewer_ViewManager*)(viewWindow->getViewManager()))->getOCCViewer();
@@ -408,30 +419,31 @@ void DisplayGUI::ChangeDisplayMode( const int mode, SUIT_ViewWindow* viewWindow
   SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
   if ( !app ) return;
 
-  SalomeApp_SelectionMgr* aSelMgr = app->selectionMgr();
+  LightApp_SelectionMgr* aSelMgr = app->selectionMgr();
   if ( !aSelMgr ) return;
   
   SUIT_OverrideCursor();
 
   SALOME_ListIO aList;
   
-  if ( viewWindow->getViewManager()->getType() == VTKViewer_Viewer::Type() ) {
-    VTKViewer_RenderWindowInteractor* myRenderInter = ((VTKViewer_ViewWindow*)viewWindow)->getRWInteractor();
+  if ( viewWindow->getViewManager()->getType() == SVTK_Viewer::Type() ) {
+    SVTK_ViewWindow* vw = dynamic_cast<SVTK_ViewWindow*>( viewWindow );
+    SVTK_View* aView = vw->getView();
 
     aSelMgr->selectedObjects( aList );
     SALOME_ListIteratorOfListIO It( aList );
 
     for( ;It.More(); It.Next() ) {
-      SVTK_Viewer* stvkViewer = (SVTK_Viewer*)(viewWindow->getViewManager()->getViewModel());
-      SVTK_Prs* vtkPrs = dynamic_cast<SVTK_Prs*>( stvkViewer->CreatePrs( It.Value()->getEntry() ) );
+      SVTK_Viewer* stvkViewer = dynamic_cast<SVTK_Viewer*>(vw->getViewManager()->getViewModel());
+      SVTK_Prs* vtkPrs = stvkViewer ? dynamic_cast<SVTK_Prs*>( stvkViewer->CreatePrs( It.Value()->getEntry() ) ) : 0;
       if ( vtkPrs && !vtkPrs->IsNull() ) {
        if ( mode == 0 )
-         myRenderInter->ChangeRepresentationToWireframe( vtkPrs->GetObjects() );
+         aView->ChangeRepresentationToWireframe( vtkPrs->GetObjects() );
        else if ( mode == 1 )
-         myRenderInter->ChangeRepresentationToSurface( vtkPrs->GetObjects() );
+         aView->ChangeRepresentationToSurface( vtkPrs->GetObjects() );
       }
     }
-    myRenderInter->Render();
+    aView->Repaint();
   }
   else if ( viewWindow->getViewManager()->getType() == OCCViewer_Viewer::Type() ) {
     OCCViewer_Viewer* v3d = ((OCCViewer_ViewManager*)(viewWindow->getViewManager()))->getOCCViewer();
@@ -463,6 +475,9 @@ void DisplayGUI::ChangeDisplayMode( const int mode, SUIT_ViewWindow* viewWindow
 //=====================================================================================
 extern "C"
 {
+#ifdef WNT
+       __declspec( dllexport )
+#endif
   GEOMGUI* GetLibGUI( GeometryGUI* parent )
   {
     return DisplayGUI::GetDisplayGUI( parent );