Salome HOME
Modify creation of curves: 1) using QDockWidget instead of QDialog; 2) selection...
[modules/hydro.git] / src / HYDROGUI / HYDROGUI_ZoneOp.cxx
index 88c540243313b5662c5fab92ed9f8111ef52167d..e2c95ab1bedc99abe686135e2a647d037f31889b 100644 (file)
@@ -25,7 +25,7 @@
 #include "HYDROGUI_DataModel.h"
 #include "HYDROGUI_ZoneDlg.h"
 #include "HYDROGUI_Module.h"
-#include "HYDROGUI_PrsZone.h"
+#include "HYDROGUI_Shape.h"
 #include "HYDROGUI_Tool.h"
 #include "HYDROGUI_UpdateFlags.h"
 
@@ -33,9 +33,8 @@
 #include <HYDROData_Iterator.h>
 #include <HYDROData_Polyline.h>
 
-#include <GraphicsView_ViewManager.h>
-#include <GraphicsView_ViewPort.h>
-#include <GraphicsView_Viewer.h>
+#include <OCCViewer_ViewManager.h>
+#include <OCCViewer_ViewModel.h>
 
 #include <LightApp_Application.h>
 #include <LightApp_UpdateFlags.h>
@@ -64,6 +63,8 @@ void HYDROGUI_ZoneOp::startOperation()
   if ( !aPanel )
     return;
 
+  aPanel->blockSignals( true );
+
   aPanel->reset();
 
   QString anObjectName = HYDROGUI_Tool::GenerateObjectName( module(), "Zone" );
@@ -147,11 +148,14 @@ void HYDROGUI_ZoneOp::startOperation()
   aPanel->setBorderColor( aBorderColor );
 
   aPanel->setPolylineNames( aPolylines );
-  aPanel->setPolylineName( aSelectedPolyline );
 
   aPanel->setBathymetries( aBathymetries );
   aPanel->setSelectedBathymetries( aSelectedBathymetries );
 
+  aPanel->blockSignals( false );
+
+  aPanel->setPolylineName( aSelectedPolyline );
+
 }
 
 void HYDROGUI_ZoneOp::abortOperation()
@@ -268,20 +272,10 @@ void HYDROGUI_ZoneOp::onCreatePreview( const QString& thePolylineName )
     myActiveViewManager = anApp->activeViewManager();
   }
 
-  if ( !myPreviewPrs )
-  {
-    myPreviewPrs = new HYDROGUI_PrsZone( myIsEdit ? myEditedObject : 0 );
-  }
-
-  myPreviewPrs->setPath( aPath );
-  myPreviewPrs->setFillingColor( aPanel->getFillingColor() );
-  myPreviewPrs->setBorderColor( aPanel->getBorderColor() );
-  myPreviewPrs->compute();
-
   if ( !myPreviewViewManager )
   {
-    myPreviewViewManager = ::qobject_cast<GraphicsView_ViewManager*>( 
-      anApp->createViewManager( GraphicsView_Viewer::Type() ) );
+    myPreviewViewManager = ::qobject_cast<OCCViewer_ViewManager*>( 
+      anApp->createViewManager( OCCViewer_Viewer::Type() ) );
     if ( myPreviewViewManager )
     {
       connect( myPreviewViewManager, SIGNAL( lastViewClosed( SUIT_ViewManager* ) ),
@@ -289,27 +283,24 @@ void HYDROGUI_ZoneOp::onCreatePreview( const QString& thePolylineName )
 
       module()->setViewManagerRole( myPreviewViewManager, HYDROGUI_Module::VMR_PreviewZone );
       myPreviewViewManager->setTitle( tr( "PREVIEW_ZONE" ) );
-      if ( GraphicsView_Viewer* aViewer = myPreviewViewManager->getViewer() )
+
+      if ( OCCViewer_Viewer* aViewer = myPreviewViewManager->getOCCViewer() )
       {
-        if ( GraphicsView_ViewPort* aViewPort = aViewer->getActiveViewPort() )
+        Handle(AIS_InteractiveContext) aCtx = aViewer->getAISContext();
+        if ( !aCtx.IsNull() )
         {
-          aViewPort->addItem( myPreviewPrs );
+          myPreviewPrs = new HYDROGUI_Shape( aCtx );
         }
       }
     }
   }
 
-  if ( myPreviewViewManager )
-  {
-    if ( GraphicsView_Viewer* aViewer = myPreviewViewManager->getViewer() )
-    {
-      if ( GraphicsView_ViewPort* aViewPort = aViewer->getActiveViewPort() )
-      {
-        aViewPort->update();
-        aViewPort->fitAll();
-      }
-    }
-  }
+  if ( !myPreviewViewManager || !myPreviewPrs )
+    return;
+
+  myPreviewPrs->setFillingColor( aPanel->getFillingColor(), false );
+  myPreviewPrs->setBorderColor( aPanel->getBorderColor(), false );
+  myPreviewPrs->setPath( aPath, true );
 }
 
 void HYDROGUI_ZoneOp::onLastViewClosed( SUIT_ViewManager* theViewManager )
@@ -319,14 +310,6 @@ void HYDROGUI_ZoneOp::onLastViewClosed( SUIT_ViewManager* theViewManager )
 
 void HYDROGUI_ZoneOp::closePreview()
 {
-  // It's very strange, but without calling this method (it's quite safe) a crash is stably reproduced.
-  // Scenario: create any non-Graphics view, activate import op, click apply.
-  // Result: a few SIGSEGVs coming from processEvents(), then crash.
-  if( myPreviewViewManager )
-    if( GraphicsView_Viewer* aViewer = myPreviewViewManager->getViewer() )
-      if( GraphicsView_ViewPort* aViewPort = aViewer->getActiveViewPort() )
-        aViewPort->onBoundingRectChanged();
-
   if( myPreviewPrs )
   {
     delete myPreviewPrs;