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