package jetbrains.mps.lang.editor.diagram.runtime.jetpad.palette.impl;
/*Generated by MPS */
import jetbrains.mps.lang.editor.diagram.runtime.jetpad.palette.openapi.PaletteToggleAction;
import jetbrains.mps.nodeEditor.cells.jetpad.DiagramCell;
import jetbrains.mps.openapi.editor.cells.SubstituteAction;
import javax.swing.Icon;
import jetbrains.jetpad.projectional.view.ViewTrait;
import org.jetbrains.mps.openapi.model.SNode;
import jetbrains.mps.lang.smodel.generator.smodelAdapter.SNodeOperations;
import jetbrains.mps.smodel.adapter.structure.MetaAdapterFactory;
import jetbrains.mps.ide.icons.IconManager;
import jetbrains.mps.ide.icons.IdeIcons;
import jetbrains.mps.smodel.ModelAccess;
public abstract class AbstractPaletteCreationAction implements PaletteToggleAction {
protected DiagramCell myDiagramCell;
protected SubstituteAction mySubstituteAction;
private Icon myIcon;
private String myText;
public AbstractPaletteCreationAction(DiagramCell diagramCell, SubstituteAction action) {
myDiagramCell = diagramCell;
mySubstituteAction = createSubstituteAction(action);
init();
}
protected abstract SubstituteAction createSubstituteAction(SubstituteAction action);
protected abstract ViewTrait getTrait();
private Icon createIcon() {
// todo code is duplicated from the diagram cell
Icon icon;
SNode iconNode = mySubstituteAction.getIconNode("");
if (iconNode != null) {
// todo should pass concept here, not concept node
icon = ((SNodeOperations.isInstanceOf(iconNode, MetaAdapterFactory.getConcept(0xc72da2b97cce4447L, 0x8389f407dc1158b7L, 0x1103553c5ffL, "jetbrains.mps.lang.structure.structure.AbstractConceptDeclaration")) && !((mySubstituteAction.isReferentPresentation()))) ? IconManager.getIcon(SNodeOperations.asSConcept(((SNode) iconNode))) : IconManager.getIconFor(iconNode));
} else {
icon = IdeIcons.DEFAULT_ICON;
}
return icon;
}
protected void init() {
ModelAccess.instance().runReadAction(new Runnable() {
public void run() {
myIcon = createIcon();
myText = mySubstituteAction.getMatchingText("");
}
});
}
public Icon getIcon() {
return myIcon;
}
public String getText() {
return myText;
}
public void onClick() {
myDiagramCell.setExternalTrait(getTrait());
}
}