Salome HOME
Issue #1897 Selection of edges in Group feature with SHIFT Key
[modules/shaper.git] / src / XGUI / XGUI_ContextMenuMgr.cpp
index d7a7d1579bba55d1f7f454576ef4dc040d1d209c..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),
@@ -86,6 +86,9 @@ void XGUI_ContextMenuMgr::createActions()
   aAction = ModuleBase_Tools::createAction(QIcon(":pictures/color.png"), tr("Color..."), aDesktop);
   addAction("COLOR_CMD", aAction);
 
+  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);
 
@@ -148,6 +151,15 @@ void XGUI_ContextMenuMgr::createActions()
                                            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();
 }
@@ -215,7 +227,7 @@ void XGUI_ContextMenuMgr::onContextMenuRequest(QContextMenuEvent* theEvent)
   }
 }
 
-void XGUI_ContextMenuMgr::updateObjectBrowserMenu() 
+void XGUI_ContextMenuMgr::updateObjectBrowserMenu()
 {
   foreach(QAction* aAction, myActions)
     aAction->setEnabled(false);
@@ -322,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);
@@ -334,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;
@@ -346,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;
       }
     }
@@ -386,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:
@@ -399,7 +426,7 @@ void XGUI_ContextMenuMgr::updateViewerMenu()
         action("SELECT_RESULT_CMD")->setChecked(true);
       }
     }
-  } 
+  }
 
   ModuleBase_IModule* aModule = myWorkshop->module();
   if (aModule)
@@ -408,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);
 }
 
@@ -438,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;
 
@@ -454,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;
   //-------------------------------------
@@ -488,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;
@@ -501,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;
   //-------------------------------------
 }
 
@@ -535,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);
 
@@ -549,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;
 
@@ -581,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);
 
@@ -639,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();
@@ -667,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);