Salome HOME
Merge remote-tracking branch 'remotes/origin/BR_2017' into HEAD
[modules/hydro.git] / src / HYDROGUI / HYDROGUI_Operations.cxx
index 0a96e7986f8f9afffa28f14b8c0a29c913bfe757..a3631f1a46c2d133331979c07516c6d457b4694b 100644 (file)
@@ -29,6 +29,7 @@
 #include "HYDROGUI_ExportFileOp.h"
 #include "HYDROGUI_ImportImageOp.h"
 #include "HYDROGUI_ImportPolylineOp.h"
+#include "HYDROGUI_ImportSinusXOp.h"
 #include "HYDROGUI_ImportBathymetryOp.h"
 #include "HYDROGUI_ImmersibleZoneOp.h"
 #include "HYDROGUI_Module.h"
 #include "HYDROGUI_GeoreferencementOp.h"
 #include "HYDROGUI_SetColorOp.h"
 #include "HYDROGUI_BathymetryBoundsOp.h"
-#include "HYDROGUI_Tool.h"
+#include "HYDROGUI_Tool2.h"
 #include "HYDROGUI_ZLevelsOp.h"
 #include "HYDROGUI_LocalCSOp.h"
 #include "HYDROGUI_RiverBottomOp.h"
 #include "HYDROGUI_ProfileInterpolateOp.h"
+#include "HYDROGUI_RecognizeContoursOp.h"
 #include "HYDROGUI_SubmersibleOp.h"
 #include "HYDROGUI_StricklerTableOp.h"
 #include "HYDROGUI_DuplicateOp.h"
-#include "HYDROGUI_LandCoverOp.h"
-
+#include "HYDROGUI_LandCoverMapOp.h"
+#include "HYDROGUI_PolylineExtractionOp.h"
+#include "HYDROGUI_ExportSinusXOp.h"
+#include "HYDROGUI_MergePolylinesOp.h"
+#include "HYDROGUI_SplitPolylinesOp.h"
+#include "HYDROGUI_LandCoverColoringOp.h"
+#include "HYDROGUI_SetTransparencyOp.h"
+#include "HYDROGUI_ImportLandCoverMapOp.h"
+#include "HYDROGUI_BathymetrySelectionOp.h"
+#include "HYDROGUI_BathymetryOp.h"
+#include "HYDROGUI_RegenerateRegionColorsOp.h"
+#include "HYDROGUI_PolylineStyleOp.h"
+#include "HYDROGUI_ZoneSetColorOp.h"
 #include <HYDROData_Document.h>
 #include <HYDROData_Obstacle.h>
 #include <HYDROData_SplitToZonesTool.h>
+#include <HYDROData_Iterator.h>
 
 #include <GeometryGUI.h>
 #include <GeometryGUI_Operations.h>
 
 #include <LightApp_Application.h>
 
-#include <CAM_Application.h>
+#include <OCCViewer_ViewModel.h>
+#include <OCCViewer_ViewManager.h>
+#include <OCCViewer_ViewWindow.h>
+#include <OCCViewer_ViewFrame.h>
 
 #include <QtxListAction.h>
 #include <QtxActionToolMgr.h>
@@ -123,6 +140,9 @@ void HYDROGUI_Module::createActions()
   createAction( RemoveImageRefsId, "REMOVE_IMAGE_REFERENCE", "REMOVE_IMAGE_REFERENCE_ICO" );
   
   createAction( ImportPolylineId, "IMPORT_POLYLINE", "IMPORT_POLYLINE_ICO" );
+  createAction( ImportSinusXId, "IMPORT_SINUSX", "IMPORT_SINUSX_ICO" );
+  createAction( ExportSinusXId, "EXPORT_SINUSX", "EXPORT_SINUSX_ICO" );
+  createAction( ImportLandCoverMapId, "IMPORT_LANDCOVER_MAP", "IMPORT_LANDCOVER_MAP_ICO" );
 
   createAction( CreatePolylineId, "CREATE_POLYLINE", "CREATE_POLYLINE_ICO" );
   createAction( EditPolylineId, "EDIT_POLYLINE", "EDIT_POLYLINE_ICO" ); 
@@ -139,6 +159,16 @@ void HYDROGUI_Module::createActions()
   createAction( ImportBathymetryId, "IMPORT_BATHYMETRY", "IMPORT_BATHYMETRY_ICO", Qt::CTRL + Qt::Key_B );
   createAction( EditImportedBathymetryId, "EDIT_IMPORTED_BATHYMETRY", "EDIT_IMPORTED_BATHYMETRY_ICO" );
   createAction( BathymetryBoundsId, "BATHYMETRY_BOUNDS", "BATHYMETRY_BOUNDS_ICO" );
+  createAction( BathymetrySelectionId, "BATHYMETRY_SELECTION", "BATHYMETRY_SELECTION_ICO",
+    0, true, SLOT( onBathymetrySelection() ) );
+
+  createAction( BathymetryTextId, "BATHYMETRY_TEXT", "BATHYMETRY_TEXT_ICO",
+    0, true, SLOT( onBathymetryText() ) );
+
+  createAction( BathymetryRescaleSelectionId, "BATHYMETRY_RESCALE_SELECTION", "BATHYMETRY_RESCALE_SELECTION_ICO" );
+  createAction( BathymetryRescaleVisibleId, "BATHYMETRY_RESCALE_VISIBLE", "BATHYMETRY_RESCALE_VISIBLE_ICO" );
+  createAction( BathymetryRescaleUserId, "BATHYMETRY_RESCALE_USER", "BATHYMETRY_RESCALE_USER_ICO" );
+  createAction( BathymetryRescaleDefaultId, "BATHYMETRY_RESCALE_DEFAULT", "BATHYMETRY_RESCALE_DEFAULT_ICO" );
 
   createAction( CreateImmersibleZoneId, "CREATE_IMMERSIBLE_ZONE", "CREATE_IMMERSIBLE_ZONE_ICO" );
   createAction( EditImmersibleZoneId, "EDIT_IMMERSIBLE_ZONE", "EDIT_IMMERSIBLE_ZONE_ICO" );
@@ -157,8 +187,13 @@ void HYDROGUI_Module::createActions()
   createAction( EditStricklerTableId, "EDIT_STRICKLER_TABLE", "EDIT_STRICKLER_TABLE_ICO" );
   createAction( DuplicateStricklerTableId, "DUPLICATE_STRICKLER_TABLE", "DUPLICATE_STRICKLER_TABLE_ICO" );
 
-  createAction( CreateLandCoverId, "CREATE_LAND_COVER", "CREATE_LAND_COVER_ICO" );
-  createAction( EditLandCoverId, "EDIT_LAND_COVER", "EDIT_LAND_COVER_ICO" );
+  createAction( CreateLandCoverMapId, "CREATE_LAND_COVER_MAP", "CREATE_LAND_COVER_MAP_ICO" );
+  
+  createAction( AddLandCoverId, "ADD_LAND_COVER", "ADD_LAND_COVER_ICO" );
+  createAction( RemoveLandCoverId, "REMOVE_LAND_COVER", "REMOVE_LAND_COVER_ICO" );
+  createAction( SplitLandCoverId, "SPLIT_LAND_COVER", "SPLIT_LAND_COVER_ICO" );
+  createAction( MergeLandCoverId, "MERGE_LAND_COVER", "MERGE_LAND_COVER_ICO" );
+  createAction( ChangeLandCoverTypeId, "CHANGE_LAND_COVER_TYPE", "CHANGE_LAND_COVER_TYPE_ICO" );
 
   createAction( ImportObstacleFromFileId, "IMPORT_OBSTACLE_FROM_FILE", "IMPORT_OBSTACLE_FROM_FILE_ICO" );
   createAction( ImportGeomObjectAsObstacleId, "IMPORT_GEOM_OBJECT_AS_OBSTACLE", "IMPORT_GEOM_OBJECT_ICO" );
@@ -178,7 +213,9 @@ void HYDROGUI_Module::createActions()
   createAction( EditCutImageId, "EDIT_CUT_IMAGE", "EDIT_CUT_IMAGE_ICO" );
 
   createAction( SplitImageId, "SPLIT_IMAGE", "SPLIT_IMAGE_ICO" );
-  createAction( EditSplittedImageId, "EDIT_SPLITTED_IMAGE", "EDIT_SPLITTED_IMAGE_ICO" );
+  createAction( EditSplitImageId, "EDIT_SPLIT_IMAGE", "EDIT_SPLIT_IMAGE_ICO" );
+
+  createAction( RecognizeContoursId, "RECOGNIZE_CONTOURS", "RECOGNIZE_CONTOURS_ICO" );
 
   createAction( CopyViewerPositionId, "COPY_VIEWER_POSITION", "" );
 
@@ -186,6 +223,7 @@ void HYDROGUI_Module::createActions()
                 SLOT( onDelete() ) );
 
   createAction( SetColorId, "COLOR" );
+  createAction( SetTransparencyId, "TRANSPARENCY" );
   createAction( SetZLevelId, "ZLEVEL" );
   createAction( EditLocalCSId, "EDIT_LOCAL_CS" );
 
@@ -200,8 +238,19 @@ void HYDROGUI_Module::createActions()
   createAction( ProfileInterpolateId, "PROFILE_INTERPOLATE", "PROFILE_INTERPOLATE_ICO" );
 
   createAction( SubmersibleId, "SUBMERSIBLE", "SUBMERSIBLE_ICO" );
-  createAction( ExportPolylineId, "EXPORT_POLYLINE", "EXPORT_POLYLINE_ICO" );
+  createAction( UnSubmersibleId, "UNSUBMERSIBLE", "HYDRO_UNSUBMERSIBLE16_ICO" );
+  createAction( ExportToShapeFileID, "EXPORT_TO_SHAPE_FILE", "EXPORT_TO_SHAPE_FILE_ICO" );
+
+  createAction( PolylineExtractionId, "POLYLINE_EXTRACTION" );
+  createAction( SplitPolylinesId, "SPLIT_POLYLINES", "SPLIT_POLYLINES_ICO" );
+  createAction( MergePolylinesId, "MERGE_POLYLINES", "MERGE_POLYLINES_ICO" );
 
+  createAction( LandCoverScalarMapModeOnId, "LC_SCALARMAP_COLORING_ON" );
+  createAction( LandCoverScalarMapModeOffId, "LC_SCALARMAP_COLORING_OFF" );
+
+  createAction( RegenerateRegionColorsId, "REGENERATE_REGION_COLORS" );
+  createAction( ZoneSetColorId, "ZONE_SET_COLOR" );
+  createAction( ShowHideArrows, "SHOW_HIDE_ARROWS" );
 }
 
 void HYDROGUI_Module::createMenus()
@@ -220,40 +269,63 @@ void HYDROGUI_Module::createMenus()
 
   int aHydroMenu = 6; // Edit menu id == 5, View menu id == 10
   int aHydroId = createMenu( tr( "MEN_DESK_HYDRO" ), -1, -1, aHydroMenu );
-  createMenu( ImportImageId, aHydroId, -1, -1 );
-  createMenu( ImportPolylineId, aHydroId, -1, -1 );
+  createMenu( ImportSinusXId, aHydroId, -1, -1 );
+  createMenu( ExportSinusXId, aHydroId, -1, -1 );  
+  
   createMenu( ImportBathymetryId, aHydroId, -1, -1 );
   createMenu( ImportStricklerTableFromFileId, aHydroId, -1, -1 );
-  createMenu( CreatePolylineId, aHydroId, -1, -1 );
   createMenu( CreatePolyline3DId, aHydroId, -1, -1 );
   createMenu( CreateImmersibleZoneId, aHydroId, -1, -1 );
   createMenu( CreateChannelId, aHydroId, -1, -1 );
-  createMenu( CreateDigueId, aHydroId, -1, -1 );  
-  createMenu( CreateLandCoverId, aHydroId, -1, -1 );  
+  createMenu( CreateDigueId, aHydroId, -1, -1 );
+
+  int aNewImageId = createMenu( tr( "MEN_DESK_IMAGE" ), aHydroId, -1 );
+  createMenu( ImportImageId, aNewImageId, -1, -1 );
+  createMenu( separator(), aNewImageId );
+  createMenu( FuseImagesId, aNewImageId, -1, -1 );
+  createMenu( CutImagesId, aNewImageId, -1, -1 );
+  createMenu( SplitImageId, aNewImageId, -1, -1 );
+
+  int aNewPolylineId = createMenu( tr( "MEN_DESK_POLYLINE" ), aHydroId, -1 );
+  createMenu( ImportPolylineId, aNewPolylineId, -1, -1 );
+  createMenu( CreatePolylineId, aNewPolylineId, -1, -1 );
+  createMenu( separator(), aNewPolylineId );
+  createMenu( SplitPolylinesId, aNewPolylineId, -1, -1 );
+  createMenu( MergePolylinesId, aNewPolylineId, -1, -1 );
 
   int aNewProfileId = createMenu( tr( "MEN_DESK_PROFILE" ), aHydroId, -1 );
   createMenu( CreateProfileId, aNewProfileId, -1, -1 );
   createMenu( ImportProfilesId, aNewProfileId, -1, -1 );
+  createMenu( separator(), aNewProfileId );
   createMenu( AllGeoreferencementId, aNewProfileId, -1, -1 );
 
   int aStreamMenuId = createMenu( tr( "MEN_DESK_STREAM" ), aHydroId, -1 );
   createMenu( CreateStreamId, aStreamMenuId, -1, -1 );
+  createMenu( separator(), aStreamMenuId );
   createMenu( RiverBottomId, aStreamMenuId, -1, -1 );
   createMenu( ProfileInterpolateId, aStreamMenuId, -1, -1 );
 
   int anObstacleMenuId = createMenu( tr( "MEN_DESK_OBSTACLE" ), aHydroId, -1 );
   createMenu( ImportObstacleFromFileId, anObstacleMenuId, -1, -1 );
+  createMenu( separator(), anObstacleMenuId );
   createMenu( CreateBoxId, anObstacleMenuId, -1, -1 );
   createMenu( CreateCylinderId, anObstacleMenuId, -1, -1 );
 
+  int aLandCoverMapMenuId = createMenu( tr( "MEN_DESK_LAND_COVER_MAP" ), aHydroId, -1 );
+  createMenu( ImportLandCoverMapId, aLandCoverMapMenuId, -1, -1 );
+  createMenu( CreateLandCoverMapId, aLandCoverMapMenuId, -1, -1 );
+  createMenu( separator(), aLandCoverMapMenuId );
+  createMenu( AddLandCoverId, aLandCoverMapMenuId, -1, -1 );
+  createMenu( RemoveLandCoverId, aLandCoverMapMenuId, -1, -1 );
+  createMenu( separator(), aLandCoverMapMenuId );
+  createMenu( SplitLandCoverId, aLandCoverMapMenuId, -1, -1 );
+  createMenu( MergeLandCoverId, aLandCoverMapMenuId, -1, -1 );
+  createMenu( ChangeLandCoverTypeId, aLandCoverMapMenuId, -1, -1 );
+  
   createMenu( CreateCalculationId, aHydroId, -1, -1 );
   createMenu( separator(), aHydroId );
   createMenu( EditLocalCSId, aHydroId, -1, -1 );
   createMenu( separator(), aHydroId );
-  createMenu( FuseImagesId, aHydroId, -1, -1 );
-  createMenu( CutImagesId, aHydroId, -1, -1 );
-  createMenu( SplitImageId, aHydroId, -1, -1 );
-  createMenu( separator(), aHydroId );
 }
 
 void HYDROGUI_Module::createPopups()
@@ -269,6 +341,10 @@ void HYDROGUI_Module::createToolbars()
   createTool( separator(), aToolBar );
   createTool( ImportImageId, aToolBar );
   createTool( ImportPolylineId, aToolBar );
+  createTool( ImportSinusXId, aToolBar );
+  createTool( ExportSinusXId, aToolBar );
+  createTool( ImportLandCoverMapId, aToolBar );
+
   createTool( ImportBathymetryId, aToolBar );
   createTool( CreatePolylineId, aToolBar );
   createTool( CreatePolyline3DId, aToolBar );
@@ -295,7 +371,13 @@ void HYDROGUI_Module::createToolbars()
   createTool( ImportStricklerTableFromFileId, aToolBar );
 
   createTool( separator(), aToolBar );
-  createTool( CreateLandCoverId, aToolBar );
+  createTool( CreateLandCoverMapId, aToolBar );
+  createTool( AddLandCoverId, aToolBar );
+  createTool( RemoveLandCoverId, aToolBar );
+  createTool( SplitLandCoverId, aToolBar );
+  createTool( MergeLandCoverId, aToolBar );
+  createTool( ChangeLandCoverTypeId, aToolBar );
+  enableLCMActions();
 
   createTool( separator(), aToolBar );
   createTool( CreateCalculationId, aToolBar );
@@ -304,6 +386,14 @@ void HYDROGUI_Module::createToolbars()
   createTool( FuseImagesId, aToolBar );
   createTool( CutImagesId, aToolBar );
   createTool( SplitImageId, aToolBar );
+
+  createTool( separator(), aToolBar );
+  createTool( BathymetrySelectionId, aToolBar );
+  createTool( BathymetryTextId, aToolBar );
+  createTool( BathymetryRescaleSelectionId, aToolBar );
+  createTool( BathymetryRescaleVisibleId, aToolBar );
+  createTool( BathymetryRescaleUserId, aToolBar );
+  createTool( BathymetryRescaleDefaultId, aToolBar );
 }
 
 void HYDROGUI_Module::createUndoRedoActions()
@@ -347,12 +437,104 @@ void HYDROGUI_Module::updateUndoRedoControls()
   aRedoAction->setEnabled( aCanRedo );
 }
 
+void HYDROGUI_Module::enableLCMActions()
+{
+  HYDROData_Iterator anIt( HYDROData_Document::Document( getStudyId() ), KIND_LAND_COVER_MAP );
+  bool anEnableTools = anIt.More();
+
+  QtxListAction* anAction;
+  anAction = (QtxListAction*)action( AddLandCoverId );
+  if ( anAction ) anAction->setEnabled( anEnableTools );
+  anAction = (QtxListAction*)action( RemoveLandCoverId );
+  if ( anAction ) anAction->setEnabled( anEnableTools );
+  anAction = (QtxListAction*)action( SplitLandCoverId );
+  if ( anAction ) anAction->setEnabled( anEnableTools );
+  anAction = (QtxListAction*)action( MergeLandCoverId );
+  if ( anAction ) anAction->setEnabled( anEnableTools );
+  anAction = (QtxListAction*)action( ChangeLandCoverTypeId );
+  if ( anAction ) anAction->setEnabled( anEnableTools );
+}
+
+void HYDROGUI_Module::resetViewState()
+{
+  OCCViewer_ViewManager* mgr = dynamic_cast<OCCViewer_ViewManager*>(getApp()->viewManager( OCCViewer_Viewer::Type()));
+  if( mgr )
+  {
+    foreach( SUIT_ViewWindow* wnd, mgr->getViews() )
+    {
+      OCCViewer_ViewFrame* vf = dynamic_cast<OCCViewer_ViewFrame*>( wnd );
+      if( vf )
+      {
+        for( int i=OCCViewer_ViewFrame::MAIN_VIEW; i<=OCCViewer_ViewFrame::TOP_RIGHT; i++ )
+        {
+          OCCViewer_ViewWindow* iwnd = vf->getView(i);
+          if( iwnd )
+            iwnd->resetState();
+        }
+      }
+      else
+      {
+        OCCViewer_ViewWindow* ownd = dynamic_cast<OCCViewer_ViewWindow*>( wnd );
+        if( ownd )
+          ownd->resetState();
+      }
+    }
+  }
+}
+
 void HYDROGUI_Module::onOperation()
 {
   const QAction* anAction = dynamic_cast<const QAction*>( sender() );
   int anId = actionId( anAction );
   if( anId >= 0 )
+  {
+    resetViewState();
     startOperation( anId );
+  }
+
+  if( anId==ShowHideArrows )
+  {
+    setArrowsVisible( !arrowsVisible() );
+  }
+}
+
+bool HYDROGUI_Module::arrowsVisible() const
+{
+  int aType;
+  SUIT_ResourceMgr* resMgr = application()->resourceMgr();
+  if( resMgr )
+  {
+    resMgr->value( "polyline", "arrow_type", aType );
+    return aType>0;
+  }
+  else
+    return false;
+}
+
+void HYDROGUI_Module::setArrowsVisible( bool isVisible )
+{
+  SUIT_ResourceMgr* resMgr = application()->resourceMgr();
+
+  int aType=-1;
+  if( !resMgr )
+    return;
+
+  if( isVisible )
+  {
+    if( resMgr->hasValue( "polyline", "prev_arrow_type" ) )
+      resMgr->value( "polyline", "prev_arrow_type", aType );
+
+    if( aType<=0 )
+      aType = 1;
+    resMgr->setValue( "polyline", "arrow_type", aType );
+  }
+  else
+  {
+    resMgr->value( "polyline", "arrow_type", aType );
+    resMgr->setValue( "polyline", "prev_arrow_type", aType );
+    resMgr->setValue( "polyline", "arrow_type", 0 );
+  }
+  preferencesChanged( "polyline", "arrow_type" );
 }
 
 void HYDROGUI_Module::onDelete()
@@ -430,6 +612,12 @@ LightApp_Operation* HYDROGUI_Module::createOperation( const int theId ) const
   case ImportPolylineId:
     anOp = new HYDROGUI_ImportPolylineOp( aModule/*, theId == EditImportedPolylineId*/ );
     break;
+  case ImportSinusXId:
+    anOp = new HYDROGUI_ImportSinusXOp( aModule );
+    break;
+  case ExportSinusXId:
+    anOp = new HYDROGUI_ExportSinusXOp( aModule );
+    break;
   case ObserveImageId:
     anOp = new HYDROGUI_ObserveImageOp( aModule );
     break;
@@ -440,9 +628,12 @@ LightApp_Operation* HYDROGUI_Module::createOperation( const int theId ) const
   case ForcedUpdateObjectId:
     anOp = new HYDROGUI_UpdateObjectOp( aModule, theId == ForcedUpdateObjectId );
     break;
-  case ExportPolylineId:
+  case ExportToShapeFileID:
     anOp = new HYDROGUI_ExportFileOp( aModule );
     break;
+  case ImportLandCoverMapId:
+    anOp = new HYDROGUI_ImportLandCoverMapOp( aModule );
+    break;
   case RemoveImageRefsId:
     anOp = new HYDROGUI_RemoveImageRefsOp( aModule );
     break;
@@ -477,6 +668,17 @@ LightApp_Operation* HYDROGUI_Module::createOperation( const int theId ) const
   case BathymetryBoundsId:
     anOp = new HYDROGUI_BathymetryBoundsOp( aModule );
     break;
+  case BathymetrySelectionId:
+    anOp = new HYDROGUI_BathymetrySelectionOp( aModule );
+    break;
+  case BathymetryTextId:
+  case BathymetryRescaleSelectionId:
+  case BathymetryRescaleVisibleId:
+  case BathymetryRescaleUserId:
+  case BathymetryRescaleDefaultId:
+    anOp = new HYDROGUI_BathymetryOp( aModule, theId );
+    break;
+
   case CreateImmersibleZoneId:
   case EditImmersibleZoneId:
     anOp = new HYDROGUI_ImmersibleZoneOp( aModule, theId == EditImmersibleZoneId );
@@ -498,9 +700,13 @@ LightApp_Operation* HYDROGUI_Module::createOperation( const int theId ) const
   case EditStricklerTableId:
     anOp = new HYDROGUI_StricklerTableOp( aModule, theId );
     break;
-  case CreateLandCoverId:
-  case EditLandCoverId:
-    anOp = new HYDROGUI_LandCoverOp( aModule, theId == EditLandCoverId );
+  case CreateLandCoverMapId:
+  case AddLandCoverId:
+  case RemoveLandCoverId:
+  case SplitLandCoverId:
+  case MergeLandCoverId:
+  case ChangeLandCoverTypeId:
+    anOp = new HYDROGUI_LandCoverMapOp( aModule, theId );
     break;
   case DuplicateStricklerTableId:
     anOp = new HYDROGUI_DuplicateOp( aModule );
@@ -521,8 +727,8 @@ LightApp_Operation* HYDROGUI_Module::createOperation( const int theId ) const
     anOp = new HYDROGUI_TwoImagesOp( aModule, HYDROGUI_TwoImagesOp::Cut, theId == EditCutImageId );
     break;
   case SplitImageId:
-  case EditSplittedImageId:
-    anOp = new HYDROGUI_TwoImagesOp( aModule, HYDROGUI_TwoImagesOp::Split, theId == EditSplittedImageId );
+  case EditSplitImageId:
+    anOp = new HYDROGUI_TwoImagesOp( aModule, HYDROGUI_TwoImagesOp::Split, theId == EditSplitImageId );
     break;
   case ImportObstacleFromFileId:
     anOp = new HYDROGUI_ImportObstacleFromFileOp( aModule );
@@ -553,6 +759,9 @@ LightApp_Operation* HYDROGUI_Module::createOperation( const int theId ) const
   case SetColorId:
     anOp = new HYDROGUI_SetColorOp( aModule );
     break;
+  case SetTransparencyId:
+    anOp = new HYDROGUI_SetTransparencyOp( aModule );
+    break;
   case SetZLevelId:
     anOp = new HYDROGUI_ZLevelsOp( aModule );
     break;
@@ -563,6 +772,9 @@ LightApp_Operation* HYDROGUI_Module::createOperation( const int theId ) const
   case RiverBottomContextId:
     anOp = new HYDROGUI_RiverBottomOp( aModule );
     break;
+  case RecognizeContoursId:
+    anOp = new HYDROGUI_RecognizeContoursOp( aModule );
+    break;
   case ShowId:
   case ShowOnlyId:
   case ShowAllId:
@@ -571,7 +783,29 @@ LightApp_Operation* HYDROGUI_Module::createOperation( const int theId ) const
     anOp = new HYDROGUI_ShowHideOp( aModule, theId );
     break;
   case SubmersibleId:
-    anOp = new HYDROGUI_SubmersibleOp( aModule );
+    anOp = new HYDROGUI_SubmersibleOp( aModule, true );
+    break;
+  case UnSubmersibleId:
+    anOp = new HYDROGUI_SubmersibleOp( aModule, false );
+    break;
+  case PolylineExtractionId:
+    anOp = new HYDROGUI_PolylineExtractionOp( aModule );
+    break;
+  case SplitPolylinesId:
+    anOp = new HYDROGUI_SplitPolylinesOp( aModule );
+    break;
+  case MergePolylinesId:
+    anOp = new HYDROGUI_MergePolylinesOp( aModule );
+    break;
+  case LandCoverScalarMapModeOnId:
+  case LandCoverScalarMapModeOffId:
+    anOp = new HYDROGUI_LandCoverColoringOp( aModule, theId );
+    break;
+  case RegenerateRegionColorsId:
+    anOp = new HYDROGUI_RegenerateRegionColorsOp( aModule );
+    break;
+  case ZoneSetColorId:
+    anOp = new HYDROGUI_ZoneSetColorOp( aModule );
     break;
   }
 
@@ -644,3 +878,41 @@ bool HYDROGUI_Module::renameObject( const QString& theEntry, const QString& theN
   }
   return aRes;
 }
+
+void HYDROGUI_Module::onBathymetrySelection()
+{
+  QAction* a = qobject_cast<QAction*>( sender() );
+  if( !a )
+    return;
+
+  bool isChecked = a->isChecked();
+  if( isChecked )
+    startOperation( BathymetrySelectionId );
+  else
+  {
+    LightApp_Operation* op = operation( BathymetryTextId );
+    if( op )
+      op->abort();
+
+    op = operation( BathymetrySelectionId );
+    if( op )
+      op->abort();
+  }
+}
+
+void HYDROGUI_Module::onBathymetryText()
+{
+  QAction* a = qobject_cast<QAction*>( sender() );
+  if( !a )
+    return;
+
+  bool isChecked = a->isChecked();
+  if( isChecked )
+    startOperation( BathymetryTextId );
+  else
+  {
+    HYDROGUI_BathymetryOp* op = dynamic_cast<HYDROGUI_BathymetryOp*>( operation( BathymetryTextId ) );
+    if( op )
+      op->commit();
+  }
+}