X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FXGUI%2FXGUI_ContextMenuMgr.cpp;h=8557a43f972489ffbb5c490282131b11e69f11b6;hb=8f09d362a50ccbc085841c24af2e755121e458ba;hp=8da4ebda28455e529d251aa028209ec78aff7918;hpb=e655a7347d0a53f15d1f1ee5ff6fbcbb3001124e;p=modules%2Fshaper.git diff --git a/src/XGUI/XGUI_ContextMenuMgr.cpp b/src/XGUI/XGUI_ContextMenuMgr.cpp index 8da4ebda2..8557a43f9 100644 --- a/src/XGUI/XGUI_ContextMenuMgr.cpp +++ b/src/XGUI/XGUI_ContextMenuMgr.cpp @@ -54,6 +54,10 @@ void XGUI_ContextMenuMgr::createActions() aAction->setShortcut(Qt::Key_Delete); aAction->setShortcutContext(Qt::ApplicationShortcut); + aAction = new QAction(QIcon(":pictures/rename_edit.png"), tr("Rename"), this); + addAction("RENAME_CMD", aAction); + connect(aAction, SIGNAL(triggered(bool)), this, SLOT(onRename())); + aAction = new QAction(QIcon(":pictures/move.png"), tr("Move..."), this); addAction("MOVE_CMD", aAction); @@ -129,13 +133,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)) { @@ -163,7 +167,8 @@ void XGUI_ContextMenuMgr::updateObjectBrowserMenu() bool hasResult = false; bool hasFeature = false; bool hasParameter = false; - ModuleBase_Tools::checkObjects(aObjects, hasResult, hasFeature, hasParameter); + bool hasSubFeature = false; + ModuleBase_Tools::checkObjects(aObjects, hasResult, hasFeature, hasParameter, hasSubFeature); //Process Feature if (aSelected == 1) { @@ -180,16 +185,17 @@ void XGUI_ContextMenuMgr::updateObjectBrowserMenu() action("SHOW_CMD")->setEnabled(true); } - ResultPartPtr aPartRes = std::dynamic_pointer_cast(aObject); - if (aPartRes) { - action("SHOW_CMD")->setEnabled(true); - } - if (!(hasParameter || hasFeature)) action("SHOW_ONLY_CMD")->setEnabled(true); } else if (hasFeature && myWorkshop->canMoveFeature()) action("MOVE_CMD")->setEnabled(true); + + if( aMgr->activeDocument() == aObject->document() ) + { + action("RENAME_CMD")->setEnabled(true); + action("DELETE_CMD")->setEnabled(true); + } } } else { if (hasResult && (!hasParameter)) { @@ -200,11 +206,24 @@ void XGUI_ContextMenuMgr::updateObjectBrowserMenu() action("WIREFRAME_CMD")->setEnabled(true); } } - if (hasFeature || hasParameter) - action("DELETE_CMD")->setEnabled(true); + bool allActive = true; + foreach( ObjectPtr aObject, aObjects ) + if( aMgr->activeDocument() != aObject->document() ) + { + allActive = false; + break; + } + if (!hasSubFeature && allActive ) { + if (hasFeature || hasParameter) + action("DELETE_CMD")->setEnabled(true); + } } if (myWorkshop->canChangeColor()) action("COLOR_CMD")->setEnabled(true); + + ModuleBase_IModule* aModule = myWorkshop->module(); + if (aModule) + aModule->updateObjectBrowserMenu(myActions); } void XGUI_ContextMenuMgr::updateViewerMenu() @@ -213,13 +232,14 @@ void XGUI_ContextMenuMgr::updateViewerMenu() aAction->setEnabled(false); XGUI_SelectionMgr* aSelMgr = myWorkshop->selector(); - QObjectPtrList aObjects = aSelMgr->selection()->selectedObjects(); - if (aObjects.size() > 0) { + QList 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(aObject); if (aRes && aRes->isDisplayed()) { isVisible = true; @@ -244,6 +264,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() @@ -271,9 +295,9 @@ void XGUI_ContextMenuMgr::buildObjBrowserMenu() aList.append(action("HIDE_CMD")); aList.append(action("SHOW_ONLY_CMD")); aList.append(action("COLOR_CMD")); + aList.append(mySeparator); + aList.append(action("RENAME_CMD")); myObjBrowserMenus[ModelAPI_ResultConstruction::group()] = aList; - // Result part menu - myObjBrowserMenus[ModelAPI_ResultPart::group()] = aList; //------------------------------------- // Result body menu aList.clear(); @@ -284,18 +308,26 @@ void XGUI_ContextMenuMgr::buildObjBrowserMenu() aList.append(action("SHOW_CMD")); aList.append(action("HIDE_CMD")); aList.append(action("SHOW_ONLY_CMD")); + aList.append(mySeparator); + aList.append(action("RENAME_CMD")); myObjBrowserMenus[ModelAPI_ResultBody::group()] = aList; // Group menu myObjBrowserMenus[ModelAPI_ResultGroup::group()] = aList; + // Result part menu + myObjBrowserMenus[ModelAPI_ResultPart::group()] = aList; //------------------------------------- // Feature menu aList.clear(); aList.append(action("DELETE_CMD")); aList.append(action("MOVE_CMD")); + aList.append(mySeparator); + aList.append(action("RENAME_CMD")); myObjBrowserMenus[ModelAPI_Feature::group()] = aList; aList.clear(); aList.append(action("DELETE_CMD")); + aList.append(mySeparator); + aList.append(action("RENAME_CMD")); myObjBrowserMenus[ModelAPI_ResultParameter::group()] = aList; //------------------------------------- } @@ -329,9 +361,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(); @@ -352,49 +383,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 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) @@ -417,3 +445,8 @@ QStringList XGUI_ContextMenuMgr::actionObjectGroups(const QString& theName) } return aGroups; } + +void XGUI_ContextMenuMgr::onRename() +{ + myWorkshop->objectBrowser()->onEditItem(); +}