+
+void PartSet_MenuMgr::onActivatePart(bool)
+{
+ if (myModule->workshop()->currentOperation())
+ return;
+ QObjectPtrList aObjects = myModule->workshop()->selection()->selectedObjects();
+ if (aObjects.size() > 0) {
+ ObjectPtr aObj = aObjects.first();
+ ResultPartPtr aPart = std::dynamic_pointer_cast<ModelAPI_ResultPart>(aObj);
+ if (!aPart.get()) {
+ FeaturePtr aPartFeature = std::dynamic_pointer_cast<ModelAPI_Feature>(aObj);
+ if (aPartFeature.get() && (aPartFeature->getKind() == PartSetPlugin_Part::ID())) {
+ aPart = std::dynamic_pointer_cast<ModelAPI_ResultPart>(aPartFeature->firstResult());
+ }
+ }
+ if (aPart.get())
+ aPart->activate();
+ myModule->workshop()->updateCommandStatus();
+ }
+}
+
+void PartSet_MenuMgr::onActivatePartSet(bool)
+{
+ if (myModule->workshop()->currentOperation())
+ return;
+ activatePartSet();
+}
+
+void PartSet_MenuMgr::activatePartSet() const
+{
+ SessionPtr aMgr = ModelAPI_Session::get();
+ bool isNewTransaction = !aMgr->isOperation();
+ // activation may cause changes in current features in document, so it must be in transaction
+ if (isNewTransaction) aMgr->startOperation("Activation");
+ aMgr->setActiveDocument(aMgr->moduleDocument());
+ if (isNewTransaction) aMgr->finishOperation();
+
+ myModule->workshop()->updateCommandStatus();
+}
+
+void PartSet_MenuMgr::grantedOperationIds(ModuleBase_Operation* theOperation,
+ QStringList& theIds) const
+{
+ if (PartSet_SketcherMgr::isSketchOperation(theOperation)) {
+ theIds.append(tr("Detach"));
+ theIds.append(tr("Auxiliary"));
+ }
+}
+
+void PartSet_MenuMgr::onEdit(bool)
+{
+ QObjectPtrList aObjects = myModule->workshop()->selection()->selectedObjects();
+ FeaturePtr aFeature = std::dynamic_pointer_cast<ModelAPI_Feature>(aObjects.first());
+ if (aFeature == NULL) {
+ ResultParameterPtr aParam =
+ std::dynamic_pointer_cast<ModelAPI_ResultParameter>(aObjects.first());
+ if (aParam.get() != NULL) {
+ aFeature = ModelAPI_Feature::feature(aParam);
+ }
+ }
+ if (aFeature.get() != NULL)
+ 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) {
+ SessionPtr aMgr = ModelAPI_Session::get();
+ if (aMgr->activeDocument() != aMgr->moduleDocument())
+ activatePartSet();
+ }
+ return QObject::eventFilter(theObj, theEvent);
+}
\ No newline at end of file