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;
}
};
}
}