Salome HOME
Issue #1897 Selection of edges in Group feature with SHIFT Key
[modules/shaper.git] / src / XGUI / XGUI_ContextMenuMgr.cpp
index 2afd9449591d5ebd3a05b0ab60af3fd9b0390ed1..72025823a4a3775c3900f16c43b90741f0c0fe64 100644 (file)
@@ -28,6 +28,7 @@
 #include <ModelAPI_ResultConstruction.h>
 #include <ModelAPI_ResultBody.h>
 #include <ModelAPI_Tools.h>
+#include <ModelAPI_ResultField.h>
 
 #include <Config_DataModelReader.h>
 
@@ -44,7 +45,6 @@
 #include <QMainWindow>
 #include <QModelIndex>
 
-
 XGUI_ContextMenuMgr::XGUI_ContextMenuMgr(XGUI_Workshop* theParent)
     : QObject(theParent),
       myWorkshop(theParent),
@@ -64,69 +64,78 @@ void XGUI_ContextMenuMgr::createActions()
   QMainWindow* aDesktop = myWorkshop->mainWindow();
 #endif
 
-  QAction* aAction = ModuleBase_Tools::createAction(QIcon(":pictures/delete.png"), tr("Delete"), this);
+  QAction* aAction = ModuleBase_Tools::createAction(QIcon(":pictures/delete.png"), tr("Delete"),
+                                                    aDesktop);
   aDesktop->addAction(aAction);
 
   addAction("DELETE_CMD", aAction);
   aAction->setShortcutContext(Qt::ApplicationShortcut);
 
-  aAction = ModuleBase_Tools::createAction(QIcon(":pictures/rename_edit.png"), tr("Rename"), this,
-                        this, SLOT(onRename()));
+  aAction = ModuleBase_Tools::createAction(QIcon(":pictures/rename_edit.png"), tr("Rename"),
+                                           aDesktop, this, SLOT(onRename()));
   addAction("RENAME_CMD", aAction);
 
   aAction = ModuleBase_Tools::createAction(QIcon(":pictures/move.png"),
                                            XGUI_Workshop::MOVE_TO_END_COMMAND, this);
   addAction("MOVE_CMD", aAction);
 
-  aAction = ModuleBase_Tools::createAction(QIcon(":pictures/clean_history.png"), tr("Clean history"), this);
+  aAction = ModuleBase_Tools::createAction(QIcon(":pictures/clean_history.png"),
+                                           tr("Clean history"), aDesktop);
   addAction("CLEAN_HISTORY_CMD", aAction);
 
-  aAction = ModuleBase_Tools::createAction(QIcon(":pictures/color.png"), tr("Color..."), this);
+  aAction = ModuleBase_Tools::createAction(QIcon(":pictures/color.png"), tr("Color..."), aDesktop);
   addAction("COLOR_CMD", aAction);
 
-  aAction = ModuleBase_Tools::createAction(QIcon(":pictures/eye_pencil.png"), tr("Show"), this);
+  aAction = ModuleBase_Tools::createAction(QIcon(""), tr("Deflection..."), aDesktop);
+  addAction("DEFLECTION_CMD", aAction);
+
+  aAction = ModuleBase_Tools::createAction(QIcon(":pictures/eye_pencil.png"), tr("Show"), aDesktop);
   addAction("SHOW_CMD", aAction);
 
-  aAction = ModuleBase_Tools::createAction(QIcon(":pictures/eye_pencil.png"), tr("Show only"), this);
+  aAction = ModuleBase_Tools::createAction(QIcon(":pictures/eye_pencil.png"), tr("Show only"),
+                                           aDesktop);
   addAction("SHOW_ONLY_CMD", aAction);
 
-  aAction = ModuleBase_Tools::createAction(QIcon(":pictures/eye_pencil_closed.png"), tr("Hide"), this);
+  aAction = ModuleBase_Tools::createAction(QIcon(":pictures/eye_pencil_closed.png"), tr("Hide"),
+                                           aDesktop);
   addAction("HIDE_CMD", aAction);
 
-  aAction = ModuleBase_Tools::createAction(QIcon(":pictures/eye_pencil_closed.png"), tr("Hide all"), this);
+  aAction = ModuleBase_Tools::createAction(QIcon(":pictures/eye_pencil_closed.png"), tr("Hide all"),
+                                           aDesktop);
   addAction("HIDEALL_CMD", aAction);
 
-  aAction = ModuleBase_Tools::createAction(QIcon(":pictures/shading.png"), tr("Shading"), this);
+  aAction = ModuleBase_Tools::createAction(QIcon(":pictures/shading.png"), tr("Shading"), aDesktop);
   addAction("SHADING_CMD", aAction);
 
-  aAction = ModuleBase_Tools::createAction(QIcon(":pictures/wireframe.png"), tr("Wireframe"), this);
+  aAction = ModuleBase_Tools::createAction(QIcon(":pictures/wireframe.png"), tr("Wireframe"),
+                                           aDesktop);
   addAction("WIREFRAME_CMD", aAction);
 
-  mySeparator = ModuleBase_Tools::createAction(QIcon(), "", this);
+  mySeparator = ModuleBase_Tools::createAction(QIcon(), "", aDesktop);
   mySeparator->setSeparator(true);
 
   //mySelectActions = new QActionGroup(this);
   //mySelectActions->setExclusive(true);
 
-  aAction = ModuleBase_Tools::createAction(QIcon(":pictures/vertex.png"), tr("Vertices"), this,
+  aAction = ModuleBase_Tools::createAction(QIcon(":pictures/vertex.png"), tr("Vertices"), aDesktop,
                                            this, SLOT(onShapeSelection(bool)));
   aAction->setCheckable(true);
   addAction("SELECT_VERTEX_CMD", aAction);
   //mySelectActions->addAction(aAction);
 
-  aAction = ModuleBase_Tools::createAction(QIcon(":pictures/edge.png"), tr("Edges"), this,
+  aAction = ModuleBase_Tools::createAction(QIcon(":pictures/edge.png"), tr("Edges"), aDesktop,
                                            this, SLOT(onShapeSelection(bool)));
   aAction->setCheckable(true);
   addAction("SELECT_EDGE_CMD", aAction);
   //mySelectActions->addAction(aAction);
 
-  aAction = ModuleBase_Tools::createAction(QIcon(":pictures/face.png"), tr("Faces"), this,
+  aAction = ModuleBase_Tools::createAction(QIcon(":pictures/face.png"), tr("Faces"), aDesktop,
                                            this, SLOT(onShapeSelection(bool)));
   aAction->setCheckable(true);
   addAction("SELECT_FACE_CMD", aAction);
   //mySelectActions->addAction(aAction);
 
-  aAction = ModuleBase_Tools::createAction(QIcon(":pictures/result.png"), tr("Result"), this,
+  aAction = ModuleBase_Tools::createAction(QIcon(":pictures/result.png"), tr("Results"), aDesktop,
                                            this, SLOT(onResultSelection(bool)));
   aAction->setCheckable(true);
   addAction("SELECT_RESULT_CMD", aAction);
@@ -135,13 +144,22 @@ void XGUI_ContextMenuMgr::createActions()
   aAction->setChecked(true);
 
   aAction = ModuleBase_Tools::createAction(QIcon(":pictures/find_result.png"),
-                                           tr("Select results"), this);
+                                           tr("Select results"), aDesktop);
   addAction("SHOW_RESULTS_CMD", aAction);
 
   aAction = ModuleBase_Tools::createAction(QIcon(":pictures/find_result.png"),
-                                           tr("Select parent feature"), this);
+                                           tr("Select parent feature"), aDesktop);
   addAction("SHOW_FEATURE_CMD", aAction);
 
+#ifdef VINSPECTOR
+  aAction = ModuleBase_Tools::createAction(QIcon(), tr("Debug Visualization"), aDesktop);
+  addAction("VINSPECTOR_VIEW", aAction);
+#endif
+#ifdef DFBROWSER
+  aAction = ModuleBase_Tools::createAction(QIcon(), tr("DFBrowser"), aDesktop);
+  addAction("DFBROWSER_VIEW", aAction);
+#endif
+
   buildObjBrowserMenu();
   buildViewerMenu();
 }
@@ -209,7 +227,7 @@ void XGUI_ContextMenuMgr::onContextMenuRequest(QContextMenuEvent* theEvent)
   }
 }
 
-void XGUI_ContextMenuMgr::updateObjectBrowserMenu() 
+void XGUI_ContextMenuMgr::updateObjectBrowserMenu()
 {
   foreach(QAction* aAction, myActions)
     aAction->setEnabled(false);
@@ -316,6 +334,19 @@ void XGUI_ContextMenuMgr::updateObjectBrowserMenu()
   if (myWorkshop->canChangeColor())
     action("COLOR_CMD")->setEnabled(true);
 
+  if (myWorkshop->canChangeDeflection())
+    action("DEFLECTION_CMD")->setEnabled(true);
+
+  #ifdef _DEBUG
+    #ifdef VINSPECTOR
+      action("VINSPECTOR_VIEW")->setEnabled(true);
+    #endif
+    #ifdef DFBROWSER
+      action("DFBROWSER_VIEW")->setEnabled(true);
+    #endif
+  #endif
+
+
   ModuleBase_IModule* aModule = myWorkshop->module();
   if (aModule)
     aModule->updateObjectBrowserMenu(myActions);
@@ -328,7 +359,8 @@ void XGUI_ContextMenuMgr::updateViewerMenu()
 
   XGUI_SelectionMgr* aSelMgr = myWorkshop->selector();
   XGUI_Displayer* aDisplayer = myWorkshop->displayer();
-  QList<ModuleBase_ViewerPrsPtr> aPrsList = aSelMgr->selection()->getSelected(ModuleBase_ISelection::Viewer);
+  QList<ModuleBase_ViewerPrsPtr> aPrsList =
+    aSelMgr->selection()->getSelected(ModuleBase_ISelection::Viewer);
   if (aPrsList.size() > 0) {
     bool isVisible = false;
     bool isShading = false;
@@ -340,7 +372,8 @@ void XGUI_ContextMenuMgr::updateViewerMenu()
       if (aRes && aRes->isDisplayed()) {
         isVisible = true;
         canBeShaded = myWorkshop->displayer()->canBeShaded(aObject);
-        isShading = (myWorkshop->displayer()->displayMode(aObject) == XGUI_Displayer::Shading);      
+        isShading =
+          (myWorkshop->displayer()->displayMode(aObject) == XGUI_Displayer::Shading);
         break;
       }
     }
@@ -380,10 +413,10 @@ void XGUI_ContextMenuMgr::updateViewerMenu()
   } else {
     foreach(int aMode, aModes) {
       switch (aMode) {
-      case TopAbs_VERTEX: 
+      case TopAbs_VERTEX:
         action("SELECT_VERTEX_CMD")->setChecked(true);
         break;
-      case TopAbs_EDGE: 
+      case TopAbs_EDGE:
         action("SELECT_EDGE_CMD")->setChecked(true);
         break;
       case TopAbs_FACE:
@@ -393,7 +426,7 @@ void XGUI_ContextMenuMgr::updateViewerMenu()
         action("SELECT_RESULT_CMD")->setChecked(true);
       }
     }
-  } 
+  }
 
   ModuleBase_IModule* aModule = myWorkshop->module();
   if (aModule)
@@ -402,6 +435,9 @@ void XGUI_ContextMenuMgr::updateViewerMenu()
   if (myWorkshop->canChangeColor())
     action("COLOR_CMD")->setEnabled(true);
 
+  if (myWorkshop->canChangeDeflection())
+    action("DEFLECTION_CMD")->setEnabled(true);
+
   action("DELETE_CMD")->setEnabled(true);
 }
 
@@ -420,7 +456,7 @@ void XGUI_ContextMenuMgr::connectViewer()
 
 void XGUI_ContextMenuMgr::buildObjBrowserMenu()
 {
-  QAction* aSeparator = ModuleBase_Tools::createAction(QIcon(), "", this);
+  QAction* aSeparator = ModuleBase_Tools::createAction(QIcon(), "", myWorkshop->desktop());
   aSeparator->setSeparator(true);
 
   QActionsList aList;
@@ -432,6 +468,7 @@ void XGUI_ContextMenuMgr::buildObjBrowserMenu()
   aList.append(mySeparator);
   aList.append(action("RENAME_CMD"));
   aList.append(action("COLOR_CMD"));
+  aList.append(action("DEFLECTION_CMD"));
   aList.append(action("SHOW_FEATURE_CMD"));
   myObjBrowserMenus[ModelAPI_ResultConstruction::group()] = aList;
 
@@ -448,10 +485,12 @@ void XGUI_ContextMenuMgr::buildObjBrowserMenu()
   aList.append(mySeparator);
   aList.append(action("RENAME_CMD"));
   aList.append(action("COLOR_CMD"));
+  aList.append(action("DEFLECTION_CMD"));
   aList.append(action("SHOW_FEATURE_CMD"));
   myObjBrowserMenus[ModelAPI_ResultBody::group()] = aList;
   // Group menu
   myObjBrowserMenus[ModelAPI_ResultGroup::group()] = aList;
+  myObjBrowserMenus[ModelAPI_ResultField::group()] = aList;
   // Result part menu
   myObjBrowserMenus[ModelAPI_ResultPart::group()] = aList;
   //-------------------------------------
@@ -482,6 +521,7 @@ void XGUI_ContextMenuMgr::buildViewerMenu()
   aList.append(action("SHOW_ONLY_CMD"));
   aList.append(mySeparator);
   aList.append(action("COLOR_CMD"));
+  aList.append(action("DEFLECTION_CMD"));
   myViewerMenu[ModelAPI_ResultConstruction::group()] = aList;
   // Result part menu
   myViewerMenu[ModelAPI_ResultPart::group()] = aList;
@@ -495,9 +535,11 @@ void XGUI_ContextMenuMgr::buildViewerMenu()
   aList.append(action("SHOW_ONLY_CMD"));
   aList.append(mySeparator);
   aList.append(action("COLOR_CMD"));
+  aList.append(action("DEFLECTION_CMD"));
   myViewerMenu[ModelAPI_ResultBody::group()] = aList;
   // Group menu
   myViewerMenu[ModelAPI_ResultGroup::group()] = aList;
+  myViewerMenu[ModelAPI_ResultField::group()] = aList;
   //-------------------------------------
 }
 
@@ -529,9 +571,21 @@ void XGUI_ContextMenuMgr::addObjBrowserMenu(QMenu* theMenu) const
       aActions.append(mySeparator);
       //aActions.append(action("MOVE_CMD"));
       aActions.append(action("COLOR_CMD"));
+      aActions.append(action("DEFLECTION_CMD"));
+
       aActions.append(action("CLEAN_HISTORY_CMD"));
       aActions.append(action("DELETE_CMD"));
   }
+#ifdef _DEBUG
+  if (aSelected == 0) {
+    #ifdef VINSPECTOR
+    aActions.append(action("VINSPECTOR_VIEW"));
+    #endif
+    #ifdef DFBROWSER
+    aActions.append(action("DFBROWSER_VIEW"));
+    #endif
+  }
+#endif
   theMenu->addActions(aActions);
   addFeatures(theMenu);
 
@@ -543,7 +597,8 @@ void XGUI_ContextMenuMgr::addObjBrowserMenu(QMenu* theMenu) const
 void XGUI_ContextMenuMgr::addViewerMenu(QMenu* theMenu) const
 {
   XGUI_SelectionMgr* aSelMgr = myWorkshop->selector();
-  QList<ModuleBase_ViewerPrsPtr> aPrsList = aSelMgr->selection()->getSelected(ModuleBase_ISelection::Viewer);
+  QList<ModuleBase_ViewerPrsPtr> aPrsList =
+    aSelMgr->selection()->getSelected(ModuleBase_ISelection::Viewer);
   int aSelected = aPrsList.size();
   QActionsList aActions;
 
@@ -556,7 +611,8 @@ void XGUI_ContextMenuMgr::addViewerMenu(QMenu* theMenu) const
     aSelMenu->addAction(action("SELECT_VERTEX_CMD"));
     aSelMenu->addAction(action("SELECT_EDGE_CMD"));
     aSelMenu->addAction(action("SELECT_FACE_CMD"));
-    aSelMenu->addSeparator();
+    //IMP: an attempt to use result selection with other selection modes
+    //aSelMenu->addSeparator();
     aSelMenu->addAction(action("SELECT_RESULT_CMD"));
     theMenu->addMenu(aSelMenu);
     theMenu->addSeparator();
@@ -574,6 +630,7 @@ void XGUI_ContextMenuMgr::addViewerMenu(QMenu* theMenu) const
   // hide all is shown always even if selection in the viewer is empty
   aActions.append(action("HIDEALL_CMD"));
   aActions.append(action("COLOR_CMD"));
+  aActions.append(action("DEFLECTION_CMD"));
 
   theMenu->addActions(aActions);
 
@@ -632,7 +689,7 @@ void XGUI_ContextMenuMgr::onRename()
 {
   QObjectPtrList anObjects = myWorkshop->selector()->selection()->selectedObjects();
   if (!myWorkshop->abortAllOperations())
-    return; 
+    return;
   // restore selection in case if dialog box was shown
   myWorkshop->objectBrowser()->setObjectsSelected(anObjects);
   myWorkshop->objectBrowser()->onEditItem();
@@ -660,18 +717,18 @@ void XGUI_ContextMenuMgr::addFeatures(QMenu* theMenu) const
         return;
       if ((!aIsRoot) && (aIdx.internalPointer() != aActiveDoc.get()))
         return;
-      
+
       // Get name of the selected index
       aName = aIdx.data().toString();
       aLen = aName.indexOf('(');
       if (aLen != -1) {
         aName = aName.left(--aLen);
       }
-      std::string aFeaturesStr = aIsRoot? 
+      std::string aFeaturesStr = aIsRoot?
         aDataModelXML->rootFolderFeatures(aName.toStdString()) :
         aDataModelXML->subFolderFeatures(aName.toStdString());
         if (aFeaturesStr.length() > 0) {
-          QStringList aFeturesList = 
+          QStringList aFeturesList =
             QString(aFeaturesStr.c_str()).split(",", QString::SkipEmptyParts);
           foreach(QString aFea, aFeturesList) {
             QAction* aAction = aActionMgr->action(aFea);