Salome HOME
portage V8_5_0
[modules/hydro.git] / src / HYDROGUI / HYDROGUI_Module.cxx
index 5ad9a3eff30dedf3aba8b90f6e1f828bd41f78d5..03a78832368f51deb1616c17644940f9052df243 100644 (file)
@@ -41,7 +41,7 @@
 #include "HYDROGUI_ImportGeomObjectOp.h"
 #include "HYDROGUI_ShowHideOp.h"
 #include "HYDROGUI_Overview.h"
-
+#include <HYDROGUI_ProfileDlg.h>
 #include <HYDROData_Tool.h>
 #include <HYDROData_Image.h>
 #include <HYDROData_Stream.h>
@@ -223,7 +223,9 @@ bool HYDROGUI_Module::activateModule( SUIT_Study* theStudy )
 
     OCCViewer_ViewManager* occ_mgr = dynamic_cast<OCCViewer_ViewManager*>( aViewManager );
     if( occ_mgr )
+    {
       occ_mgr->setChainedOperations( true );//TODO: via preferences
+    }
 
     foreach( SUIT_ViewWindow* aViewWindow, aViewManager->getViews() )
     {
@@ -235,6 +237,10 @@ bool HYDROGUI_Module::activateModule( SUIT_Study* theStudy )
     }
   }
 
+  preferencesChanged( "HYDRO", "zoom_shutoff" );
+
+  preferencesChanged( "HYDRO", "chained_panning" );
+
   // Load GEOM data
   SalomeApp_Study* aStudy = 
     dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() );
@@ -270,9 +276,17 @@ bool HYDROGUI_Module::deactivateModule( SUIT_Study* theStudy )
 
   ViewManagerList anOCCViewManagers;
   getApp()->viewManagers( OCCViewer_Viewer::Type(), anOCCViewManagers );
-  foreach ( const SUIT_ViewManager* aViewManager, anOCCViewManagers ) {
+  foreach ( SUIT_ViewManager* aViewManager, anOCCViewManagers )
+  {
     disconnect( aViewManager, SIGNAL( mouseMove( SUIT_ViewWindow*, QMouseEvent* ) ),
                 this, SLOT( onMouseMove( SUIT_ViewWindow*, QMouseEvent* ) ) );
+
+    OCCViewer_ViewManager* occ_mgr = dynamic_cast<OCCViewer_ViewManager*>( aViewManager );
+    if( occ_mgr )
+    {
+      occ_mgr->setChainedOperations( false );
+      setAutoZoom( occ_mgr, true );
+    }
   }
 
   /* Issues ## 68, 88.
@@ -898,6 +912,8 @@ void HYDROGUI_Module::createPreferences()
 
   addPreference( tr( "PREF_VIEWER_ZOOM_SHUTOFF" ), viewerGroup, LightApp_Preferences::Bool, "HYDRO", "zoom_shutoff" );
 
+  addPreference( tr( "PREF_VIEWER_CHAINED_PANNING" ), viewerGroup, LightApp_Preferences::Bool, "HYDRO", "chained_panning" );
+
   int StricklerTableGroup = addPreference( tr( "PREF_GROUP_STRICKLER_TABLE" ), genTab );
   int defaultStricklerCoef = addPreference( tr( "PREF_DEFAULT_STRICKLER_COEFFICIENT" ), StricklerTableGroup,
                                             LightApp_Preferences::DblSpin, "preferences", "default_strickler_coefficient" );
@@ -961,8 +977,29 @@ void HYDROGUI_Module::preferencesChanged( const QString& theSection, const QStri
       bool aZoomShutoff = resMgr->booleanValue( "HYDRO", "zoom_shutoff" );
       setAutoZoomToAllViewManagers(!aZoomShutoff);
     }
+    else if (theSection == "HYDRO" && thePref == "chained_panning")
+    {
+      bool aChainedPan = resMgr->booleanValue( "HYDRO", "chained_panning" );
+      if (!aChainedPan)
+        resetViewState();
+      ViewManagerList aViewManagers = getApp()->viewManagers();
+      foreach (SUIT_ViewManager* aVMgr, aViewManagers)
+      {
+        OCCViewer_ViewManager* anOCCViewMgr = dynamic_cast<OCCViewer_ViewManager*>( aVMgr );
+        if (anOCCViewMgr)
+          anOCCViewMgr->setChainedOperations( aChainedPan );
+      }
+      
+      QList<QDockWidget*> docW = getApp()->desktop()->findChildren<QDockWidget*>();
+      foreach (QDockWidget* qw, docW)
+      {
+        HYDROGUI_ProfileDlg* pdlg = dynamic_cast<HYDROGUI_ProfileDlg*>(qw);
+        if (pdlg)
+          pdlg->viewManager()->setChainedOperations(aChainedPan);
+      }
+    }
     else
-        LightApp_Module::preferencesChanged( theSection, thePref );
+      LightApp_Module::preferencesChanged( theSection, thePref );
 }
 
 QCursor HYDROGUI_Module::getPrefEditCursor() const
@@ -1037,7 +1074,9 @@ void HYDROGUI_Module::update( const int flags )
 
   setUpdateEnabled( true );
 
-  setAutoZoomToAllViewManagers(false);
+  preferencesChanged( "HYDRO", "zoom_shutoff" );
+
+  preferencesChanged( "HYDRO", "chained_panning" );
 
   QApplication::restoreOverrideCursor();
 }
@@ -1600,7 +1639,7 @@ void HYDROGUI_Module::onViewManagerAdded( SUIT_ViewManager* theViewManager )
   else if( theViewManager->getType() == OCCViewer_Viewer::Type() )
   {
     OCCViewer_ViewManager* mgr = dynamic_cast<OCCViewer_ViewManager*>( theViewManager );
-    mgr->setChainedOperations( true );//TODO: via preferences
+    //mgr->setChainedOperations( true );
 
     connect( theViewManager, SIGNAL( viewCreated( SUIT_ViewWindow* ) ),
              this, SLOT( onViewCreated( SUIT_ViewWindow* ) ) );