Salome HOME
Merge remote-tracking branch 'remotes/origin/BR_2017' into HEAD
[modules/hydro.git] / src / HYDROGUI / HYDROGUI_Operations.cxx
index 3fa2afa37f50579a272d8c8d25c3288612d0d0d3..a3631f1a46c2d133331979c07516c6d457b4694b 100644 (file)
 #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 <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>
@@ -156,6 +162,14 @@ void HYDROGUI_Module::createActions()
   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" );
 
@@ -224,6 +238,7 @@ void HYDROGUI_Module::createActions()
   createAction( ProfileInterpolateId, "PROFILE_INTERPOLATE", "PROFILE_INTERPOLATE_ICO" );
 
   createAction( SubmersibleId, "SUBMERSIBLE", "SUBMERSIBLE_ICO" );
+  createAction( UnSubmersibleId, "UNSUBMERSIBLE", "HYDRO_UNSUBMERSIBLE16_ICO" );
   createAction( ExportToShapeFileID, "EXPORT_TO_SHAPE_FILE", "EXPORT_TO_SHAPE_FILE_ICO" );
 
   createAction( PolylineExtractionId, "POLYLINE_EXTRACTION" );
@@ -232,6 +247,10 @@ void HYDROGUI_Module::createActions()
 
   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()
@@ -370,6 +389,11 @@ void HYDROGUI_Module::createToolbars()
 
   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()
@@ -431,12 +455,86 @@ void HYDROGUI_Module::enableLCMActions()
   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()
@@ -573,6 +671,14 @@ LightApp_Operation* HYDROGUI_Module::createOperation( const int theId ) const
   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 );
@@ -677,7 +783,10 @@ 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 );
@@ -692,6 +801,12 @@ LightApp_Operation* HYDROGUI_Module::createOperation( const int theId ) const
   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;
   }
 
   if( !anOp )
@@ -774,5 +889,30 @@ void HYDROGUI_Module::onBathymetrySelection()
   if( isChecked )
     startOperation( BathymetrySelectionId );
   else
-    operation( BathymetrySelectionId )->abort();
+  {
+    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();
+  }
 }