+
+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()) {
+ activatePart(aPart);
+ myModule->workshop()->updateCommandStatus();
+ }
+ }
+}
+
+void PartSet_MenuMgr::activatePart(ResultPartPtr thePart) const
+{
+ bool isFirstLoad = !thePart->partDoc().get();
+ thePart->activate();
+ if (isFirstLoad) {
+ XGUI_Workshop* aWorkshop = myModule->getWorkshop();
+ XGUI_ObjectsBrowser* aObjBrowser = aWorkshop->objectBrowser();
+ DocumentPtr aDoc = thePart->partDoc();
+ std::list<bool> aStates;
+ aDoc->restoreNodesState(aStates);
+ aObjBrowser->setStateForDoc(aDoc, aStates);
+ }
+}
+
+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;
+ foreach(ObjectPtr aObj, aObjects) {
+ aFeature = std::dynamic_pointer_cast<ModelAPI_Feature>(aObj);
+ if (aFeature.get())
+ break;
+ }
+ if (aFeature.get() == NULL) {
+ ResultParameterPtr aParam;
+ foreach(ObjectPtr aObj, aObjects) {
+ aParam = std::dynamic_pointer_cast<ModelAPI_ResultParameter>(aObj);
+ if (aParam.get())
+ break;
+ }
+ if (aParam.get() != NULL)
+ aFeature = ModelAPI_Feature::feature(aParam);
+ }
+ if (aFeature.get() != NULL)
+ myModule->editFeature(aFeature);
+}
+
+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