Salome HOME
Feature #102: Display of Lambert coordinates.
[modules/hydro.git] / src / HYDROGUI / HYDROGUI_ImportBathymetryOp.cxx
index f42373395f25308d26a74225173c7585104af3c3..8fb9c815ab706ad2d6ba76311fe57dc763f5ca54 100644 (file)
 
 #include <LightApp_Application.h>
 #include <LightApp_UpdateFlags.h>
+#include <SUIT_ViewManager.h>
+#include <SVTK_ViewModel.h>
 
 #include <QFileInfo>
 
-HYDROGUI_ImportBathymetryOp::HYDROGUI_ImportBathymetryOp( HYDROGUI_Module* theModule )
-: HYDROGUI_Operation( theModule )
+HYDROGUI_ImportBathymetryOp::HYDROGUI_ImportBathymetryOp( HYDROGUI_Module* theModule, 
+                                                         const bool theIsEdit  )
+: HYDROGUI_Operation( theModule ),
+  myIsEdit( theIsEdit )
 {
-  setName( tr( "IMPORT_BATHYMETRY" ) );
+  setName( theIsEdit ? tr( "EDIT_IMPORTED_BATHYMETRY" ) : tr( "IMPORT_BATHYMETRY" ) );
 }
 
 HYDROGUI_ImportBathymetryOp::~HYDROGUI_ImportBathymetryOp()
@@ -55,6 +59,18 @@ void HYDROGUI_ImportBathymetryOp::startOperation()
     return;
 
   aPanel->reset();
+
+  if( myIsEdit )
+  {
+    myEditedObject = Handle(HYDROData_Bathymetry)::DownCast( HYDROGUI_Tool::GetSelectedObject( module() ) );
+    if( !myEditedObject.IsNull() )
+    {
+      QString aName = myEditedObject->GetName();
+      QString aFileName = myEditedObject->GetFilePath();
+      aPanel->setObjectName( aName );
+      aPanel->setFileName( aFileName );
+    }
+  }
 }
 
 void HYDROGUI_ImportBathymetryOp::abortOperation()
@@ -107,14 +123,22 @@ bool HYDROGUI_ImportBathymetryOp::processApply( int& theUpdateFlags,
 
   // check that there are no other objects with the same name in the document
   Handle(HYDROData_Entity) anObject = HYDROGUI_Tool::FindObjectByName( module(), anObjectName );
-  if ( !anObject.IsNull() )
+  if ( ( !myIsEdit ) && ( !anObject.IsNull() ) )
   {
     theErrorMsg = tr( "OBJECT_EXISTS_IN_DOCUMENT" ).arg( anObjectName );
     return false;
   }
 
-  Handle(HYDROData_Bathymetry) aBathymetryObj = 
-    Handle(HYDROData_Bathymetry)::DownCast( doc()->CreateObject( KIND_BATHYMETRY ) );
+  Handle(HYDROData_Bathymetry) aBathymetryObj;
+  if ( myIsEdit )
+  {
+    aBathymetryObj = myEditedObject;
+  }
+  else
+  {
+    aBathymetryObj = 
+      Handle(HYDROData_Bathymetry)::DownCast( doc()->CreateObject( KIND_BATHYMETRY ) );
+  }
   if ( aBathymetryObj.IsNull() )
     return false;
 
@@ -126,7 +150,33 @@ bool HYDROGUI_ImportBathymetryOp::processApply( int& theUpdateFlags,
 
   aBathymetryObj->SetName( anObjectName );
 
-  theUpdateFlags = UF_Model;
+  // Activate VTK viewer and show the bathymetry
+  SUIT_ViewManager* aVTKMgr = 0;
+  SUIT_ViewManager* aViewMgr = module()->getApp()->activeViewManager();
+  // Try to get a VTK viewer as an active or existing one
+  if ( aViewMgr )
+  {
+    if ( aViewMgr->getType() == SVTK_Viewer::Type() )
+    {
+      aVTKMgr = aViewMgr;
+    }
+    else
+    {
+      aVTKMgr = module()->getApp()->viewManager( SVTK_Viewer::Type() );
+    }
+  }
+  // If there is no VTK viewer yet then create a new one
+  if ( !aVTKMgr )
+  {
+    aVTKMgr = module()->getApp()->createViewManager( SVTK_Viewer::Type() );
+  }
+  // Set the bathymetry visible in the VTK viewer
+  if ( aVTKMgr )
+  {
+    module()->setObjectVisible( (size_t)aVTKMgr->getViewModel(), aBathymetryObj, true );
+  }
+
+  theUpdateFlags = UF_Model | UF_VTKViewer | UF_VTK_Forced;
   return true;
 }