package jetbrains.mps.lang.editor.diagram.runtime.jetpad.palette.ui; /*Generated by MPS */ import com.intellij.openapi.actionSystem.ActionGroup; import com.intellij.openapi.actionSystem.Toggleable; import com.intellij.openapi.actionSystem.AlwaysVisibleActionGroup; import jetbrains.mps.lang.editor.diagram.runtime.jetpad.palette.openapi.PaletteActionGroup; import java.util.List; import com.intellij.openapi.actionSystem.AnAction; import jetbrains.mps.internal.collections.runtime.ListSequence; import java.util.ArrayList; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import com.intellij.openapi.actionSystem.AnActionEvent; import jetbrains.mps.internal.collections.runtime.Sequence; import jetbrains.mps.internal.collections.runtime.ISelector; import jetbrains.mps.lang.editor.diagram.runtime.jetpad.palette.openapi.PaletteElement; import jetbrains.mps.internal.collections.runtime.IWhereFilter; import jetbrains.mps.internal.collections.runtime.IVisitor; /*package*/ class PopupPaletteActionGroupAdapter extends ActionGroup implements Toggleable, AlwaysVisibleActionGroup { private DiagramPalette myPalette; private PaletteActionGroup myPaletteActionGroup; private List<AnAction> myChildren = ListSequence.fromList(new ArrayList<AnAction>()); private AnAction mySelectedAction; public PopupPaletteActionGroupAdapter(final DiagramPalette palette, PaletteActionGroup group) { super(group.getText(), group.getText(), group.getIcon()); assert group.isPopup(); setPopup(true); myPaletteActionGroup = group; myPalette = palette; } @NotNull public AnAction[] getChildren(@Nullable AnActionEvent event) { return ListSequence.fromList(myChildren).toGenericArray(AnAction.class); } public void updateChildren() { myChildren = Sequence.fromIterable(Sequence.fromArray(myPaletteActionGroup.getElements())).select(new ISelector<PaletteElement, AnAction>() { public AnAction select(PaletteElement element) { return PaletteElementFactory.createPaletteElementAdapter(myPalette, element); } }).toListSequence(); ListSequence.fromList(myChildren).where(new IWhereFilter<AnAction>() { public boolean accept(AnAction it) { return it instanceof PaletteToggleActionAdapter; } }).visitAll(new IVisitor<AnAction>() { public void visit(AnAction it) { ((PaletteToggleActionAdapter) it).setParentGroup(PopupPaletteActionGroupAdapter.this); } }); } public void removeChildren() { ListSequence.fromList(myChildren).clear(); } @Override public void update(AnActionEvent event) { super.update(event); if (mySelectedAction != null) { event.getPresentation().setIcon(mySelectedAction.getTemplatePresentation().getIcon()); event.getPresentation().putClientProperty(SELECTED_PROPERTY, true); } else { event.getPresentation().setIcon(getTemplatePresentation().getIcon()); event.getPresentation().putClientProperty(SELECTED_PROPERTY, false); } } /*package*/ void setSelectedAction(AnAction action) { mySelectedAction = action; } }