IDEA-58896 Multi-stroke keys partly broken [refix]

This commit is contained in:
Alexey Pegov
2010-09-25 19:33:21 +04:00
parent 53698a1230
commit 8237494039
10 changed files with 68 additions and 12 deletions
@@ -493,6 +493,10 @@ public class KeymapImpl implements Keymap, ExternalizableScheme {
return ids;
}
public boolean isActionBound(@NotNull final String actionId) {
return getKeymapManager().getBoundActions().contains(actionId);
}
public Shortcut[] getShortcuts(String actionId) {
KeymapManagerEx keymapManager = getKeymapManager();
if (keymapManager.getBoundActions().contains(actionId)) {
@@ -23,9 +23,11 @@ import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.keymap.KeyMapBundle;
import com.intellij.openapi.keymap.Keymap;
import com.intellij.openapi.keymap.KeymapUtil;
import com.intellij.openapi.keymap.impl.KeymapImpl;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Comparing;
import com.intellij.openapi.util.IconLoader;
import com.intellij.openapi.util.registry.Registry;
import com.intellij.ui.ColoredTreeCellRenderer;
import com.intellij.ui.LayeredIcon;
import com.intellij.ui.ScrollPaneFactory;
@@ -58,6 +60,7 @@ public class ActionsTree {
private final JScrollPane myComponent;
private Keymap myKeymap;
private Group myMainGroup = new Group("", null, null);
private boolean myShowBoundActions = Registry.is("keymap.show.alias.actions");
@NonNls
private static final String ROOT = "ROOT";
@@ -73,6 +76,7 @@ public class ActionsTree {
Keymap originalKeymap = myKeymap != null ? myKeymap.getParent() : null;
Icon icon = null;
String text;
boolean bound = false;
if (value instanceof DefaultMutableTreeNode) {
Object userObject = ((DefaultMutableTreeNode)value).getUserObject();
boolean changed;
@@ -88,6 +92,7 @@ public class ActionsTree {
}
else if (userObject instanceof String) {
String actionId = (String)userObject;
bound = myShowBoundActions && ((KeymapImpl)myKeymap).isActionBound(actionId);
AnAction action = ActionManager.getInstance().getActionOrStub(actionId);
if (action != null) {
text = action.getTemplatePresentation().getText();
@@ -133,6 +138,10 @@ public class ActionsTree {
else {
foreground = UIUtil.getTreeForeground();
}
if (bound) {
foreground = Color.MAGENTA;
}
}
SearchUtil.appendFragments(myFilter, text, Font.PLAIN, foreground, selected ? UIUtil.getTreeSelectionBackground() : UIUtil.getTreeTextBackground(), this);
}
@@ -28,13 +28,16 @@ import com.intellij.openapi.keymap.KeyMapBundle;
import com.intellij.openapi.keymap.Keymap;
import com.intellij.openapi.keymap.KeymapExtension;
import com.intellij.openapi.keymap.ex.KeymapManagerEx;
import com.intellij.openapi.keymap.impl.KeymapImpl;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Comparing;
import com.intellij.openapi.util.Condition;
import com.intellij.openapi.util.IconLoader;
import com.intellij.openapi.util.registry.Registry;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import javax.swing.tree.DefaultMutableTreeNode;
@@ -113,6 +116,25 @@ public class ActionsTreeUtil {
return group;
}
@Nullable
private static Condition<AnAction> wrapFilter(@Nullable final Condition<AnAction> filter, final Keymap keymap, final ActionManager actionManager) {
if (Registry.is("keymap.show.alias.actions")) return filter;
return new Condition<AnAction>() {
@Override
public boolean value(final AnAction action) {
if (action == null) return false;
final String id = action instanceof ActionStub ? ((ActionStub)action).getId() : actionManager.getId(action);
if (id != null) {
boolean actionBound = isActionBound(keymap, id);
return filter == null ? !actionBound : !actionBound && filter.value(action);
}
return filter == null ? true : filter.value(action);
}
};
}
private static void fillGroupIgnorePopupFlag(ActionGroup actionGroup, Group group, Condition<AnAction> filtered) {
AnAction[] mainMenuTopGroups = actionGroup instanceof DefaultActionGroup
? ((DefaultActionGroup)actionGroup).getChildActionsOrStubs()
@@ -126,7 +148,6 @@ public class ActionsTreeUtil {
}
public static Group createGroup(ActionGroup actionGroup, boolean ignore, Condition<AnAction> filtered) {
return createGroup(actionGroup, getName(actionGroup), null, null, ignore, filtered);
}
@@ -222,6 +243,12 @@ public class ActionsTreeUtil {
return group;
}
private static boolean isActionBound(final Keymap keymap, final String id) {
if (keymap == null) return false;
Keymap parent = keymap.getParent();
return ((KeymapImpl)keymap).isActionBound(id) || (parent != null && ((KeymapImpl)parent).isActionBound(id));
}
private static void addEditorActions(final Condition<AnAction> filtered,
final DefaultActionGroup editorGroup,
final ArrayList<String> ids) {
@@ -397,20 +424,21 @@ public class ActionsTreeUtil {
final String filter,
final boolean forceFiltering,
final Condition<AnAction> filtered) {
final Condition<AnAction> wrappedFilter = wrapFilter(filtered, keymap, ActionManager.getInstance());
Group mainGroup = new Group(KeyMapBundle.message("all.actions.group.title"), null, null);
mainGroup.addGroup(createEditorActionsGroup(filtered));
mainGroup.addGroup(createMainMenuGroup(filtered));
mainGroup.addGroup(createEditorActionsGroup(wrappedFilter));
mainGroup.addGroup(createMainMenuGroup(wrappedFilter));
for (KeymapExtension extension : Extensions.getExtensions(KeymapExtension.EXTENSION_POINT_NAME)) {
final Group group = createExtensionGroup(filtered, project, extension);
final Group group = createExtensionGroup(wrappedFilter, project, extension);
if (group != null) {
mainGroup.addGroup(group);
}
}
mainGroup.addGroup(createMacrosGroup(filtered));
mainGroup.addGroup(createQuickListsGroup(filtered, filter, forceFiltering, quickLists));
final Group otherGroup = createOtherGroup(filtered, mainGroup, keymap);
mainGroup.addGroup(createMacrosGroup(wrappedFilter));
mainGroup.addGroup(createQuickListsGroup(wrappedFilter, filter, forceFiltering, quickLists));
final Group otherGroup = createOtherGroup(wrappedFilter, mainGroup, keymap);
mainGroup.addGroup(otherGroup);
mainGroup.addGroup(createPluginsActionsGroup(filtered, otherGroup));
mainGroup.addGroup(createPluginsActionsGroup(wrappedFilter, otherGroup));
if (!StringUtil.isEmpty(filter) || filtered != null) {
final ArrayList list = mainGroup.getChildren();
for (Iterator i = list.iterator(); i.hasNext();) {
@@ -733,6 +733,9 @@
<action id="ActivateChangesToolWindow">
<keyboard-shortcut first-keystroke="alt 9"/>
</action>
<action id="NewElement">
<keyboard-shortcut first-keystroke="alt INSERT"/>
</action>
<action id="NewElementSamePlace">
<keyboard-shortcut first-keystroke="control alt INSERT"/>
</action>
@@ -177,7 +177,12 @@
<action id="ActivateMessagesToolWindow">
<keyboard-shortcut first-keystroke="meta 0"/>
</action>
<action id="ActivateProjectToolWindow">
<action id="NewElement">
<keyboard-shortcut first-keystroke="meta N"/>
<keyboard-shortcut first-keystroke="control N"/>
<keyboard-shortcut first-keystroke="control ENTER"/>
</action>
<action id="ActivateProjectToolWindow">
<keyboard-shortcut first-keystroke="meta 1"/>
</action>
<action id="ActivateCommanderToolWindow">
@@ -205,6 +205,10 @@
<action id="ActivateChangesToolWindow">
<keyboard-shortcut first-keystroke="meta 9"/>
</action>
<action id="NewElement">
<keyboard-shortcut first-keystroke="control N"/>
<keyboard-shortcut first-keystroke="control ENTER"/>
</action>
<action id="Generate">
<keyboard-shortcut first-keystroke="control N"/>
<keyboard-shortcut first-keystroke="control ENTER"/>
@@ -226,7 +226,7 @@
<action id="MoveStatementUp">
<keyboard-shortcut first-keystroke="shift alt UP" />
</action>
<action id="Generate">
<action id="NewElement">
<keyboard-shortcut first-keystroke="alt INSERT" />
<keyboard-shortcut first-keystroke="control N" />
</action>
@@ -108,6 +108,9 @@
<mouse-shortcut keystroke="ctrl button1"/>
<mouse-shortcut keystroke="button2"/>
</action>
<action id="NewElement">
<keyboard-shortcut first-keystroke="alt INSERT"/>
</action>
<action id="FindPrevious">
<keyboard-shortcut first-keystroke="shift F3"/>
</action>
@@ -36,7 +36,7 @@
<add-to-group group-id="FileOpenGroup" anchor="first"/>
</group>
<action id="NewElement" class="com.intellij.ide.actions.NewElementAction" use-shortcut-of="Generate">
<action id="NewElement" class="com.intellij.ide.actions.NewElementAction">
<add-to-group group-id="PlatformOpenProjectGroup" anchor="after" relative-to-action="NewDirectoryProject"/>
</action>
+1 -1
View File
@@ -63,7 +63,7 @@
<add-to-group group-id="FileOpenGroup" anchor="first"/>
</group>
<action id="NewElement" class="com.intellij.ide.actions.NewElementAction" use-shortcut-of="Generate">
<action id="NewElement" class="com.intellij.ide.actions.NewElementAction">
<add-to-group group-id="OpenProjectGroup" anchor="after" relative-to-action="NewModule"/>
</action>