Salome HOME
Add tests for drag and drop algo.
[modules/hydro.git] / src / HYDROGUI / HYDROGUI_StreamOp.cxx
index 5882c2f868ac21fb9d092cc03a0c5d17f7ab7af7..b85cfb80a3f283f0a9029555f5cfe3dbcad33d8a 100755 (executable)
@@ -55,7 +55,6 @@
 HYDROGUI_StreamOp::HYDROGUI_StreamOp( HYDROGUI_Module* theModule, bool theIsEdit )
 : HYDROGUI_Operation( theModule ), 
   myIsEdit( theIsEdit ),
-  myViewManager( NULL ),
   myPreviewPrs( NULL )
 {
   setName( theIsEdit ? tr( "EDIT_STREAM" ) : tr( "CREATE_STREAM" ) );
@@ -80,6 +79,9 @@ void HYDROGUI_StreamOp::startOperation()
   // Get/create the edited object
   if( myIsEdit ) {
     myEditedObject = Handle(HYDROData_Stream)::DownCast( HYDROGUI_Tool::GetSelectedObject( module() ) );
+    if ( !myEditedObject.IsNull() && myEditedObject->IsMustBeUpdated() ) {
+      myEditedObject->Update();
+    }
   } else {
     myEditedObject = Handle(HYDROData_Stream)::DownCast( doc()->CreateObject( KIND_STREAM ) );
   }
@@ -188,8 +190,10 @@ bool HYDROGUI_StreamOp::processApply( int& theUpdateFlags,
     module()->setObjectVisible( HYDROGUI_Tool::GetActiveOCCViewId( module() ), myEditedObject, true );
   }
 
+  module()->setIsToUpdate( myEditedObject );
+
   // Set update flags
-  theUpdateFlags = UF_Model | UF_OCCViewer | UF_OCC_Forced;
+  theUpdateFlags = UF_Model | UF_OCCViewer | UF_OCC_Forced | UF_VTKViewer;
 
   return true;
 }
@@ -201,22 +205,22 @@ void HYDROGUI_StreamOp::createPreview()
   }
 
   LightApp_Application* anApp = module()->getApp();
-  if ( !myViewManager ) {
-    myViewManager = ::qobject_cast<OCCViewer_ViewManager*>( 
-      anApp->getViewManager( OCCViewer_Viewer::Type(), true ) );
-  }
+  if ( !getPreviewManager() )
+    setPreviewManager( ::qobject_cast<OCCViewer_ViewManager*>( 
+                       anApp->getViewManager( OCCViewer_Viewer::Type(), true ) ) );
 
-  if ( myViewManager && !myPreviewPrs ) {
-    if ( OCCViewer_Viewer* aViewer = myViewManager->getOCCViewer() ) {
+  OCCViewer_ViewManager* aViewManager = getPreviewManager();
+  if ( aViewManager && !myPreviewPrs ) {
+    if ( OCCViewer_Viewer* aViewer = aViewManager->getOCCViewer() ) {
       Handle(AIS_InteractiveContext) aCtx = aViewer->getAISContext();
       if ( !aCtx.IsNull() ) {
-        myPreviewPrs = new HYDROGUI_Shape( aCtx, myEditedObject );
+        myPreviewPrs = new HYDROGUI_Shape( aCtx, myEditedObject, getPreviewZLayer() );
       }
     }
   }
 
   if ( myPreviewPrs ) {
-    myPreviewPrs->update();  
+    myPreviewPrs->update( true );
   }
 }
 
@@ -304,7 +308,7 @@ void HYDROGUI_StreamOp::onAddProfiles()
       Handle(HYDROData_Profile)::DownCast( aVerifiedProfiles.Value( i ) );
     myEditedObject->AddProfile( aProfile );
   }
-  myEditedObject->Update();
+  myEditedObject->UpdatePrs();
 
   // Update the panel
   updatePanelData();
@@ -344,7 +348,7 @@ void HYDROGUI_StreamOp::onRemoveProfiles( const QStringList& theProfilesToRemove
 
   if ( isRemoved ) {
     // Update the edited stream object
-    myEditedObject->Update();
+    myEditedObject->UpdatePrs();
 
     // Update the panel
     updatePanelData();
@@ -366,11 +370,15 @@ void HYDROGUI_StreamOp::onAxisChanged( const QString& theNewAxis )
 
   // Prepare data for intersection check
   TopoDS_Face aPlane;
-  if ( anAxis.IsNull() || !myEditedObject->BuildFace(anAxis, aPlane) ) {
+  if ( !myEditedObject->BuildFace(anAxis, aPlane) ) {
+    SUIT_MessageBox::critical( module()->getApp()->desktop(), 
+                              tr( "BAD_SELECTED_POLYLINE_TLT" ),
+                              tr( "BAD_SELECTED_POLYLINE_MSG" ).arg( theNewAxis ) );
     // To restore the old axis
     updatePanelData();
     return;
   }
+
   Standard_Real aPar(.0);
 
   // Get list of profiles which do not intersect the axis
@@ -407,7 +415,7 @@ void HYDROGUI_StreamOp::onAxisChanged( const QString& theNewAxis )
   } else {
     // Set axis
     myEditedObject->SetHydraulicAxis( anAxis );
-    myEditedObject->Update();
+    myEditedObject->UpdatePrs();
 
     // Update the panel
     updatePanelData();
@@ -420,7 +428,7 @@ void HYDROGUI_StreamOp::onAxisChanged( const QString& theNewAxis )
 void HYDROGUI_StreamOp::updatePanelData()
 {
   HYDROGUI_StreamDlg* aPanel = ::qobject_cast<HYDROGUI_StreamDlg*>( inputPanel() );
-  if ( !aPanel ) {
+  if ( !aPanel || myEditedObject.IsNull() ) {
     return;
   }