Salome HOME
Task "Make the size of the selection area even bigger, especially for points"
[modules/shaper.git] / src / PartSet / PartSet_MenuMgr.cpp
index 293e2fa8cab11275746c5e610db01e265896b15b..7b60d802cd274cf7027b32a926c5908a1c17f39b 100644 (file)
@@ -25,6 +25,7 @@
 #include <ModuleBase_OperationAction.h>
 #include <ModuleBase_OperationFeature.h>
 #include <ModuleBase_ViewerPrs.h>
+#include <ModuleBase_Tools.h>
 
 #include <XGUI_ModuleConnector.h>
 #include <XGUI_Workshop.h>
@@ -38,6 +39,7 @@
 #include <ModelAPI_ResultPart.h>
 #include <ModelAPI_ResultParameter.h>
 
+#include <QMainWindow>
 #include <QAction>
 #include <QMenu>
 #include <QEvent>
@@ -72,27 +74,23 @@ void PartSet_MenuMgr::createActions()
 {
   QAction* aAction;
 
-  aAction = new QAction(tr("Auxiliary"), this);
+  QWidget* aParent = myModule->workshop()->desktop();
+  aAction = ModuleBase_Tools::createAction(QIcon(), tr("Auxiliary"), aParent);
   aAction->setCheckable(true);
   addAction("AUXILIARY_CMD", aAction);
 
-  aAction = new QAction(QIcon(":icons/activate.png"), tr("Activate"), this);
-  connect(aAction, SIGNAL(triggered(bool)), this, SLOT(onActivatePart(bool)));
+  aAction = ModuleBase_Tools::createAction(QIcon(":icons/activate.png"), tr("Activate"), aParent,
+                                           this, SLOT(onActivatePart(bool)));
   myActions["ACTIVATE_PART_CMD"] = aAction;
 
   // Activate PartSet
-  aAction = new QAction(QIcon(":icons/activate.png"), tr("Activate"), this);
-  connect(aAction, SIGNAL(triggered(bool)), this, SLOT(onActivatePartSet(bool)));
+  aAction = ModuleBase_Tools::createAction(QIcon(":icons/activate.png"), tr("Activate"), aParent,
+                        this, SLOT(onActivatePartSet(bool)));
   myActions["ACTIVATE_PARTSET_CMD"] = aAction;
 
-  aAction = new QAction(QIcon(":icons/edit.png"), tr("Edit..."), this);
-  connect(aAction, SIGNAL(triggered(bool)), this, SLOT(onEdit(bool)));
+  aAction = ModuleBase_Tools::createAction(QIcon(":icons/edit.png"), tr("Edit..."), aParent,
+                         this, SLOT(onEdit(bool)));
   myActions["EDIT_CMD"] = aAction;
-
-  aAction = new QAction(QIcon(), tr("Select parent feature"), this);
-  aAction->setCheckable(false);
-  connect(aAction, SIGNAL(triggered(bool)), this, SLOT(onSelectParentFeature()));
-  myActions["SELECT_PARENT_CMD"] = aAction;
 }
 
 
@@ -106,8 +104,12 @@ void PartSet_MenuMgr::onAction(bool isChecked)
   }
 }
 
-bool PartSet_MenuMgr::addViewerMenu(QMenu* theMenu, const QMap<QString, QAction*>& theStdActions) const
+bool PartSet_MenuMgr::addViewerMenu(const QMap<QString, QAction*>& theStdActions,
+                                    QWidget* theParent,
+                                    QMap<int, QAction*>& theMenuActions) const
 {
+  int anIndex = 0;
+
   ModuleBase_Operation* anOperation = myModule->workshop()->currentOperation();
   if (!PartSet_SketcherMgr::isSketchOperation(anOperation) &&
       !PartSet_SketcherMgr::isNestedSketchOperation(anOperation))
@@ -121,23 +123,25 @@ bool PartSet_MenuMgr::addViewerMenu(QMenu* theMenu, const QMap<QString, QAction*
   bool hasFeature = false;
 
   QList<ModuleBase_ViewerPrsPtr> aPrsList = aSelection->getSelected(ModuleBase_ISelection::Viewer);
-  ResultPtr aResult;
-  FeaturePtr aFeature;
-  foreach(ModuleBase_ViewerPrsPtr aPrs, aPrsList) {
-    aResult = std::dynamic_pointer_cast<ModelAPI_Result>(aPrs->object());
-    if (aResult.get() != NULL) {
-      const GeomShapePtr& aShape = aPrs->shape();
-      if (aShape.get() && aShape->isEqual(aResult->shape()))
-        hasFeature = true;
-      else
-        hasAttribute = true;
-    } else {
-      aFeature = std::dynamic_pointer_cast<ModelAPI_Feature>(aPrs->object());
-      hasFeature = (aFeature.get() != NULL);
+  if (aPrsList.size() > 1) {
+    hasFeature = true;
+  } else if (aPrsList.size() == 1) {
+    ResultPtr aResult;
+    FeaturePtr aFeature;
+    foreach(ModuleBase_ViewerPrsPtr aPrs, aPrsList) {
+      aResult = std::dynamic_pointer_cast<ModelAPI_Result>(aPrs->object());
+      if (aResult.get() != NULL) {
+        const GeomShapePtr& aShape = aPrs->shape();
+        if (aShape.get() && aShape->isEqual(aResult->shape()))
+          hasFeature = true;
+        else
+          hasAttribute = true;
+      } else {
+        aFeature = std::dynamic_pointer_cast<ModelAPI_Feature>(aPrs->object());
+        hasFeature = (aFeature.get() != NULL);
+      }
     }
-  }
 
-  if (aPrsList.size() == 1) {
     const GeomShapePtr& aShape = aPrsList.first()->shape();
     if (aShape.get() && !aShape->isNull() && aShape->shapeType() == GeomAPI_Shape::VERTEX) {
       // Find 2d coordinates
@@ -162,7 +166,8 @@ bool PartSet_MenuMgr::addViewerMenu(QMenu* theMenu, const QMap<QString, QAction*
                                           SketchPlugin_ConstraintCoincidence::ENTITY_B());
           if (myCoinsideLines.size() > 0) {
             aIsDetach = true;
-            QMenu* aSubMenu = theMenu->addMenu(tr("Detach"));
+            QMenu* aSubMenu = new QMenu(tr("Detach"), theParent);
+            theMenuActions[anIndex++] = aSubMenu->menuAction();
             QAction* aAction;
             int i = 0;
             foreach (FeaturePtr aCoins, myCoinsideLines) {
@@ -178,17 +183,20 @@ bool PartSet_MenuMgr::addViewerMenu(QMenu* theMenu, const QMap<QString, QAction*
       }
     }
   }
-  if ((!aIsDetach) && hasFeature) {
-    theMenu->addAction(theStdActions["DELETE_CMD"]);
+  if (!hasAttribute) {
+    bool isAuxiliary;
+    if (canSetAuxiliary(isAuxiliary)) {
+      QAction* anAction = action("AUXILIARY_CMD");
+      theMenuActions[anIndex++] = anAction;
+      anAction->setChecked(isAuxiliary);
+    }
   }
-  if (hasAttribute)
-    return true;
-  bool isAuxiliary;
-  if (canSetAuxiliary(isAuxiliary)) {
-    QAction* anAction = action("AUXILIARY_CMD");
-    theMenu->addAction(anAction);
-    anAction->setChecked(isAuxiliary);
+
+  if (!aIsDetach && hasFeature) {
+    // Delete item should be the last in the list of actions
+    theMenuActions[1000] = theStdActions["DELETE_CMD"];
   }
+
   return true;
 }
 
@@ -493,23 +501,6 @@ void PartSet_MenuMgr::onEdit(bool)
     myModule->editFeature(aFeature);
 }
 
-void PartSet_MenuMgr::onSelectParentFeature()
-{
-  QObjectPtrList aObjects = myModule->workshop()->selection()->selectedObjects();
-  if (aObjects.size() != 1)
-    return;
-
-  SessionPtr aMgr = ModelAPI_Session::get();
-  ResultPtr aResult = std::dynamic_pointer_cast<ModelAPI_Result>( aObjects.first() );
-  if( !aResult.get() )
-    return;
-
-  FeaturePtr aParentFeature = aResult->document()->feature( aResult );
-  QObjectPtrList aSelection;
-  aSelection.append( aParentFeature );
-  myModule->workshop()->selection()->setSelectedObjects( aSelection );
-}
-
 bool PartSet_MenuMgr::eventFilter(QObject* theObj, QEvent* theEvent)
 {
   if (theEvent->type() == QEvent::MouseButtonDblClick) {