void () { final DumbAwareAction rename = new DumbAwareAction(IdeBundle.messagePointer("action.Anonymous.text.rename")) { @Override public void update(@NotNull AnActionEvent e) { final TemplateGroup templateGroup = getSingleSelectedGroup(); boolean enabled = templateGroup != null; e.getPresentation().setEnabledAndVisible(enabled); } @Override public @NotNull ActionUpdateThread getActionUpdateThread() { return ActionUpdateThread.EDT; } @Override public void actionPerformed(@NotNull AnActionEvent e) { renameGroup(); } }; rename.registerCustomShortcutSet(ActionManager.getInstance().getAction(IdeActions.ACTION_RENAME).getShortcutSet(), myTree); class MoveGroup extends DefaultActionGroup implements DumbAware { MoveGroup() { super(CodeInsightBundle.message("action.text.move"), true); } @Override public void update(@NotNull AnActionEvent e) { final Map<TemplateImpl, DefaultMutableTreeNode> templates = getSelectedTemplates(); boolean enabled = !templates.isEmpty(); e.getPresentation().setEnabledAndVisible(enabled); if (enabled) { Set<String> oldGroups = getAllGroups(templates); removeAll(); for (TemplateGroup group : getTemplateGroups()) { final String newGroupName = group.getName(); if (!oldGroups.contains(newGroupName)) { add(new DumbAwareAction(newGroupName) { @Override public void actionPerformed(@NotNull AnActionEvent e) { moveTemplates(templates, newGroupName); } }); } } addSeparator(); add(new DumbAwareAction(IdeBundle.messagePointer("action.Anonymous.text.new.group")) { @Override public void actionPerformed(@NotNull AnActionEvent e) { String newName = Messages.showInputDialog(myTree, CodeInsightBundle.message("label.enter.the.new.group.name"), CodeInsightBundle.message("dialog.title.move.to.a.new.group"), null, "", new TemplateGroupInputValidator(null)); if (newName != null) { moveTemplates(templates, newName); } } }); } } @Override public @NotNull ActionUpdateThread getActionUpdateThread() { return ActionUpdateThread.EDT; } } final DefaultActionGroup move = new MoveGroup(); final DumbAwareAction changeContext = new DumbAwareAction(IdeBundle.messagePointer("action.Anonymous.text.change.context")) { @Override public void update(@NotNull AnActionEvent e) { boolean enabled = !getSelectedTemplates().isEmpty(); e.getPresentation().setEnabled(enabled); } @Override public @NotNull ActionUpdateThread getActionUpdateThread() { return ActionUpdateThread.EDT; } @Override public void actionPerformed(@NotNull AnActionEvent e) { Map<TemplateImpl, DefaultMutableTreeNode> templates = getSelectedTemplates(); TemplateContext context = new TemplateContext(); Pair<JPanel, CheckboxTree> pair = LiveTemplateSettingsEditor.createPopupContextPanel(EmptyRunnable.INSTANCE, context); DialogBuilder builder = new DialogBuilder(TemplateListPanel.this); builder.setCenterPanel(pair.first); builder.setPreferredFocusComponent(pair.second); builder.setTitle(CodeInsightBundle.message("dialog.title.change.context.type.for.selected.templates")); int result = builder.show(); if (result == DialogWrapper.OK_EXIT_CODE) { for (TemplateImpl template : templates.keySet()) { myTemplateContext.put(template, context); } } updateTemplateDetails(false, true); myTree.repaint(); } }; final DumbAwareAction revert = new DumbAwareAction(CodeInsightBundle.messagePointer("action.DumbAware.TemplateListPanel.text.restore.defaults"), CodeInsightBundle.messagePointer("action.DumbAware.TemplateListPanel.description.restore.default.setting"), (Icon)null) { @Override public void update(@NotNull AnActionEvent e) { boolean enabled = false; LiveTemplateContextsSnapshot allContexts = LiveTemplateContextService.getInstance().getSnapshot(); Map<TemplateImpl, DefaultMutableTreeNode> templates = getSelectedTemplates(); for (TemplateImpl template : templates.keySet()) { TemplateImpl defaultTemplate = TemplateSettings.getInstance().getDefaultTemplate(template); if (defaultTemplate != null && templatesDiffer(allContexts, template, defaultTemplate)) { enabled = true; } } e.getPresentation().setEnabledAndVisible(enabled); } @Override public @NotNull ActionUpdateThread getActionUpdateThread() { return ActionUpdateThread.EDT; } @Override public void actionPerformed(@NotNull AnActionEvent e) { Map<TemplateImpl, DefaultMutableTreeNode> templates = getSelectedTemplates(); for (TemplateImpl template : templates.keySet()) { TemplateImpl defaultTemplate = TemplateSettings.getInstance().getDefaultTemplate(template); if (defaultTemplate != null) { myTemplateOptions.put(template, defaultTemplate.createOptions()); myTemplateContext.put(template, defaultTemplate.createContext()); template.resetFrom(defaultTemplate); } } updateTemplateDetails(false, true); myTree.repaint(); } }; DefaultActionGroup group = new DefaultActionGroup( rename, move, changeContext, revert, ActionManager.getInstance().getAction(IdeActions.GROUP_BASIC_EDITOR_POPUP)); PopupHandler.installPopupMenu(myTree, group, "TemplateTreePopup"); }