]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Issue #762: Show Detach menu item in Salome mode. Disable menu items for shapes in...
authorvsv <vitaly.smetannikov@opencascade.com>
Tue, 14 Jul 2015 11:47:25 +0000 (14:47 +0300)
committervsv <vitaly.smetannikov@opencascade.com>
Tue, 14 Jul 2015 11:47:37 +0000 (14:47 +0300)
src/ModuleBase/ModuleBase_IModule.h
src/NewGeom/NewGeom_Module.cpp
src/PartSet/PartSet_MenuMgr.cpp
src/PartSet/PartSet_MenuMgr.h
src/PartSet/PartSet_Module.cpp
src/PartSet/PartSet_Module.h
src/XGUI/XGUI_ContextMenuMgr.cpp
src/XGUI/XGUI_ContextMenuMgr.h

index f77d5674aaa7316f3a200507a3abd6e86a5e9709..d6bd6e9afdc878e024ee5f469294abbabafb5c0b 100644 (file)
@@ -166,6 +166,14 @@ class MODULEBASE_EXPORT ModuleBase_IModule : public QObject
   //! Returns data object by AIS\r
   virtual ObjectPtr findPresentedObject(const AISObjectPtr& theAIS) const = 0;\r
 \r
+  /// Update state of pop-up menu items in object browser\r
+  /// \param theStdActions - a map of standard actions\r
+  virtual void updateObjectBrowserMenu(const QMap<QString, QAction*>& theStdActions) {}\r
+\r
+  /// Update state of pop-up menu items in viewer\r
+  /// \param theStdActions - a map of standard actions\r
+  virtual void updateViewerMenu(const QMap<QString, QAction*>& theStdActions) {}\r
+\r
 signals:\r
   void operationLaunched();\r
 \r
index d88a4ca6b2de72a0126d0a984720ef12cb312be3..9a20bca77d50a7c1fb45db3b57a0df06dd21749c 100644 (file)
@@ -537,11 +537,9 @@ void NewGeom_Module::selectionChanged()
 //******************************************************
 void NewGeom_Module::contextMenuPopup(const QString& theClient, QMenu* theMenu, QString& theTitle)
 {
-  QMenu* aMenu = myWorkshop->contextMenuMgr()->viewerMenu();
-  theMenu->addActions(aMenu->actions());
-  //myWorkshop->contextMenuMgr()->addViewerMenu(theMenu);
+  myWorkshop->contextMenuMgr()->updateViewerMenu();
+  myWorkshop->contextMenuMgr()->addViewerMenu(theMenu);
   LightApp_Module::contextMenuPopup(theClient, theMenu, theTitle);
-  delete aMenu; // Delete menu because it is not controlled by menu manager
 }
 
 
index dfc184a42646b09abc8555f9331ea3d1b767ec12..f232b9b4845a5fba8b2a5185f270c073d3c41a4c 100644 (file)
@@ -113,7 +113,7 @@ bool PartSet_MenuMgr::addViewerMenu(QMenu* theMenu, const QMap<QString, QAction*
   bool hasAttribute = false;
   bool hasFeature = false;
 
-  QList<ModuleBase_ViewerPrs> aPrsList = aSelection->getSelected(ModuleBase_ISelection::AllControls);
+  QList<ModuleBase_ViewerPrs> aPrsList = aSelection->getSelected(ModuleBase_ISelection::Viewer);
   TopoDS_Shape aShape;
   ResultPtr aResult;
   FeaturePtr aFeature;
@@ -205,6 +205,23 @@ bool PartSet_MenuMgr::addViewerMenu(QMenu* theMenu, const QMap<QString, QAction*
   return true;
 }
 
+void PartSet_MenuMgr::updateViewerMenu(const QMap<QString, QAction*>& theStdActions)
+{
+  ModuleBase_Operation* anOperation = myModule->workshop()->currentOperation();
+
+  bool isActiveSketch = PartSet_SketcherMgr::isSketchOperation(anOperation) ||
+                        PartSet_SketcherMgr::isNestedSketchOperation(anOperation);
+  if (isActiveSketch) {
+    theStdActions["WIREFRAME_CMD"]->setEnabled(false);
+    theStdActions["SHADING_CMD"]->setEnabled(false);
+    theStdActions["SHOW_ONLY_CMD"]->setEnabled(false);
+    theStdActions["SHOW_CMD"]->setEnabled(false);
+    theStdActions["HIDE_CMD"]->setEnabled(false);
+    theStdActions["HIDEALL_CMD"]->setEnabled(false);
+  }
+}
+
+
 void PartSet_MenuMgr::onLineHighlighted(QAction* theAction)
 {
   if (myPrevId != -1) {
index 93f545360bc5f771b99c94e244ba4d5f4abe41ec..b31493dcddf59f4103ff4e0f5bee3933e59f96d8 100644 (file)
@@ -42,6 +42,10 @@ public:
   /// \return true if items are added and there is no necessity to provide standard menu
   bool addViewerMenu(QMenu* theMenu, const QMap<QString, QAction*>& theStdActions) const;
 
+  /// Update state of pop-up menu items in viewer
+  /// \param theStdActions - a map of standard actions
+  void updateViewerMenu(const QMap<QString, QAction*>& theStdActions); 
+
 public slots:
   /// Processes the context menu action click
   /// \param isChecked a state of toggle if the action is checkable
index ccc0565cc18ff7564c432592deb9d938629b8015..8bde3e6f8179e8e5a423b3e936447283f4a7990f 100644 (file)
@@ -362,6 +362,12 @@ bool PartSet_Module::addViewerMenu(QMenu* theMenu, const QMap<QString, QAction*>
   return myMenuMgr->addViewerMenu(theMenu, theStdActions);
 }
 
+void PartSet_Module::updateViewerMenu(const QMap<QString, QAction*>& theStdActions)
+{
+  myMenuMgr->updateViewerMenu(theStdActions);
+}
+
+
 void PartSet_Module::activeSelectionModes(QIntList& theModes)
 {
   theModes.clear();
@@ -917,7 +923,6 @@ void PartSet_Module::onViewCreated(ModuleBase_IViewWindow*)
     TColStd_SequenceOfInteger aZList;
     aViewer->GetAllZLayers(aZList);
     bool aFound = false;
-    //TColStd_SequenceIteratorOfSequenceOfInteger aIt;
     for (int i = 1; i <= aZList.Length(); i++) {
       if (aZList(i) == myVisualLayerId) {
         aFound = true;
index ecb1dffdcba1b2ad6df7ee806a4d37f69f03f1ba..f97713ce76a3dfae0e0ff07c3e17359ffcb4a0be 100644 (file)
@@ -164,6 +164,10 @@ public:
   //! Returns data object by AIS
   virtual ObjectPtr findPresentedObject(const AISObjectPtr& theAIS) const;
 
+  /// Update state of pop-up menu items in viewer
+  /// \param theStdActions - a map of standard actions
+  virtual void updateViewerMenu(const QMap<QString, QAction*>& theStdActions); 
+
 public slots:
   /// SLOT, that is called by no more widget signal emitted by property panel
   /// Set a specific flag to restart the sketcher operation
index 81e6fe2b89fed3dfae7e8aab9c768eb6336ebd05..7e7b904465e4d809d9bd5d8fb447b62797fb2f86 100644 (file)
@@ -129,13 +129,13 @@ void XGUI_ContextMenuMgr::updateCommandsStatus()
 
 void XGUI_ContextMenuMgr::onContextMenuRequest(QContextMenuEvent* theEvent)
 {
-  QMenu* aMenu = 0;
+  QMenu* aMenu = new QMenu();
   if (sender() == myWorkshop->objectBrowser()) {
     updateObjectBrowserMenu();
-    aMenu = objBrowserMenu();
+    addObjBrowserMenu(aMenu);
   } else if (sender() == myWorkshop->viewer()) {
     updateViewerMenu();
-    aMenu = viewerMenu();
+    addViewerMenu(aMenu);
   }
 
   if (aMenu && (aMenu->actions().size() > 0)) {
@@ -203,6 +203,10 @@ void XGUI_ContextMenuMgr::updateObjectBrowserMenu()
   }
   if (myWorkshop->canChangeColor())
     action("COLOR_CMD")->setEnabled(true);
+
+  ModuleBase_IModule* aModule = myWorkshop->module();
+  if (aModule)
+    aModule->updateObjectBrowserMenu(myActions);
 }
 
 void XGUI_ContextMenuMgr::updateViewerMenu()
@@ -211,13 +215,14 @@ void XGUI_ContextMenuMgr::updateViewerMenu()
     aAction->setEnabled(false);
 
   XGUI_SelectionMgr* aSelMgr = myWorkshop->selector();
-  QObjectPtrList aObjects = aSelMgr->selection()->selectedObjects();
-  if (aObjects.size() > 0) {
+  QList<ModuleBase_ViewerPrs> aPrsList = aSelMgr->selection()->getSelected(ModuleBase_ISelection::Viewer);
+  if (aPrsList.size() > 0) {
     bool isVisible = false;
     bool isShading = false;
     bool canBeShaded = false;
-    foreach(ObjectPtr aObject, aObjects)
-    {
+    ObjectPtr aObject;
+    foreach(ModuleBase_ViewerPrs aPrs, aPrsList) {
+      aObject = aPrs.object();
       ResultPtr aRes = std::dynamic_pointer_cast<ModelAPI_Result>(aObject);
       if (aRes && aRes->isDisplayed()) {
         isVisible = true;
@@ -242,6 +247,10 @@ void XGUI_ContextMenuMgr::updateViewerMenu()
     action("COLOR_CMD")->setEnabled(true);
 
   action("DELETE_CMD")->setEnabled(true);
+
+  ModuleBase_IModule* aModule = myWorkshop->module();
+  if (aModule)
+    aModule->updateViewerMenu(myActions);
 }
 
 void XGUI_ContextMenuMgr::connectObjectBrowser()
@@ -327,9 +336,8 @@ void XGUI_ContextMenuMgr::buildViewerMenu()
 }
 
 
-QMenu* XGUI_ContextMenuMgr::objBrowserMenu() const
+void XGUI_ContextMenuMgr::addObjBrowserMenu(QMenu* theMenu) const
 {
-  QMenu* aMenu = new QMenu();
   XGUI_SelectionMgr* aSelMgr = myWorkshop->selector();
   QObjectPtrList aObjects = aSelMgr->selection()->selectedObjects();
   int aSelected = aObjects.size();
@@ -350,49 +358,46 @@ QMenu* XGUI_ContextMenuMgr::objBrowserMenu() const
       aActions.append(action("DELETE_CMD"));
       //aActions.append(action("MOVE_CMD"));
   }
-  aMenu->addActions(aActions);
+  theMenu->addActions(aActions);
 
   ModuleBase_IModule* aModule = myWorkshop->module();
   if (aModule) {
-    aMenu->addSeparator();
-    aModule->addObjectBrowserMenu(aMenu);
+    theMenu->addSeparator();
+    aModule->addObjectBrowserMenu(theMenu);
   }
-  aMenu->addSeparator();
-  aMenu->addActions(myWorkshop->objectBrowser()->actions());
-
-  return aMenu;
+  theMenu->addSeparator();
+  theMenu->addActions(myWorkshop->objectBrowser()->actions());
 }
 
-QMenu* XGUI_ContextMenuMgr::viewerMenu() const
+void XGUI_ContextMenuMgr::addViewerMenu(QMenu* theMenu) const
 {
-  QMenu* aMenu = new QMenu();
   ModuleBase_IModule* aModule = myWorkshop->module();
-  if (aModule) 
-    aModule->addViewerMenu(aMenu, myActions);
-
+  if (aModule) {
+    if (aModule->addViewerMenu(theMenu, myActions))
+      theMenu->addSeparator();
+  }
   XGUI_SelectionMgr* aSelMgr = myWorkshop->selector();
-  QObjectPtrList aObjects = aSelMgr->selection()->selectedObjects();
-  int aSelected = aObjects.size();
+  QList<ModuleBase_ViewerPrs> aPrsList = aSelMgr->selection()->getSelected(ModuleBase_ISelection::Viewer);
+  int aSelected = aPrsList.size();
   QActionsList aActions;
   if (aSelected == 1) {
-    ObjectPtr aObject = aObjects.first();
+    ObjectPtr aObject = aPrsList.first().object();
     std::string aName = aObject->groupName();
     if (myViewerMenu.contains(aName))
       aActions = myViewerMenu[aName];
   } else if (aSelected > 1) {
     aActions.append(action("HIDE_CMD"));
   }
-  aMenu->addActions(aActions);
+  theMenu->addActions(aActions);
 
   if (!myWorkshop->isSalomeMode()) {
-    aMenu->addSeparator();
+    theMenu->addSeparator();
     QMdiArea* aMDI = myWorkshop->mainWindow()->mdiArea();
     if (aMDI->actions().size() > 0) {
-      QMenu* aSubMenu = aMenu->addMenu(tr("Windows"));
+      QMenu* aSubMenu = theMenu->addMenu(tr("Windows"));
       aSubMenu->addActions(aMDI->actions());
     }
   }
-  return aMenu;
 }
 
 QStringList XGUI_ContextMenuMgr::actionObjectGroups(const QString& theName)
index 254baf198169cff0f603300662c548539fc91439..1ce4bcb1bad95365a0f77d0571b93bce9cd7df5e 100644 (file)
@@ -49,14 +49,17 @@ Q_OBJECT
   /// Connect to viewer from workshop. Has to called at creation of viewer.
   void connectViewer();
 
-  QMenu* objBrowserMenu() const;
-  QMenu* viewerMenu() const;
+  void addObjBrowserMenu(QMenu*) const;
+  void addViewerMenu(QMenu*) const;
 
   /// Returns a list of object group names of the action
   /// \param theName a name of the action
   /// \return a list of group names
   QStringList actionObjectGroups(const QString& theName);
 
+  /// Updates menu for viewer
+  void updateViewerMenu();
+
 signals:
   /// Signal aabout triggered action
   /// \param theId an id of triggered action
@@ -89,9 +92,6 @@ signals:
   /// Updates menu for object browser
   void updateObjectBrowserMenu();
 
-  /// Updates menu for viewer
-  void updateViewerMenu();
-
   /// Creates menu for object browser
   void buildObjBrowserMenu();