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 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 java.util.ArrayList; import jetbrains.mps.smodel.action.ModelActions; import jetbrains.mps.smodel.action.DefaultSChildSetter; public class PaletteElementsCreationActionGroup implements PaletteActionGroup { private SubstituteInfo mySubstituteInfo; private EditorContext myEditorContext; private _FunctionTypes._void_P3_E0<? super SNode, ? super Integer, ? super Integer> myCallback; private DiagramCell myDiagramCell; private Icon myIcon; public PaletteElementsCreationActionGroup(DiagramCell diagramCell, SNode container, SAbstractConcept childConcept, SContainmentLink containingLink, final _FunctionTypes._void_P3_E0<? super SNode, ? super Integer, ? super Integer> setNodePositionCallback) { myDiagramCell = diagramCell; myEditorContext = diagramCell.getContext(); myCallback = setNodePositionCallback; mySubstituteInfo = new CompositeSubstituteInfo(myEditorContext, new BasicCellContext(diagramCell.getSNode()), new SubstituteInfoPartExt[]{createNewDiagramNodeActions(container, childConcept, containingLink)}); myIcon = IconManager.getIcon(childConcept); } public PaletteElement[] getElements() { mySubstituteInfo.invalidateActions(); return ListSequence.fromList(((List<SubstituteAction>) mySubstituteInfo.getMatchingActions("", false))).select(new ISelector<SubstituteAction, PaletteElementsCreationAction>() { public PaletteElementsCreationAction select(SubstituteAction it) { return new PaletteElementsCreationAction(myDiagramCell, it, myCallback, myEditorContext); } }).toGenericArray(PaletteElementsCreationAction.class); } public boolean isPopup() { return true; } public Icon getIcon() { return myIcon; } public String getText() { return null; } private SubstituteInfoPartExt createNewDiagramNodeActions(final SNode container, SAbstractConcept childNodeConcept, final SContainmentLink containingLink) { return new SubstituteInfoPartExt() { public List<SubstituteAction> createActions(CellContext cellContext, EditorContext editorContext) { List<SubstituteAction> result = new ArrayList<SubstituteAction>(); for (SubstituteAction action : ListSequence.fromList(ModelActions.createChildNodeSubstituteActions(container, null, containingLink, null, new DefaultSChildSetter(containingLink), editorContext))) { result.add(action); } return result; } }; } }