package jetbrains.mps.lang.editor.diagram.runtime.jetpad.palette.impl; /*Generated by MPS */ import jetbrains.mps.lang.editor.diagram.runtime.jetpad.palette.openapi.PaletteActionGroup; import jetbrains.mps.openapi.editor.cells.SubstituteInfo; import jetbrains.mps.openapi.editor.EditorContext; import jetbrains.mps.baseLanguage.closures.runtime._FunctionTypes; import org.jetbrains.mps.openapi.model.SNode; import jetbrains.mps.nodeEditor.cells.jetpad.DiagramCell; import javax.swing.Icon; import jetbrains.mps.util.annotation.ToRemove; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SNodeOperations; import jetbrains.mps.smodel.adapter.MetaAdapterByDeclaration; import org.jetbrains.mps.openapi.language.SAbstractConcept; import org.jetbrains.mps.openapi.language.SContainmentLink; import jetbrains.mps.nodeEditor.cellMenu.CompositeSubstituteInfo; import jetbrains.mps.nodeEditor.cellMenu.BasicCellContext; import jetbrains.mps.nodeEditor.cellMenu.SubstituteInfoPartExt; import jetbrains.mps.ide.icons.IconManager; import jetbrains.mps.lang.editor.diagram.runtime.jetpad.palette.openapi.PaletteElement; import jetbrains.mps.internal.collections.runtime.ListSequence; import java.util.List; import jetbrains.mps.openapi.editor.cells.SubstituteAction; import jetbrains.mps.internal.collections.runtime.ISelector; import jetbrains.mps.nodeEditor.cellMenu.CellContext; import jetbrains.mps.smodel.action.AbstractNodeSubstituteAction; import org.jetbrains.annotations.Nullable; import jetbrains.mps.smodel.action.NodeFactoryManager; import java.util.Collections; import jetbrains.mps.smodel.action.NodeSubstituteActionWrapper; public class PaletteConnectorCreationActionGroup implements PaletteActionGroup { private SubstituteInfo mySubstituteInfo; private EditorContext myEditorContext; private _FunctionTypes._return_P4_E0<? extends Boolean, ? super SNode, ? super Object, ? super SNode, ? super Object> myCanCreateConnectorCallback; private _FunctionTypes._void_P5_E0<? super SNode, ? super SNode, ? super Object, ? super SNode, ? super Object> mySetConnectorCallBack; private DiagramCell myDiagramCell; private Icon myIcon; @Deprecated @ToRemove(version = 3.5) public PaletteConnectorCreationActionGroup(DiagramCell diagramCell, SNode container, SNode childNodeConcept, SNode containingLink, final _FunctionTypes._return_P4_E0<? extends Boolean, ? super SNode, ? super Object, ? super SNode, ? super Object> canCreateConnector, final _FunctionTypes._void_P5_E0<? super SNode, ? super SNode, ? super Object, ? super SNode, ? super Object> setConnectorCallback) { this(diagramCell, container, SNodeOperations.asSConcept(childNodeConcept), MetaAdapterByDeclaration.getContainmentLink(containingLink), canCreateConnector, setConnectorCallback); } public PaletteConnectorCreationActionGroup(DiagramCell diagramCell, SNode container, SAbstractConcept childConcept, SContainmentLink containingLink, final _FunctionTypes._return_P4_E0<? extends Boolean, ? super SNode, ? super Object, ? super SNode, ? super Object> canCreateConnector, final _FunctionTypes._void_P5_E0<? super SNode, ? super SNode, ? super Object, ? super SNode, ? super Object> setConnectorCallback) { myDiagramCell = diagramCell; myEditorContext = diagramCell.getContext(); myCanCreateConnectorCallback = canCreateConnector; mySetConnectorCallBack = setConnectorCallback; mySubstituteInfo = new CompositeSubstituteInfo(myEditorContext, new BasicCellContext(diagramCell.getSNode()), new SubstituteInfoPartExt[]{createNewDiagramConnectorActions(container, childConcept, containingLink, canCreateConnector, setConnectorCallback)}); myIcon = IconManager.getIcon(childConcept); } public PaletteElement[] getElements() { mySubstituteInfo.invalidateActions(); return ListSequence.fromList(((List<SubstituteAction>) mySubstituteInfo.getMatchingActions("", false))).select(new ISelector<SubstituteAction, PaletteConnectorCreationAction>() { public PaletteConnectorCreationAction select(SubstituteAction it) { return new PaletteConnectorCreationAction(myDiagramCell, it, myCanCreateConnectorCallback, mySetConnectorCallBack, myEditorContext); } }).toGenericArray(PaletteConnectorCreationAction.class); } public boolean isPopup() { return true; } public Icon getIcon() { return myIcon; } public String getText() { return null; } public SubstituteInfoPartExt createNewDiagramConnectorActions(final SNode container, final SAbstractConcept childNodeConcept, final SContainmentLink containingLink, final _FunctionTypes._return_P4_E0<? extends Boolean, ? super SNode, ? super Object, ? super SNode, ? super Object> canCreateConnector, final _FunctionTypes._void_P5_E0<? super SNode, ? super SNode, ? super Object, ? super SNode, ? super Object> setConnectorCallback) { // TMP solution: manually creating instance of connection instead of using // ModelActions.createChildNodeSubstituteActions() because of mbeddr reqirements: // hiding text-specific connection substitute actions from the diagram return new SubstituteInfoPartExt() { public List<SubstituteAction> createActions(CellContext cellContext, final EditorContext editorContext) { AbstractNodeSubstituteAction action = new AbstractNodeSubstituteAction(childNodeConcept.getDeclarationNode(), childNodeConcept, container) { @Override protected SNode doSubstitute(@Nullable EditorContext context, String string) { SNode result = NodeFactoryManager.createNode(childNodeConcept, null, container, SNodeOperations.getModel(container)); ListSequence.fromList(SNodeOperations.getChildren(container, containingLink)).addElement(result); return result; } }; return Collections.<SubstituteAction>singletonList(new NodeSubstituteActionWrapper(action)); } }; } }