Salome HOME
PR: quadtree
[modules/hydro.git] / src / HYDROGUI / HYDROGUI_Module.cxx
index c9aa1704b558d9240ed4175263256604bdb95820..5e03c1293bc9f618117c01a2533da0bd0b0c711c 100644 (file)
@@ -42,6 +42,7 @@
 #include "HYDROGUI_PolylineOp.h"
 #include "HYDROGUI_SetColorOp.h"
 #include "HYDROGUI_ImportGeomObjectOp.h"
+#include "HYDROGUI_ShowHideOp.h"
 
 #include <HYDROData_Image.h>
 #include <HYDROData_Profile.h>
@@ -185,7 +186,6 @@ bool HYDROGUI_Module::activateModule( SUIT_Study* theStudy )
   foreach ( const int anId, anObsoleteIds ) {
     myViewManagerMap.remove( anId );
     myObjectStateMap.remove( anId );
-    myObjectDisplayOrderMap.remove( anId );
     myShapesMap.remove( anId );
     myVTKPrsMap.remove( anId );
   }
@@ -269,6 +269,7 @@ bool HYDROGUI_Module::deactivateModule( SUIT_Study* theStudy )
 
   HYDROGUI_Tool::setOCCActionShown( this, OCCViewer_ViewWindow::MaximizedId, true );
 
+  myActiveOperationMap.clear();
   return LightApp_Module::deactivateModule( theStudy );
 }
 
@@ -649,6 +650,10 @@ void HYDROGUI_Module::contextMenuPopup( const QString& theClient,
     HYDROGUI_PolylineOp* aPolylineOp = dynamic_cast<HYDROGUI_PolylineOp*>( anOp );
     if ( aPolylineOp && aPolylineOp->deleteEnabled() )
       theMenu->addAction( action( DeleteId ) );
+
+    theMenu->addSeparator();
+    theMenu->addAction( action( SetZLevelId ) );
+    theMenu->addSeparator();
   }
 
   if( anIsObjectBrowser || anIsGraphicsView || anIsOCCView || anIsVTKView )
@@ -657,7 +662,9 @@ void HYDROGUI_Module::contextMenuPopup( const QString& theClient,
     theMenu->addAction( action( HideAllId ) );
     theMenu->addSeparator();
   }
-  if ( anIsOCCView || anIsVTKView ) {
+  
+  if ( anIsOCCView || anIsVTKView )
+  {
     theMenu->addSeparator();
     theMenu->addAction( action( CopyViewerPositionId ) );
   }
@@ -875,13 +882,6 @@ void HYDROGUI_Module::setObjectVisible( const int theViewId,
 
     ObjectState& anObjectState = aEntry2ObjectStateMap[ anEntry ];
     anObjectState.Visibility = theState;
-
-    // Remember the display order ( needed for Z layers assignment only )
-    QStringList& anObjectEntries = myObjectDisplayOrderMap[ theViewId ];
-    anObjectEntries.removeAll( anEntry );
-    if ( theState ) {
-      anObjectEntries.append( anEntry );
-    }
   }
 }
 
@@ -1506,16 +1506,28 @@ void HYDROGUI_Module::onMouseMove( SUIT_ViewWindow* theViewWindow, QMouseEvent*
 }
 
 /**
- * Get the object display order. Needed for Z layers assignment only.
+ * Returns stack of active operations;
  */
-int HYDROGUI_Module::getObjectDisplayOrder( 
-  const int theViewId, const Handle(HYDROData_Entity)& theObject) const
+QStack<HYDROGUI_Operation*>& HYDROGUI_Module::getActiveOperations()
 {
-  if( theObject.IsNull() )
-    return -1;
+  return myActiveOperationMap;
+}
 
-  QString anEntry = HYDROGUI_DataObject::dataObjectEntry( theObject );
-  QStringList anObjectEntries = myObjectDisplayOrderMap.value( theViewId );
+/**
+ * Returns the module active operation. If the active operation is show/hide,
+ * the method returns the previous operation if it is.
+ */
+HYDROGUI_Operation* HYDROGUI_Module::activeOperation()
+{
+  HYDROGUI_Operation* anOp = !myActiveOperationMap.empty() ? myActiveOperationMap.top() : 0;
+
+  if ( dynamic_cast<HYDROGUI_ShowHideOp*>( anOp ) )
+  {
+    QVectorIterator<HYDROGUI_Operation*> aVIt( myActiveOperationMap );
+    aVIt.toBack();
+    aVIt.previous(); // skip the top show/hide operation
+    anOp = aVIt.hasPrevious() ? aVIt.previous() : 0;
+  }
 
-  return anObjectEntries.indexOf( anEntry );
+  return anOp;
 }