package jetbrains.mps.editor.contextActionsTool.pluginSolution.plugin; /*Generated by MPS */ import org.apache.log4j.Logger; import org.apache.log4j.LogManager; import jetbrains.mps.nodeEditor.assist.SelectionMenuProvider; import java.util.List; import org.jetbrains.annotations.NotNull; import jetbrains.mps.openapi.editor.selection.Selection; import jetbrains.mps.openapi.editor.menus.transformation.TransformationMenuItem; import jetbrains.mps.internal.collections.runtime.ListSequence; import java.util.ArrayList; import jetbrains.mps.openapi.editor.menus.transformation.TransformationMenuItemVisitor; import jetbrains.mps.openapi.editor.menus.transformation.ActionItem; import jetbrains.mps.openapi.editor.menus.transformation.SubMenu; import javax.swing.Icon; import jetbrains.mps.editor.contextActionsTool.lang.menus.runtime.SidebarActionItem; import jetbrains.mps.ide.icons.IconManager; import org.apache.log4j.Level; import org.jetbrains.annotations.Nullable; import jetbrains.mps.openapi.editor.menus.transformation.CommandPolicy; public class ItemConverter { private static final Logger LOG = LogManager.getLogger(ItemConverter.class); private final SelectionMenuProvider myMenuProvider; public ItemConverter(SelectionMenuProvider menuProvider) { myMenuProvider = menuProvider; } protected List<ToolComponent.IItem> queryItems(@NotNull Selection selection) { List<TransformationMenuItem> menuItems = myMenuProvider.getMenuItems(selection); return convertItems(menuItems); } public static List<ToolComponent.IItem> convertItems(List<TransformationMenuItem> menuItems) { List<ToolComponent.IItem> uiItems = ListSequence.fromList(new ArrayList<ToolComponent.IItem>()); convertItems(menuItems, "", uiItems); return uiItems; } private static void convertItems(List<TransformationMenuItem> inItems, final String folderName, final List<ToolComponent.IItem> outItems) { for (TransformationMenuItem inItem : ListSequence.fromList(inItems)) { inItem.accept(new TransformationMenuItemVisitor<Void>() { @Override public Void visit(ActionItem actionItem) { ListSequence.fromList(outItems).addElement(convertActionItem(actionItem, folderName)); return null; } @Override public Void visit(SubMenu subMenu) { String subfolderName = ((folderName == null || folderName.length() == 0) ? subMenu.getText() : folderName + "/" + subMenu.getText()); convertItems(subMenu.getItems(), subfolderName, outItems); return null; } }); } } private static ToolComponent.IItem convertActionItem(ActionItem actionItem, String folderName) { Icon icon = null; String tooltip = null; if (actionItem instanceof SidebarActionItem) { SidebarActionItem sidebarItem = (SidebarActionItem) actionItem; try { icon = IconManager.getIconForResource(sidebarItem.getIcon()); } catch (LinkageError error) { if (LOG.isEnabledFor(Level.WARN)) { LOG.warn("Error trying to get icon for " + actionItem, error); } } catch (RuntimeException exception) { if (LOG.isEnabledFor(Level.WARN)) { LOG.warn("Exception trying to get icon for " + actionItem, exception); } } try { tooltip = sidebarItem.getTooltipText(); } catch (LinkageError error) { if (LOG.isEnabledFor(Level.WARN)) { LOG.warn("Error trying to get tooltip text for " + actionItem, error); } } catch (RuntimeException exception) { if (LOG.isEnabledFor(Level.WARN)) { LOG.warn("Exception trying to get tooltip text for " + actionItem, exception); } } } return new ItemConverter.Item(actionItem, folderName, icon, tooltip); } private static class Item implements ToolComponent.IItem { private final ActionItem myActionItem; private final String myLabel; private final String myFolderName; @Nullable private final Icon myIcon; @Nullable private final String myTooltip; private Item(ActionItem actionItem, String folderName, Icon icon, String tooltip) { myActionItem = actionItem; myLabel = actionItem.getLabelText(""); myFolderName = folderName; myIcon = icon; myTooltip = tooltip; } @Override public String getLabel() { return myLabel; } @Override public Icon getIcon() { return myIcon; } @Override public String getFolderName() { return myFolderName; } @Override public String getTooltip() { return myTooltip; } @Override public boolean isVisible() { return myActionItem.canExecute(""); } @Override public void execute() { myActionItem.execute(""); } @NotNull public CommandPolicy getCommandPolicy() { return myActionItem.getCommandPolicy(); } } }