#include <ModuleBase_Operation.h>
#include <ModuleBase_OperationAction.h>
#include <ModuleBase_OperationFeature.h>
+#include <ModuleBase_ViewerPrs.h>
+#include <ModuleBase_Tools.h>
#include <XGUI_ModuleConnector.h>
#include <XGUI_Workshop.h>
#include <ModelAPI_ResultPart.h>
#include <ModelAPI_ResultParameter.h>
+#include <QMainWindow>
#include <QAction>
#include <QMenu>
#include <QEvent>
{
QAction* aAction;
- aAction = new QAction(tr("Auxiliary"), this);
+ QWidget* aParent = myModule->workshop()->desktop();
+ aAction = ModuleBase_Tools::createAction(QIcon(), tr("Auxiliary"), aParent);
aAction->setCheckable(true);
addAction("AUXILIARY_CMD", aAction);
- aAction = new QAction(QIcon(":icons/activate.png"), tr("Activate"), this);
- connect(aAction, SIGNAL(triggered(bool)), this, SLOT(onActivatePart(bool)));
+ aAction = ModuleBase_Tools::createAction(QIcon(":icons/activate.png"), tr("Activate"), aParent,
+ this, SLOT(onActivatePart(bool)));
myActions["ACTIVATE_PART_CMD"] = aAction;
// Activate PartSet
- aAction = new QAction(QIcon(":icons/activate.png"), tr("Activate"), this);
- connect(aAction, SIGNAL(triggered(bool)), this, SLOT(onActivatePartSet(bool)));
+ aAction = ModuleBase_Tools::createAction(QIcon(":icons/activate.png"), tr("Activate"), aParent,
+ this, SLOT(onActivatePartSet(bool)));
myActions["ACTIVATE_PARTSET_CMD"] = aAction;
- aAction = new QAction(QIcon(":icons/edit.png"), tr("Edit..."), this);
- connect(aAction, SIGNAL(triggered(bool)), this, SLOT(onEdit(bool)));
+ aAction = ModuleBase_Tools::createAction(QIcon(":icons/edit.png"), tr("Edit..."), aParent,
+ this, SLOT(onEdit(bool)));
myActions["EDIT_CMD"] = aAction;
-
- aAction = new QAction(QIcon(), tr("Select parent feature"), this);
- aAction->setCheckable(false);
- connect(aAction, SIGNAL(triggered(bool)), this, SLOT(onSelectParentFeature()));
- myActions["SELECT_PARENT_CMD"] = aAction;
}
}
}
-bool PartSet_MenuMgr::addViewerMenu(QMenu* theMenu, const QMap<QString, QAction*>& theStdActions) const
+bool PartSet_MenuMgr::addViewerMenu(const QMap<QString, QAction*>& theStdActions,
+ QWidget* theParent,
+ QMap<int, QAction*>& theMenuActions) const
{
+ int anIndex = 0;
+
ModuleBase_Operation* anOperation = myModule->workshop()->currentOperation();
if (!PartSet_SketcherMgr::isSketchOperation(anOperation) &&
!PartSet_SketcherMgr::isNestedSketchOperation(anOperation))
bool hasAttribute = false;
bool hasFeature = false;
- QList<ModuleBase_ViewerPrs> aPrsList = aSelection->getSelected(ModuleBase_ISelection::Viewer);
- TopoDS_Shape aShape;
- ResultPtr aResult;
- FeaturePtr aFeature;
- foreach(ModuleBase_ViewerPrs aPrs, aPrsList) {
- aResult = std::dynamic_pointer_cast<ModelAPI_Result>(aPrs.object());
- if (aResult.get() != NULL) {
- aShape = aPrs.shape();
- if (aShape.IsEqual(aResult->shape()->impl<TopoDS_Shape>()))
- hasFeature = true;
- else
- hasAttribute = true;
- } else {
- aFeature = std::dynamic_pointer_cast<ModelAPI_Feature>(aPrs.object());
- hasFeature = (aFeature.get() != NULL);
+ QList<ModuleBase_ViewerPrsPtr> aPrsList = aSelection->getSelected(ModuleBase_ISelection::Viewer);
+ if (aPrsList.size() > 1) {
+ hasFeature = true;
+ } else if (aPrsList.size() == 1) {
+ ResultPtr aResult;
+ FeaturePtr aFeature;
+ foreach(ModuleBase_ViewerPrsPtr aPrs, aPrsList) {
+ aResult = std::dynamic_pointer_cast<ModelAPI_Result>(aPrs->object());
+ if (aResult.get() != NULL) {
+ const GeomShapePtr& aShape = aPrs->shape();
+ if (aShape.get() && aShape->isEqual(aResult->shape()))
+ hasFeature = true;
+ else
+ hasAttribute = true;
+ } else {
+ aFeature = std::dynamic_pointer_cast<ModelAPI_Feature>(aPrs->object());
+ hasFeature = (aFeature.get() != NULL);
+ }
}
- }
- if (aPrsList.size() == 1) {
- TopoDS_Shape aShape = aPrsList.first().shape();
- if ((!aShape.IsNull()) && aShape.ShapeType() == TopAbs_VERTEX) {
+ const GeomShapePtr& aShape = aPrsList.first()->shape();
+ if (aShape.get() && !aShape->isNull() && aShape->shapeType() == GeomAPI_Shape::VERTEX) {
// Find 2d coordinates
FeaturePtr aSketchFea = myModule->sketchMgr()->activeSketch();
if (aSketchFea->getKind() == SketchPlugin_Sketch::ID()) {
- gp_Pnt aPnt = BRep_Tool::Pnt(TopoDS::Vertex(aShape));
+ const TopoDS_Shape& aTDShape = aShape->impl<TopoDS_Shape>();
+ gp_Pnt aPnt = BRep_Tool::Pnt(TopoDS::Vertex(aTDShape));
std::shared_ptr<GeomAPI_Pnt> aPnt3d(new GeomAPI_Pnt(aPnt.X(), aPnt.Y(), aPnt.Z()));
std::shared_ptr<GeomAPI_Pnt2d> aSelPnt = PartSet_Tools::convertTo2D(aSketchFea, aPnt3d);
// Find coincident in these coordinates
- ObjectPtr aObj = aPrsList.first().object();
+ ObjectPtr aObj = aPrsList.first()->object();
FeaturePtr aFeature = ModelAPI_Feature::feature(aObj);
FeaturePtr aCoincident = PartSet_Tools::findFirstCoincidence(aFeature, aSelPnt);
// If we have coincidence then add Detach menu
if (aCoincident.get() != NULL) {
+ QList<FeaturePtr> aCoins;
mySelectedFeature = aCoincident;
- PartSet_Tools::findCoincidences(mySelectedFeature, myCoinsideLines,
+ PartSet_Tools::findCoincidences(mySelectedFeature, myCoinsideLines, aCoins,
SketchPlugin_ConstraintCoincidence::ENTITY_A());
- PartSet_Tools::findCoincidences(mySelectedFeature, myCoinsideLines,
+ PartSet_Tools::findCoincidences(mySelectedFeature, myCoinsideLines, aCoins,
SketchPlugin_ConstraintCoincidence::ENTITY_B());
if (myCoinsideLines.size() > 0) {
aIsDetach = true;
- QMenu* aSubMenu = theMenu->addMenu(tr("Detach"));
+ QMenu* aSubMenu = new QMenu(tr("Detach"), theParent);
+ theMenuActions[anIndex++] = aSubMenu->menuAction();
QAction* aAction;
int i = 0;
foreach (FeaturePtr aCoins, myCoinsideLines) {
}
}
}
- if ((!aIsDetach) && hasFeature) {
- theMenu->addAction(theStdActions["DELETE_CMD"]);
+ if (!hasAttribute) {
+ bool isAuxiliary;
+ if (canSetAuxiliary(isAuxiliary)) {
+ QAction* anAction = action("AUXILIARY_CMD");
+ theMenuActions[anIndex++] = anAction;
+ anAction->setChecked(isAuxiliary);
+ }
}
- if (hasAttribute)
- return true;
- bool isAuxiliary;
- if (canSetAuxiliary(isAuxiliary)) {
- QAction* anAction = action("AUXILIARY_CMD");
- theMenu->addAction(anAction);
- anAction->setChecked(isAuxiliary);
+
+ if (!aIsDetach && hasFeature) {
+ // Delete item should be the last in the list of actions
+ theMenuActions[1000] = theStdActions["DELETE_CMD"];
}
+
return true;
}
anOpMgr->startOperation(anOpAction);
}
- myModule->sketchMgr()->storeSelection();
-
if (anObjects.size() > 0) {
QObjectPtrList::const_iterator anIt = anObjects.begin(), aLast = anObjects.end();
for (; anIt != aLast; anIt++) {
anOpMgr->commitOperation();
Events_Loop::loop()->flush(Events_Loop::eventByName(EVENT_OBJECT_UPDATED));
- myModule->sketchMgr()->restoreSelection();
}
bool PartSet_MenuMgr::canSetAuxiliary(bool& theValue) const
}
if (aPart.get())
aPart->activate();
+ myModule->workshop()->updateCommandStatus();
}
}
if (isNewTransaction) aMgr->startOperation("Activation");
aMgr->setActiveDocument(aMgr->moduleDocument());
if (isNewTransaction) aMgr->finishOperation();
+
+ myModule->workshop()->updateCommandStatus();
}
void PartSet_MenuMgr::grantedOperationIds(ModuleBase_Operation* theOperation,
myModule->editFeature(aFeature);
}
-void PartSet_MenuMgr::onSelectParentFeature()
-{
- QObjectPtrList aObjects = myModule->workshop()->selection()->selectedObjects();
- if (aObjects.size() != 1)
- return;
-
- SessionPtr aMgr = ModelAPI_Session::get();
- ResultPtr aResult = std::dynamic_pointer_cast<ModelAPI_Result>( aObjects.first() );
- if( !aResult.get() )
- return;
-
- FeaturePtr aParentFeature = aResult->document()->feature( aResult );
- QObjectPtrList aSelection;
- aSelection.append( aParentFeature );
- myModule->workshop()->selection()->setSelectedObjects( aSelection );
-}
-
bool PartSet_MenuMgr::eventFilter(QObject* theObj, QEvent* theEvent)
{
if (theEvent->type() == QEvent::MouseButtonDblClick) {