-// Copyright (C) 2014-2021 CEA/DEN, EDF R&D
+// Copyright (C) 2014-2023 CEA, EDF
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
#include <QMainWindow>
#include <QModelIndex>
+#ifdef WIN32
+#pragma warning(disable : 4456) // for nested foreach
+#endif
+
XGUI_ContextMenuMgr::XGUI_ContextMenuMgr(XGUI_Workshop* theParent)
: QObject(theParent),
myWorkshop(theParent),
addAction("MOVE_SPLIT_CMD", anAction);
#endif
+ anAction = ModuleBase_Tools::createAction(QIcon(":pictures/recover.png"),
+ tr("Recover"), this);
+ addAction("RECOVER_CMD", anAction);
+
anAction = ModuleBase_Tools::createAction(QIcon(":pictures/clean_history.png"),
tr("Clean history"), aDesktop);
addAction("CLEAN_HISTORY_CMD", anAction);
aDesktop);
addAction("WIREFRAME_CMD", anAction);
+ anAction = ModuleBase_Tools::createAction(QIcon(":pictures/edges_dir.png"), tr("Show edges direction"),
+ aDesktop);
+ anAction->setCheckable(true);
+ addAction("SHOW_EDGES_DIRECTION_CMD", anAction);
+
anAction = ModuleBase_Tools::createAction(QIcon(":pictures/iso_lines.png"), tr("Define Isos..."),
aDesktop);
addAction("ISOLINES_CMD", anAction);
anAction->setCheckable(true);
addAction("SHOW_ISOLINES_CMD", anAction);
+ anAction = ModuleBase_Tools::createAction(QIcon(), tr("Bring To Front"), aDesktop);
+ anAction->setCheckable(true);
+ addAction("BRING_TO_FRONT_CMD", anAction);
+
mySeparator1 = ModuleBase_Tools::createAction(QIcon(), "", aDesktop);
mySeparator1->setSeparator(true);
mySeparator3 = ModuleBase_Tools::createAction(QIcon(), "", aDesktop);
mySeparator3->setSeparator(true);
+ mySeparator4 = ModuleBase_Tools::createAction(QIcon(), "", aDesktop);
+ mySeparator4->setSeparator(true);
+
anAction = ModuleBase_Tools::createAction(QIcon(":pictures/vertex.png"), tr("Vertices"), aDesktop,
this, SLOT(onShapeSelection(bool)));
anAction->setCheckable(true);
bool hasCompositeOwner = false;
bool hasResultInHistory = false;
bool hasFolder = false;
+ bool hasGroupsOnly = false;
ModuleBase_Tools::checkObjects(aObjects, hasResult, hasFeature, hasParameter,
- hasCompositeOwner, hasResultInHistory, hasFolder);
+ hasCompositeOwner, hasResultInHistory, hasFolder, hasGroupsOnly);
//Process Feature
if (aSelected == 1) { // single selection
ObjectPtr aObject = aObjects.first();
action("WIREFRAME_CMD")->setEnabled(true);
action("SHADING_CMD")->setEnabled(true);
}
+ action("SHOW_EDGES_DIRECTION_CMD")->setEnabled(true);
+ action("SHOW_EDGES_DIRECTION_CMD")->setChecked(ModelAPI_Tools::isShowEdgesDirection(aResult));
+
+ action("BRING_TO_FRONT_CMD")->setEnabled(hasGroupsOnly);
+ action("BRING_TO_FRONT_CMD")->setChecked(ModelAPI_Tools::isBringToFront(aResult));
+
action("SHOW_ISOLINES_CMD")->setEnabled(true);
action("SHOW_ISOLINES_CMD")->setChecked(ModelAPI_Tools::isShownIsoLines(aResult));
action("ISOLINES_CMD")->setEnabled(true);
action("MOVE_SPLIT_CMD")->setEnabled(true);
}
#endif
+ if (hasFeature && aObject->document() != aMgr->moduleDocument() &&
+ aObject->document() == aMgr->activeDocument())
+ {
+ XGUI_OperationMgr* anOperationMgr = myWorkshop->operationMgr();
+ if (!anOperationMgr->hasOperation()) {
+ FeaturePtr aFeature = std::dynamic_pointer_cast<ModelAPI_Feature>(aObject);
+ std::list<std::shared_ptr<ModelAPI_Result> > aResults;
+ ModelAPI_Tools::getConcealedResults(aFeature, aResults);
+ if (!aResults.empty()) // check the feature conceals at least one result
+ action("RECOVER_CMD")->setEnabled(true);
+ }
+ }
if( aMgr->activeDocument() == aObject->document() )
{
action("SHOW_ONLY_CMD")->setEnabled(true);
action("SHADING_CMD")->setEnabled(true);
action("WIREFRAME_CMD")->setEnabled(true);
+ action("SHOW_EDGES_DIRECTION_CMD")->setEnabled(true);
+ action("BRING_TO_FRONT_CMD")->setEnabled(hasGroupsOnly);
action("SHOW_ISOLINES_CMD")->setEnabled(true);
action("ISOLINES_CMD")->setEnabled(true);
}
if (aResult.get()) {
action("SHOW_ISOLINES_CMD")->setEnabled(true);
action("SHOW_ISOLINES_CMD")->setChecked(ModelAPI_Tools::isShownIsoLines(aResult));
+
+ action("SHOW_EDGES_DIRECTION_CMD")->setEnabled(true);
+ action("SHOW_EDGES_DIRECTION_CMD")->setChecked(
+ ModelAPI_Tools::isShowEdgesDirection(aResult));
+
+ // Only enable the "Bring To Front" command for Groups
+ ResultGroupPtr aGroup = std::dynamic_pointer_cast<ModelAPI_ResultGroup>(aResult);
+ action("BRING_TO_FRONT_CMD")->setEnabled(aGroup.get() != NULL);
+ action("BRING_TO_FRONT_CMD")->setChecked(ModelAPI_Tools::isBringToFront(aResult));
}
}
}
QActionsList aList;
+ //-------------------------------------
// Result construction menu
aList.append(action("SHOW_CMD"));
aList.append(action("HIDE_CMD"));
myObjBrowserMenus[ModelAPI_ResultConstruction::group()] = aList;
//-------------------------------------
- // Result body menu
+ // Result body/field/part menu
aList.clear();
aList.append(action("WIREFRAME_CMD"));
aList.append(action("SHADING_CMD"));
+ aList.append(action("SHOW_EDGES_DIRECTION_CMD"));
aList.append(mySeparator1); // this separator is not shown as this action is added after show only
// qt list container contains only one instance of the same action
aList.append(action("SHOW_CMD"));
aList.append(action("SHOW_FEATURE_CMD"));
aList.append(mySeparator3);
aList.append(action("DELETE_CMD"));
+ // Result body menu
myObjBrowserMenus[ModelAPI_ResultBody::group()] = aList;
- // Group menu
+ // Field menu
myObjBrowserMenus[ModelAPI_ResultField::group()] = aList;
// Result part menu
myObjBrowserMenus[ModelAPI_ResultPart::group()] = aList;
+ //-------------------------------------
+ // Group menu
aList.clear();
aList.append(action("WIREFRAME_CMD"));
aList.append(action("SHADING_CMD"));
- aList.append(mySeparator1); // this separator is not shown as this action is added after show only
- // qt list container contains only one instance of the same action
+ aList.append(action("SHOW_EDGES_DIRECTION_CMD"));
+ aList.append(mySeparator1);
+ aList.append(action("BRING_TO_FRONT_CMD"));
+ aList.append(mySeparator2);
aList.append(action("SHOW_CMD"));
aList.append(action("HIDE_CMD"));
aList.append(action("SHOW_ONLY_CMD"));
- aList.append(mySeparator2);
+ aList.append(mySeparator3);
aList.append(action("AUTOCOLOR_CMD"));
aList.append(action("RENAME_CMD"));
aList.append(action("COLOR_CMD"));
aList.append(action("SHOW_ISOLINES_CMD"));
aList.append(action("ISOLINES_CMD"));
aList.append(action("SHOW_FEATURE_CMD"));
- aList.append(mySeparator3);
+ aList.append(mySeparator4);
aList.append(action("DELETE_CMD"));
- // Group menu
myObjBrowserMenus[ModelAPI_ResultGroup::group()] = aList;
+
//-------------------------------------
// Feature menu
aList.clear();
aList.append(action("SHOW_RESULTS_CMD"));
aList.append(action("MOVE_CMD"));
aList.append(action("MOVE_SPLIT_CMD"));
+ aList.append(action("RECOVER_CMD"));
aList.append(mySeparator1);
aList.append(action("INSERT_FOLDER_CMD"));
aList.append(action("ADD_TO_FOLDER_BEFORE_CMD"));
aList.append(action("DELETE_CMD"));
myObjBrowserMenus[ModelAPI_Feature::group()] = aList;
+ //-------------------------------------
+ // Parameter menu
aList.clear();
aList.append(action("RENAME_CMD"));
aList.append(mySeparator1);
aList.append(action("CLEAN_HISTORY_CMD"));
aList.append(action("DELETE_CMD"));
myObjBrowserMenus[ModelAPI_ResultParameter::group()] = aList;
- //-------------------------------------
+ //-------------------------------------
+ // Folder menu
aList.clear();
aList.append(action("RENAME_CMD"));
aList.append(action("DELETE_CMD"));
void XGUI_ContextMenuMgr::buildViewerMenu()
{
QActionsList aList;
- // Result construction menu
+ // Result construction/part menu
aList.append(action("COLOR_CMD"));
aList.append(action("DEFLECTION_CMD"));
aList.append(action("TRANSPARENCY_CMD"));
aList.append(action("SHOW_ONLY_CMD"));
aList.append(action("HIDE_CMD"));
myViewerMenu[ModelAPI_ResultConstruction::group()] = aList;
- // Result part menu
myViewerMenu[ModelAPI_ResultPart::group()] = aList;
+
//-------------------------------------
// Result body menu
aList.clear();
aList.append(action("WIREFRAME_CMD"));
aList.append(action("SHADING_CMD"));
+ aList.append(action("SHOW_EDGES_DIRECTION_CMD"));
aList.append(mySeparator2);
aList.append(action("COLOR_CMD"));
aList.append(action("DEFLECTION_CMD"));
aList.append(action("SHOW_ONLY_CMD"));
aList.append(action("HIDE_CMD"));
myViewerMenu[ModelAPI_ResultBody::group()] = aList;
+ myViewerMenu[ModelAPI_ResultField::group()] = aList;
+
+ //-------------------------------------
// Group menu
+ aList.clear();
+ aList.append(action("WIREFRAME_CMD"));
+ aList.append(action("SHADING_CMD"));
+ aList.append(action("SHOW_EDGES_DIRECTION_CMD"));
+ aList.append(mySeparator1);
+ aList.append(action("BRING_TO_FRONT_CMD"));
+ aList.append(mySeparator2);
+ aList.append(action("COLOR_CMD"));
+ aList.append(action("DEFLECTION_CMD"));
+ aList.append(action("TRANSPARENCY_CMD"));
+ 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(mySeparator4);
+ aList.append(action("SHOW_ONLY_CMD"));
+ aList.append(action("HIDE_CMD"));
myViewerMenu[ModelAPI_ResultGroup::group()] = aList;
- myViewerMenu[ModelAPI_ResultField::group()] = aList;
+
//-------------------------------------
// Step objects menu
aList.clear();
} else if (aSelected > 1) {
anActions.append(action("WIREFRAME_CMD"));
anActions.append(action("SHADING_CMD"));
+ anActions.append(action("SHOW_EDGES_DIRECTION_CMD"));
anActions.append(mySeparator1);
+ anActions.append(action("BRING_TO_FRONT_CMD"));
+ anActions.append(mySeparator2);
anActions.append(action("SHOW_CMD"));
anActions.append(action("HIDE_CMD"));
anActions.append(action("SHOW_ONLY_CMD"));
- anActions.append(mySeparator2);
+ anActions.append(mySeparator3);
anActions.append(action("ADD_TO_FOLDER_BEFORE_CMD"));
anActions.append(action("ADD_TO_FOLDER_AFTER_CMD"));
anActions.append(action("ADD_OUT_FOLDER_BEFORE_CMD"));
anActions.append(action("ADD_OUT_FOLDER_AFTER_CMD"));
- anActions.append(mySeparator3);
+ anActions.append(mySeparator4);
anActions.append(action("MOVE_CMD"));
anActions.append(action("MOVE_SPLIT_CMD"));
anActions.append(action("COLOR_CMD"));