X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FXGUI%2FXGUI_ContextMenuMgr.cpp;h=e7f6c5f55d9ff66a6a2774b6b2f4197d7a85f6b2;hb=6fb5a58743556b877d64129002572de4116abd96;hp=76cc0773864bd8ca1811af573a170caa97b6878a;hpb=b1f1962f8590de7024f522c9a2499665e1296bfb;p=modules%2Fshaper.git diff --git a/src/XGUI/XGUI_ContextMenuMgr.cpp b/src/XGUI/XGUI_ContextMenuMgr.cpp index 76cc07738..e7f6c5f55 100644 --- a/src/XGUI/XGUI_ContextMenuMgr.cpp +++ b/src/XGUI/XGUI_ContextMenuMgr.cpp @@ -1,4 +1,22 @@ -// Copyright (C) 2014-20xx CEA/DEN, EDF R&D --> +// Copyright (C) 2014-2017 CEA/DEN, EDF R&D +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or +// email : webmaster.salome@opencascade.com +// #include "XGUI_ContextMenuMgr.h" #include "XGUI_Workshop.h" @@ -28,6 +46,7 @@ #include #include #include +#include #include @@ -44,7 +63,6 @@ #include #include - XGUI_ContextMenuMgr::XGUI_ContextMenuMgr(XGUI_Workshop* theParent) : QObject(theParent), myWorkshop(theParent), @@ -86,6 +104,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); @@ -132,7 +153,7 @@ void XGUI_ContextMenuMgr::createActions() addAction("SELECT_FACE_CMD", aAction); //mySelectActions->addAction(aAction); - aAction = ModuleBase_Tools::createAction(QIcon(":pictures/result.png"), tr("Result"), aDesktop, + aAction = ModuleBase_Tools::createAction(QIcon(":pictures/result.png"), tr("Results"), aDesktop, this, SLOT(onResultSelection(bool))); aAction->setCheckable(true); addAction("SELECT_RESULT_CMD", aAction); @@ -148,6 +169,11 @@ void XGUI_ContextMenuMgr::createActions() tr("Select parent feature"), aDesktop); addAction("SHOW_FEATURE_CMD", aAction); +#ifdef TINSPECTOR + aAction = ModuleBase_Tools::createAction(QIcon(), tr("TInspector"), aDesktop); + addAction("TINSPECTOR_VIEW", aAction); +#endif + buildObjBrowserMenu(); buildViewerMenu(); } @@ -215,7 +241,7 @@ void XGUI_ContextMenuMgr::onContextMenuRequest(QContextMenuEvent* theEvent) } } -void XGUI_ContextMenuMgr::updateObjectBrowserMenu() +void XGUI_ContextMenuMgr::updateObjectBrowserMenu() { foreach(QAction* aAction, myActions) aAction->setEnabled(false); @@ -230,8 +256,9 @@ void XGUI_ContextMenuMgr::updateObjectBrowserMenu() bool hasFeature = false; bool hasParameter = false; bool hasCompositeOwner = false; + bool hasResultInHistory = false; ModuleBase_Tools::checkObjects(aObjects, hasResult, hasFeature, hasParameter, - hasCompositeOwner); + hasCompositeOwner, hasResultInHistory); //Process Feature if (aSelected == 1) { ObjectPtr aObject = aObjects.first(); @@ -298,7 +325,7 @@ void XGUI_ContextMenuMgr::updateObjectBrowserMenu() action("CLEAN_HISTORY_CMD")->setEnabled(true); action("SHOW_RESULTS_CMD")->setEnabled(hasFeature); - action("SHOW_FEATURE_CMD")->setEnabled(hasResult); + action("SHOW_FEATURE_CMD")->setEnabled(hasResult && hasResultInHistory); } // Show/Hide command has to be disabled for objects from non active document @@ -322,6 +349,16 @@ void XGUI_ContextMenuMgr::updateObjectBrowserMenu() if (myWorkshop->canChangeColor()) action("COLOR_CMD")->setEnabled(true); + if (myWorkshop->canChangeDeflection()) + action("DEFLECTION_CMD")->setEnabled(true); + + #ifdef _DEBUG + #ifdef TINSPECTOR + action("TINSPECTOR_VIEW")->setEnabled(true); + #endif + #endif + + ModuleBase_IModule* aModule = myWorkshop->module(); if (aModule) aModule->updateObjectBrowserMenu(myActions); @@ -334,7 +371,8 @@ void XGUI_ContextMenuMgr::updateViewerMenu() XGUI_SelectionMgr* aSelMgr = myWorkshop->selector(); XGUI_Displayer* aDisplayer = myWorkshop->displayer(); - QList aPrsList = aSelMgr->selection()->getSelected(ModuleBase_ISelection::Viewer); + QList aPrsList = + aSelMgr->selection()->getSelected(ModuleBase_ISelection::Viewer); if (aPrsList.size() > 0) { bool isVisible = false; bool isShading = false; @@ -346,7 +384,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; } } @@ -366,8 +405,13 @@ void XGUI_ContextMenuMgr::updateViewerMenu() } else action("SHOW_CMD")->setEnabled(true); } + //issue #2159 Hide all incomplete behavior +#ifdef HAVE_SALOME + action("HIDEALL_CMD")->setEnabled(true); +#else if (myWorkshop->displayer()->objectsCount() > 0) action("HIDEALL_CMD")->setEnabled(true); +#endif // Update selection menu QIntList aModes = aDisplayer->activeSelectionModes(); @@ -386,10 +430,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 +443,7 @@ void XGUI_ContextMenuMgr::updateViewerMenu() action("SELECT_RESULT_CMD")->setChecked(true); } } - } + } ModuleBase_IModule* aModule = myWorkshop->module(); if (aModule) @@ -408,6 +452,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 +485,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 +502,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 +538,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 +552,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 +588,18 @@ 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 TINSPECTOR + aActions.append(action("TINSPECTOR_VIEW")); + #endif + } +#endif theMenu->addActions(aActions); addFeatures(theMenu); @@ -549,7 +611,8 @@ void XGUI_ContextMenuMgr::addObjBrowserMenu(QMenu* theMenu) const void XGUI_ContextMenuMgr::addViewerMenu(QMenu* theMenu) const { XGUI_SelectionMgr* aSelMgr = myWorkshop->selector(); - QList aPrsList = aSelMgr->selection()->getSelected(ModuleBase_ISelection::Viewer); + QList aPrsList = + aSelMgr->selection()->getSelected(ModuleBase_ISelection::Viewer); int aSelected = aPrsList.size(); QActionsList aActions; @@ -562,7 +625,8 @@ void XGUI_ContextMenuMgr::addViewerMenu(QMenu* theMenu) const aSelMenu->addAction(action("SELECT_VERTEX_CMD")); aSelMenu->addAction(action("SELECT_EDGE_CMD")); aSelMenu->addAction(action("SELECT_FACE_CMD")); - aSelMenu->addSeparator(); + //IMP: an attempt to use result selection with other selection modes + //aSelMenu->addSeparator(); aSelMenu->addAction(action("SELECT_RESULT_CMD")); theMenu->addMenu(aSelMenu); theMenu->addSeparator(); @@ -580,6 +644,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); @@ -637,8 +702,8 @@ QStringList XGUI_ContextMenuMgr::actionObjectGroups(const QString& theName) void XGUI_ContextMenuMgr::onRename() { QObjectPtrList anObjects = myWorkshop->selector()->selection()->selectedObjects(); - if (!myWorkshop->abortAllOperations()) - return; + if (!myWorkshop->operationMgr()->abortAllOperations()) + return; // restore selection in case if dialog box was shown myWorkshop->objectBrowser()->setObjectsSelected(anObjects); myWorkshop->objectBrowser()->onEditItem(); @@ -659,25 +724,25 @@ void XGUI_ContextMenuMgr::addFeatures(QMenu* theMenu) const bool aIsRoot = false; foreach(QModelIndex aIdx, aSelectedIndexes) { // Process only first column - if (aIdx.column() == 0) { + if (aIdx.column() == 1) { aIsRoot = !aIdx.parent().isValid(); // Exit if the selected index belongs to non active document if (aIsRoot && (aActiveDoc != aMgr->moduleDocument())) 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);