Salome HOME
refs #1327: implementation of the scaling operations
[modules/hydro.git] / src / HYDROGUI / HYDROGUI_BathymetrySelectionOp.cxx
index 2fc0fc9c730539dbe6c4a6cb73cb55928b7be0a5..76d4dcc0b1bfe1d7a50c72c7dfdb9263b92cf798 100644 (file)
@@ -20,6 +20,7 @@
 #include <HYDROGUI_BathymetrySelectionOp.h>
 #include <HYDROGUI_Module.h>
 #include <HYDROGUI_BathymetryPrs.h>
+#include <HYDROGUI_BathymetryOp.h>
 #include <OCCViewer_ViewManager.h>
 #include <LightApp_Application.h>
 
@@ -42,18 +43,25 @@ void HYDROGUI_BathymetrySelectionOp::abortOperation()
   activateSelection( false );
 }
 
-void HYDROGUI_BathymetrySelectionOp::activateSelection( bool isActive )
+bool HYDROGUI_BathymetrySelectionOp::isValid( SUIT_Operation* theOtherOp ) const
 {
-  if( myIsActive==isActive )
-    return;
+  HYDROGUI_BathymetryOp* aBathOp = dynamic_cast<HYDROGUI_BathymetryOp*>( theOtherOp );
+  return ( aBathOp != 0 );
+}
 
-  LightApp_Application* app = module()->getApp();
+Handle(AIS_InteractiveContext) getContext( HYDROGUI_Module* theModule )
+{
+  LightApp_Application* app = theModule->getApp();
   OCCViewer_ViewManager* mgr = dynamic_cast<OCCViewer_ViewManager*>
     ( app->getViewManager( OCCViewer_Viewer::Type(), true ) );
   Handle(AIS_InteractiveContext) ctx = mgr->getOCCViewer()->getAISContext();
+  return ctx;
+}
 
-
+QList<Handle(HYDROGUI_BathymetryPrs)> getShownBathymetries( HYDROGUI_Module* theModule )
+{
   QList<Handle(HYDROGUI_BathymetryPrs)> baths;
+  Handle(AIS_InteractiveContext) ctx = getContext( theModule );
 
   AIS_ListOfInteractive objs;
   ctx->DisplayedObjects( objs );
@@ -64,13 +72,25 @@ void HYDROGUI_BathymetrySelectionOp::activateSelection( bool isActive )
     if( !bath.IsNull() )
       baths.append( bath );
   }
+  return baths;
+}
+
+void HYDROGUI_BathymetrySelectionOp::activateSelection( bool isActive )
+{
+  if( myIsActive==isActive )
+    return;
 
+  Handle(AIS_InteractiveContext) ctx = getContext( module() );
+  QList<Handle(HYDROGUI_BathymetryPrs)> baths = getShownBathymetries( module() );
   if( isActive )
   {
     const int aSelectionMode = 1;
     ctx->OpenLocalContext( Standard_True );
     foreach( Handle(HYDROGUI_BathymetryPrs) bath, baths )
+    {
       ctx->Activate( bath, aSelectionMode, Standard_True );
+      bath->SetAutoHilight( Standard_False );
+    }
     ctx->UpdateCurrentViewer();
   }
   else
@@ -78,6 +98,7 @@ void HYDROGUI_BathymetrySelectionOp::activateSelection( bool isActive )
     foreach( Handle(HYDROGUI_BathymetryPrs) bath, baths )
     {
       bath->ClearSelected();
+      bath->SetAutoHilight( Standard_True );
       ctx->Deactivate( bath );
     }
     ctx->CloseLocalContext( -1, Standard_True );