Salome HOME
Selection validators improvements
[modules/shaper.git] / src / XGUI / XGUI_ContextMenuMgr.cpp
index a02f1d2dc397bc3a573ad4e54727067e52ba7883..8ecb179b3d1b77a46503126208ead9d91469b882 100644 (file)
@@ -5,7 +5,8 @@
 #include "XGUI_SelectionMgr.h"
 #include "XGUI_Displayer.h"
 #include "XGUI_MainWindow.h"
-#include "XGUI_Viewer.h"
+#include "XGUI_ViewerProxy.h"
+#include "XGUI_Selection.h"
 
 #include "PartSetPlugin_Part.h"
 
@@ -84,7 +85,7 @@ void XGUI_ContextMenuMgr::onContextMenuRequest(QContextMenuEvent* theEvent)
   QMenu* aMenu = 0;
   if (sender() == myWorkshop->objectBrowser())
     aMenu = objectBrowserMenu();
-  else if (sender() == myWorkshop->mainWindow()->viewer()) {
+  else if (sender() == myWorkshop->viewer()) {
     aMenu = viewerMenu();
   }
   
@@ -98,7 +99,7 @@ QMenu* XGUI_ContextMenuMgr::objectBrowserMenu() const
 {
   QMenu* aMenu = new QMenu();
   XGUI_SelectionMgr* aSelMgr = myWorkshop->selector();
-  QFeatureList aFeatures = aSelMgr->selectedFeatures();
+  QFeatureList aFeatures = aSelMgr->selection()->selectedFeatures();
   if (aFeatures.size() == 1) {
     PluginManagerPtr aMgr = ModelAPI_PluginManager::get();
     FeaturePtr aFeature = aFeatures.first();
@@ -141,19 +142,7 @@ QMenu* XGUI_ContextMenuMgr::objectBrowserMenu() const
 QMenu* XGUI_ContextMenuMgr::viewerMenu() const
 {
   QMenu* aMenu = new QMenu();
-  XGUI_SelectionMgr* aSelMgr = myWorkshop->selector();
-  QFeatureList aFeatures = aSelMgr->selectedFeatures();
-  if (aFeatures.size() > 0) {
-    if (aFeatures.size() > 0)
-      aMenu->addAction(action("EDIT_CMD"));
-    aMenu->addAction(action("HIDE_CMD"));
-    aMenu->addAction(action("DELETE_CMD"));
-  }
-  QMdiArea* aMDI = myWorkshop->mainWindow()->mdiArea();
-  if (aMDI->actions().size() > 0) {
-    QMenu* aSubMenu = aMenu->addMenu(tr("Windows"));
-    aSubMenu->addActions(aMDI->actions());
-  }
+  addViewerItems(aMenu);
   if (aMenu->actions().size() > 0) {
     return aMenu;
   }
@@ -161,6 +150,35 @@ QMenu* XGUI_ContextMenuMgr::viewerMenu() const
   return 0;
 }
 
+void XGUI_ContextMenuMgr::addViewerItems(QMenu* theMenu) const
+{
+  XGUI_SelectionMgr* aSelMgr = myWorkshop->selector();
+  QFeatureList aFeatures = aSelMgr->selection()->selectedFeatures();
+  if (aFeatures.size() > 0) {
+    if (aFeatures.size() == 1)
+      theMenu->addAction(action("EDIT_CMD"));
+    bool isVisible = false;
+    foreach(FeaturePtr aFeature, aFeatures) {
+      if (myWorkshop->displayer()->isVisible(aFeature)) {
+        isVisible = true;
+        break;
+      }
+    }
+    if (isVisible)
+      theMenu->addAction(action("HIDE_CMD"));
+    else 
+      theMenu->addAction(action("SHOW_CMD"));
+    theMenu->addAction(action("DELETE_CMD"));
+  }
+  if (!myWorkshop->isSalomeMode()) {
+    QMdiArea* aMDI = myWorkshop->mainWindow()->mdiArea();
+    if (aMDI->actions().size() > 0) {
+      QMenu* aSubMenu = theMenu->addMenu(tr("Windows"));
+      aSubMenu->addActions(aMDI->actions());
+    }
+  }
+}
+
 void XGUI_ContextMenuMgr::connectObjectBrowser() const
 {
   connect(myWorkshop->objectBrowser(), SIGNAL(contextMenuRequested(QContextMenuEvent*)), 
@@ -169,7 +187,7 @@ void XGUI_ContextMenuMgr::connectObjectBrowser() const
 
 void XGUI_ContextMenuMgr::connectViewer() const
 {
-  // TODO: Adapt to SALOME mode
-  connect(myWorkshop->mainWindow()->viewer(), SIGNAL(contextMenuRequested(QContextMenuEvent*)), 
+  connect(myWorkshop->viewer(), SIGNAL(contextMenuRequested(QContextMenuEvent*)), 
     this, SLOT(onContextMenuRequest(QContextMenuEvent*)));
 }
+