X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FXGUI%2FXGUI_ContextMenuMgr.cpp;h=fe220b6578c83044f9938a0b15e9f4329e7be525;hb=4cb749258f33b7de231da5bb50140407c0599d30;hp=0df020d32709e1d064f06002f68f1d6cb67b3c3b;hpb=33d191c57ab22ff6e84ea27e69537670d242d336;p=modules%2Fshaper.git diff --git a/src/XGUI/XGUI_ContextMenuMgr.cpp b/src/XGUI/XGUI_ContextMenuMgr.cpp index 0df020d32..fe220b657 100644 --- a/src/XGUI/XGUI_ContextMenuMgr.cpp +++ b/src/XGUI/XGUI_ContextMenuMgr.cpp @@ -49,12 +49,13 @@ #include #include #include +#include #include #include #include -#include +#include #include #include @@ -95,10 +96,14 @@ void XGUI_ContextMenuMgr::createActions() aDesktop, this, SLOT(onRename())); addAction("RENAME_CMD", aAction); - aAction = ModuleBase_Tools::createAction(QIcon(":pictures/move.png"), + aAction = ModuleBase_Tools::createAction(QIcon(":pictures/move_to_end.png"), XGUI_Workshop::MOVE_TO_END_COMMAND, this); addAction("MOVE_CMD", aAction); + aAction = ModuleBase_Tools::createAction(QIcon(":pictures/move_to_end_split.png"), + XGUI_Workshop::MOVE_TO_END_SPLIT_COMMAND, this); + addAction("MOVE_SPLIT_CMD", aAction); + aAction = ModuleBase_Tools::createAction(QIcon(":pictures/clean_history.png"), tr("Clean history"), aDesktop); addAction("CLEAN_HISTORY_CMD", aAction); @@ -109,11 +114,9 @@ void XGUI_ContextMenuMgr::createActions() aAction = ModuleBase_Tools::createAction(QIcon(""), tr("Deflection..."), aDesktop); addAction("DEFLECTION_CMD", aAction); -#ifdef USE_TRANSPARENCY aAction = ModuleBase_Tools::createAction(QIcon(":pictures/transparency.png"), tr("Transparency..."), aDesktop); addAction("TRANSPARENCY_CMD", aAction); -#endif aAction = ModuleBase_Tools::createAction(QIcon(":pictures/eye_pencil.png"), tr("Show"), aDesktop); addAction("SHOW_CMD", aAction); @@ -137,6 +140,14 @@ void XGUI_ContextMenuMgr::createActions() aDesktop); addAction("WIREFRAME_CMD", aAction); + aAction = ModuleBase_Tools::createAction(QIcon(":pictures/iso_lines.png"), tr("Define Isos..."), + aDesktop); + addAction("ISOLINES_CMD", aAction); + + aAction = ModuleBase_Tools::createAction(QIcon(), tr("Show Isos..."), aDesktop); + aAction->setCheckable(true); + addAction("SHOW_ISOLINES_CMD", aAction); + mySeparator1 = ModuleBase_Tools::createAction(QIcon(), "", aDesktop); mySeparator1->setSeparator(true); @@ -146,32 +157,25 @@ void XGUI_ContextMenuMgr::createActions() mySeparator3 = ModuleBase_Tools::createAction(QIcon(), "", aDesktop); mySeparator3->setSeparator(true); - //mySelectActions = new QActionGroup(this); - //mySelectActions->setExclusive(true); - aAction = ModuleBase_Tools::createAction(QIcon(":pictures/vertex.png"), tr("Vertices"), aDesktop, this, SLOT(onShapeSelection(bool))); aAction->setCheckable(true); addAction("SELECT_VERTEX_CMD", aAction); - //mySelectActions->addAction(aAction); aAction = ModuleBase_Tools::createAction(QIcon(":pictures/edge.png"), tr("Edges"), aDesktop, this, SLOT(onShapeSelection(bool))); aAction->setCheckable(true); addAction("SELECT_EDGE_CMD", aAction); - //mySelectActions->addAction(aAction); aAction = ModuleBase_Tools::createAction(QIcon(":pictures/face.png"), tr("Faces"), aDesktop, this, SLOT(onShapeSelection(bool))); aAction->setCheckable(true); addAction("SELECT_FACE_CMD", aAction); - //mySelectActions->addAction(aAction); aAction = ModuleBase_Tools::createAction(QIcon(":pictures/result.png"), tr("Results"), aDesktop, this, SLOT(onResultSelection(bool))); aAction->setCheckable(true); addAction("SELECT_RESULT_CMD", aAction); - //mySelectActions->addAction(aAction); aAction->setChecked(true); @@ -209,6 +213,14 @@ void XGUI_ContextMenuMgr::createActions() tr("Move out after the folder"), aDesktop); addAction("ADD_OUT_FOLDER_AFTER_CMD", aAction); + aAction = ModuleBase_Tools::createAction(QIcon(":pictures/normal-view-inversed.png"), + tr("Set view by inverted normal to face"), aDesktop); + addAction("SET_VIEW_INVERTEDNORMAL_CMD", aAction); + + aAction = ModuleBase_Tools::createAction(QIcon(":pictures/normal-view.png"), + tr("Set view by normal to face"), aDesktop); + addAction("SET_VIEW_NORMAL_CMD", aAction); + buildObjBrowserMenu(); buildViewerMenu(); } @@ -298,6 +310,9 @@ void XGUI_ContextMenuMgr::updateObjectBrowserMenu() //Process Feature if (aSelected == 1) { // single selection ObjectPtr aObject = aObjects.first(); + ResultPtr aResult; + if (hasResult) + aResult = std::dynamic_pointer_cast(aObject); if (aObject) { if (hasResult && myWorkshop->canBeShaded(aObject)) { XGUI_Displayer::DisplayMode aMode = aDisplayer->displayMode(aObject); @@ -308,10 +323,12 @@ void XGUI_ContextMenuMgr::updateObjectBrowserMenu() action("WIREFRAME_CMD")->setEnabled(true); action("SHADING_CMD")->setEnabled(true); } + action("SHOW_ISOLINES_CMD")->setEnabled(true); + action("SHOW_ISOLINES_CMD")->setChecked(ModelAPI_Tools::isShownIsoLines(aResult)); + action("ISOLINES_CMD")->setEnabled(true); } if (!hasFeature) { - bool aHasSubResults = ModelAPI_Tools::hasSubResults( - std::dynamic_pointer_cast(aObject)); + bool aHasSubResults = ModelAPI_Tools::hasSubResults(aResult); if (aHasSubResults) { action("HIDE_CMD")->setEnabled(true); action("SHOW_CMD")->setEnabled(true); @@ -326,8 +343,10 @@ void XGUI_ContextMenuMgr::updateObjectBrowserMenu() if (!(hasParameter || hasFeature)) action("SHOW_ONLY_CMD")->setEnabled(true); } - else if (hasFeature && myWorkshop->canMoveFeature()) + else if (hasFeature && myWorkshop->canMoveFeature()) { action("MOVE_CMD")->setEnabled(true); + action("MOVE_SPLIT_CMD")->setEnabled(true); + } if( aMgr->activeDocument() == aObject->document() ) { @@ -338,7 +357,7 @@ void XGUI_ContextMenuMgr::updateObjectBrowserMenu() } } // end single selection - } else { // multiselection + } else { // multi-selection // parameter is commented because the actions are not in the list of result parameter actions if (hasResult /*&& (!hasParameter)*/) { action("SHOW_CMD")->setEnabled(true); @@ -346,8 +365,14 @@ void XGUI_ContextMenuMgr::updateObjectBrowserMenu() action("SHOW_ONLY_CMD")->setEnabled(true); action("SHADING_CMD")->setEnabled(true); action("WIREFRAME_CMD")->setEnabled(true); + action("SHOW_ISOLINES_CMD")->setEnabled(true); + action("ISOLINES_CMD")->setEnabled(true); + } + if (hasFeature && myWorkshop->canMoveFeature()) { + action("MOVE_CMD")->setEnabled(true); + action("MOVE_SPLIT_CMD")->setEnabled(true); } - } // end multiselection + } // end multi-selection // Check folder management commands state if only features are selected if ((!hasResult) && hasFeature && (!hasParameter) && (!hasCompositeOwner) && @@ -446,7 +471,7 @@ void XGUI_ContextMenuMgr::updateObjectBrowserMenu() break; } if (!hasCompositeOwner && allActive ) { - if (hasFeature || hasParameter) + if (hasResult || hasFeature || hasParameter) // #2924 results can be erased action("DELETE_CMD")->setEnabled(true); } if (!hasCompositeOwner && allActive && (hasFeature|| hasParameter)) @@ -468,7 +493,7 @@ void XGUI_ContextMenuMgr::updateObjectBrowserMenu() } } if (aDeactivate) { - // If at leas a one objec can not be edited then Show/Hide has to be disabled + // If at leas a one object 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); @@ -476,9 +501,7 @@ void XGUI_ContextMenuMgr::updateObjectBrowserMenu() action("COLOR_CMD")->setEnabled(myWorkshop->canChangeProperty("COLOR_CMD")); action("DEFLECTION_CMD")->setEnabled(myWorkshop->canChangeProperty("DEFLECTION_CMD")); -#ifdef USE_TRANSPARENCY action("TRANSPARENCY_CMD")->setEnabled(myWorkshop->canChangeProperty("TRANSPARENCY_CMD")); -#endif #ifdef _DEBUG #ifdef TINSPECTOR action("TINSPECTOR_VIEW")->setEnabled(true); @@ -504,16 +527,23 @@ void XGUI_ContextMenuMgr::updateViewerMenu() bool isVisible = false; bool isShading = false; bool canBeShaded = false; + bool hasPlanar = false; ObjectPtr aObject; foreach(ModuleBase_ViewerPrsPtr aPrs, aPrsList) { aObject = aPrs->object(); - ResultPtr aRes = std::dynamic_pointer_cast(aObject); - if (aRes && aRes->isDisplayed()) { + if (!aObject.get()) + continue; + GeomShapePtr aShape = aPrs->shape(); + if (aObject->isDisplayed()) { isVisible = true; canBeShaded = myWorkshop->displayer()->canBeShaded(aObject); isShading = (myWorkshop->displayer()->displayMode(aObject) == XGUI_Displayer::Shading); - break; + } + if (aShape.get()) { + if (aShape->isPlanar()) { + hasPlanar = true; + } } } if (isVisible) { @@ -526,11 +556,23 @@ void XGUI_ContextMenuMgr::updateViewerMenu() action("WIREFRAME_CMD")->setEnabled(true); action("SHADING_CMD")->setEnabled(true); } + action("ISOLINES_CMD")->setEnabled(true); + + if (aPrsList.size() == 1) { + ResultPtr aResult = std::dynamic_pointer_cast(aObject); + if (aResult.get()) { + action("SHOW_ISOLINES_CMD")->setEnabled(true); + action("SHOW_ISOLINES_CMD")->setChecked(ModelAPI_Tools::isShownIsoLines(aResult)); + } + } } action("SHOW_ONLY_CMD")->setEnabled(true); action("HIDE_CMD")->setEnabled(true); } else action("SHOW_CMD")->setEnabled(true); + + action("SET_VIEW_NORMAL_CMD")->setEnabled(hasPlanar); + action("SET_VIEW_INVERTEDNORMAL_CMD")->setEnabled(hasPlanar); } //issue #2159 Hide all incomplete behavior #ifdef HAVE_SALOME @@ -582,10 +624,8 @@ void XGUI_ContextMenuMgr::updateViewerMenu() if (myWorkshop->canChangeProperty("DEFLECTION_CMD")) action("DEFLECTION_CMD")->setEnabled(true); -#ifdef USE_TRANSPARENCY if (myWorkshop->canChangeProperty("TRANSPARENCY_CMD")) action("TRANSPARENCY_CMD")->setEnabled(true); -#endif action("DELETE_CMD")->setEnabled(true); } @@ -618,10 +658,10 @@ void XGUI_ContextMenuMgr::buildObjBrowserMenu() aList.append(action("RENAME_CMD")); aList.append(action("COLOR_CMD")); aList.append(action("DEFLECTION_CMD")); -#ifdef USE_TRANSPARENCY aList.append(action("TRANSPARENCY_CMD")); -#endif aList.append(action("SHOW_FEATURE_CMD")); + aList.append(mySeparator2); + aList.append(action("DELETE_CMD")); myObjBrowserMenus[ModelAPI_ResultConstruction::group()] = aList; //------------------------------------- @@ -638,10 +678,12 @@ void XGUI_ContextMenuMgr::buildObjBrowserMenu() aList.append(action("RENAME_CMD")); aList.append(action("COLOR_CMD")); aList.append(action("DEFLECTION_CMD")); -#ifdef USE_TRANSPARENCY aList.append(action("TRANSPARENCY_CMD")); -#endif + aList.append(action("SHOW_ISOLINES_CMD")); + aList.append(action("ISOLINES_CMD")); aList.append(action("SHOW_FEATURE_CMD")); + aList.append(mySeparator3); + aList.append(action("DELETE_CMD")); myObjBrowserMenus[ModelAPI_ResultBody::group()] = aList; // Group menu myObjBrowserMenus[ModelAPI_ResultGroup::group()] = aList; @@ -654,6 +696,7 @@ void XGUI_ContextMenuMgr::buildObjBrowserMenu() aList.append(action("RENAME_CMD")); aList.append(action("SHOW_RESULTS_CMD")); aList.append(action("MOVE_CMD")); + aList.append(action("MOVE_SPLIT_CMD")); aList.append(mySeparator1); aList.append(action("INSERT_FOLDER_CMD")); aList.append(action("ADD_TO_FOLDER_BEFORE_CMD")); @@ -679,20 +722,28 @@ void XGUI_ContextMenuMgr::buildObjBrowserMenu() aList.append(action("DELETE_CMD")); myObjBrowserMenus[ModelAPI_Folder::group()] = aList; + //--------------------------------------- + // Step objects menu + aList.clear(); + aList.append(action("SHOW_CMD")); + aList.append(action("HIDE_CMD")); + aList.append(action("SHOW_ONLY_CMD")); + myObjBrowserMenus[ModelAPI_ResultField::ModelAPI_FieldStep::group()] = aList; } void XGUI_ContextMenuMgr::buildViewerMenu() { QActionsList aList; // Result construction menu - aList.append(action("HIDE_CMD")); - aList.append(action("SHOW_ONLY_CMD")); - aList.append(mySeparator1); aList.append(action("COLOR_CMD")); aList.append(action("DEFLECTION_CMD")); -#ifdef USE_TRANSPARENCY aList.append(action("TRANSPARENCY_CMD")); -#endif + aList.append(mySeparator3); + aList.append(action("SET_VIEW_NORMAL_CMD")); + aList.append(action("SET_VIEW_INVERTEDNORMAL_CMD")); + aList.append(mySeparator1); + aList.append(action("SHOW_ONLY_CMD")); + aList.append(action("HIDE_CMD")); myViewerMenu[ModelAPI_ResultConstruction::group()] = aList; // Result part menu myViewerMenu[ModelAPI_ResultPart::group()] = aList; @@ -701,20 +752,27 @@ void XGUI_ContextMenuMgr::buildViewerMenu() aList.clear(); aList.append(action("WIREFRAME_CMD")); aList.append(action("SHADING_CMD")); - aList.append(mySeparator1); - aList.append(action("HIDE_CMD")); - aList.append(action("SHOW_ONLY_CMD")); aList.append(mySeparator2); aList.append(action("COLOR_CMD")); aList.append(action("DEFLECTION_CMD")); -#ifdef USE_TRANSPARENCY aList.append(action("TRANSPARENCY_CMD")); -#endif + aList.append(action("SHOW_ISOLINES_CMD")); + aList.append(action("ISOLINES_CMD")); + aList.append(mySeparator3); + aList.append(action("SET_VIEW_NORMAL_CMD")); + aList.append(action("SET_VIEW_INVERTEDNORMAL_CMD")); + aList.append(mySeparator1); + aList.append(action("SHOW_ONLY_CMD")); + aList.append(action("HIDE_CMD")); myViewerMenu[ModelAPI_ResultBody::group()] = aList; // Group menu myViewerMenu[ModelAPI_ResultGroup::group()] = aList; myViewerMenu[ModelAPI_ResultField::group()] = aList; //------------------------------------- + // Step objects menu + aList.clear(); + aList.append(action("HIDE_CMD")); + myViewerMenu[ModelAPI_ResultField::ModelAPI_FieldStep::group()] = aList; } @@ -748,12 +806,13 @@ void XGUI_ContextMenuMgr::addObjBrowserMenu(QMenu* theMenu) const aActions.append(action("ADD_OUT_FOLDER_BEFORE_CMD")); aActions.append(action("ADD_OUT_FOLDER_AFTER_CMD")); aActions.append(mySeparator3); - //aActions.append(action("MOVE_CMD")); + aActions.append(action("MOVE_CMD")); + aActions.append(action("MOVE_SPLIT_CMD")); aActions.append(action("COLOR_CMD")); aActions.append(action("DEFLECTION_CMD")); -#ifdef USE_TRANSPARENCY aActions.append(action("TRANSPARENCY_CMD")); -#endif + aActions.append(action("SHOW_ISOLINES_CMD")); + aActions.append(action("ISOLINES_CMD")); aActions.append(action("CLEAN_HISTORY_CMD")); aActions.append(action("DELETE_CMD")); } @@ -802,16 +861,15 @@ void XGUI_ContextMenuMgr::addViewerMenu(QMenu* theMenu) const aActions = myViewerMenu[aName]; } } else if (aSelected > 1) { + aActions.append(action("COLOR_CMD")); + aActions.append(action("DEFLECTION_CMD")); + aActions.append(action("TRANSPARENCY_CMD")); + aActions.append(mySeparator1); aActions.append(action("SHOW_ONLY_CMD")); aActions.append(action("HIDE_CMD")); } // 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")); -#ifdef USE_TRANSPARENCY - aActions.append(action("TRANSPARENCY_CMD")); -#endif theMenu->addActions(aActions); QMap aMenuActions;