X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FXGUI%2FXGUI_ContextMenuMgr.cpp;h=190f2ef3d50e54ab4cc89b3d33ffc4c52079ec43;hb=327f5bbd915fb32d21f2e524a8d97536e0e5dd4b;hp=f3625a1f88a70aefc22b951dbe1fe757294c3c1b;hpb=6eb2159e22cf1cf6d664e3847cc4b1a8d71af72d;p=modules%2Fshaper.git diff --git a/src/XGUI/XGUI_ContextMenuMgr.cpp b/src/XGUI/XGUI_ContextMenuMgr.cpp index f3625a1f8..190f2ef3d 100644 --- a/src/XGUI/XGUI_ContextMenuMgr.cpp +++ b/src/XGUI/XGUI_ContextMenuMgr.cpp @@ -8,6 +8,9 @@ #include "XGUI_ViewerProxy.h" #include "XGUI_Selection.h" #include "XGUI_SalomeConnector.h" +#include "XGUI_DataModel.h" +#include "XGUI_OperationMgr.h" +#include "XGUI_Tools.h" #include @@ -21,9 +24,11 @@ #include #include #include +#include #include #include +#include #include #include @@ -58,7 +63,7 @@ void XGUI_ContextMenuMgr::createActions() addAction("RENAME_CMD", aAction); connect(aAction, SIGNAL(triggered(bool)), this, SLOT(onRename())); - aAction = new QAction(QIcon(":pictures/move.png"), tr("Move..."), this); + aAction = new QAction(QIcon(":pictures/move.png"), tr("Move to the end"), this); addAction("MOVE_CMD", aAction); aAction = new QAction(QIcon(":pictures/color.png"), tr("Color..."), this); @@ -175,16 +180,29 @@ void XGUI_ContextMenuMgr::updateObjectBrowserMenu() ObjectPtr aObject = aObjects.first(); if (aObject) { if (hasResult && myWorkshop->canBeShaded(aObject)) { - action("WIREFRAME_CMD")->setEnabled(true); - action("SHADING_CMD")->setEnabled(true); + XGUI_Displayer::DisplayMode aMode = aDisplayer->displayMode(aObject); + if (aMode != XGUI_Displayer::NoMode) { + action("WIREFRAME_CMD")->setEnabled(aMode == XGUI_Displayer::Shading); + action("SHADING_CMD")->setEnabled(aMode == XGUI_Displayer::Wireframe); + } else { + action("WIREFRAME_CMD")->setEnabled(true); + action("SHADING_CMD")->setEnabled(true); + } } if (!hasFeature) { - if (aObject->isDisplayed()) { + bool aHasSubResults = ModelAPI_Tools::hasSubResults( + std::dynamic_pointer_cast(aObject)); + if (aHasSubResults) { action("HIDE_CMD")->setEnabled(true); - } else if (hasResult && (!hasParameter)) { action("SHOW_CMD")->setEnabled(true); } - + else { + if (aObject->isDisplayed()) { + action("HIDE_CMD")->setEnabled(true); + } else if (hasResult && (!hasParameter)) { + action("SHOW_CMD")->setEnabled(true); + } + } if (!(hasParameter || hasFeature)) action("SHOW_ONLY_CMD")->setEnabled(true); } @@ -209,8 +227,7 @@ void XGUI_ContextMenuMgr::updateObjectBrowserMenu() } bool allActive = true; foreach( ObjectPtr aObject, aObjects ) - if( aMgr->activeDocument() != aObject->document() ) - { + if( aMgr->activeDocument() != aObject->document() ) { allActive = false; break; } @@ -219,6 +236,25 @@ void XGUI_ContextMenuMgr::updateObjectBrowserMenu() action("DELETE_CMD")->setEnabled(true); } } + + // Show/Hide command has to be disabled for objects from non active document + bool aDeactivate = false; + foreach (ObjectPtr aObj, aObjects) { + if (!aObj->document()->isActive()) { + if ((aObj->document() != ModelAPI_Session::get()->moduleDocument()) || + aObj->groupName() == ModelAPI_ResultPart::group()) { + aDeactivate = true; + break; + } + } + } + if (aDeactivate) { + // If at leas a one objec can not be edited then Show/Hide has to be disabled + action("SHOW_CMD")->setEnabled(false); + action("HIDE_CMD")->setEnabled(false); + action("SHOW_ONLY_CMD")->setEnabled(false); + } + if (myWorkshop->canChangeColor()) action("COLOR_CMD")->setEnabled(true); @@ -251,8 +287,15 @@ void XGUI_ContextMenuMgr::updateViewerMenu() } if (isVisible) { if (canBeShaded) { - action("WIREFRAME_CMD")->setEnabled(true); - action("SHADING_CMD")->setEnabled(true); + XGUI_Displayer* aDisplayer = myWorkshop->displayer(); + XGUI_Displayer::DisplayMode aMode = aDisplayer->displayMode(aObject); + if (aMode != XGUI_Displayer::NoMode) { + action("WIREFRAME_CMD")->setEnabled(aMode == XGUI_Displayer::Shading); + action("SHADING_CMD")->setEnabled(aMode == XGUI_Displayer::Wireframe); + } else { + action("WIREFRAME_CMD")->setEnabled(true); + action("SHADING_CMD")->setEnabled(true); + } } action("SHOW_ONLY_CMD")->setEnabled(true); action("HIDE_CMD")->setEnabled(true); @@ -383,6 +426,7 @@ void XGUI_ContextMenuMgr::addObjBrowserMenu(QMenu* theMenu) const aActions.append(mySeparator); aActions.append(action("DELETE_CMD")); //aActions.append(action("MOVE_CMD")); + aActions.append(action("COLOR_CMD")); } theMenu->addActions(aActions); @@ -411,8 +455,10 @@ void XGUI_ContextMenuMgr::addViewerMenu(QMenu* theMenu) const std::string aName = aObject->groupName(); if (myViewerMenu.contains(aName)) aActions = myViewerMenu[aName]; + aActions.append(action("COLOR_CMD")); } else if (aSelected > 1) { aActions.append(action("HIDE_CMD")); + aActions.append(action("COLOR_CMD")); } theMenu->addActions(aActions); @@ -449,5 +495,9 @@ QStringList XGUI_ContextMenuMgr::actionObjectGroups(const QString& theName) void XGUI_ContextMenuMgr::onRename() { + ModuleBase_OperationAction* anAction = new ModuleBase_OperationAction("Rename", this); + XGUI_OperationMgr* anOpMgr = myWorkshop->operationMgr(); + anOpMgr->startOperation(anAction); myWorkshop->objectBrowser()->onEditItem(); + anOpMgr->commitOperation(); }