improve speed search in show usages popup, fix IDEA-149094
authorSergey Ignatov <sergey.ignatov@jetbrains.com>
Mon, 1 Feb 2016 11:07:44 +0000 (14:07 +0300)
committerSergey Ignatov <sergey.ignatov@jetbrains.com>
Mon, 1 Feb 2016 11:08:44 +0000 (14:08 +0300)
platform/lang-impl/src/com/intellij/find/actions/ShowUsagesAction.java
platform/lang-impl/src/com/intellij/find/actions/ShowUsagesTableCellRenderer.java
platform/platform-api/src/com/intellij/ui/ScrollingUtil.java

index 06a7f3fbb140efc737f27dfa7580f640024c858a..62a3e3107959de70b14439ad84ca4266345d8566 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2015 JetBrains s.r.o.
+ * Copyright 2000-2016 JetBrains s.r.o.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -262,8 +262,6 @@ public class ShowUsagesAction extends AnAction implements PopupAction {
 
     addUsageNodes(usageView.getRoot(), usageView, new ArrayList<UsageNode>());
 
-    ScrollingUtil.installActions(table);
-
     final List<UsageNode> data = collectData(usages, visibleNodes, usageView, presentation);
     setTableModel(table, usageView, data, outOfScopeUsages, options.searchScope);
 
@@ -750,6 +748,7 @@ public class ShowUsagesAction extends AnAction implements PopupAction {
     final JComponent toolBar = actionToolbar.getComponent();
     toolBar.setOpaque(false);
     builder.setSettingButton(toolBar);
+    builder.setCancelKeyEnabled(false); 
 
     popup[0] = builder.createPopup();
     JComponent content = popup[0].getContent();
@@ -1286,7 +1285,7 @@ public class ShowUsagesAction extends AnAction implements PopupAction {
       Usage usage = node.getUsage();
       if (usage == MORE_USAGES_SEPARATOR || usage == USAGES_OUTSIDE_SCOPE_SEPARATOR) return "";
       GroupNode group = (GroupNode)node.getParent();
-      return usage.getPresentation().getPlainText() + group;
+      return group + usage.getPresentation().getPlainText();
     }
 
     @Override
index 3c3dc3e27bb2937777029e6a8a6dd312d07956b2..95f591e2346e032eeb8a8fbe7b9ee3722be7ad9b 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2015 JetBrains s.r.o.
+ * Copyright 2000-2016 JetBrains s.r.o.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -24,6 +24,7 @@ import com.intellij.psi.search.SearchScope;
 import com.intellij.ui.FileColorManager;
 import com.intellij.ui.SimpleColoredComponent;
 import com.intellij.ui.SimpleTextAttributes;
+import com.intellij.ui.speedSearch.SpeedSearchUtil;
 import com.intellij.usages.TextChunk;
 import com.intellij.usages.Usage;
 import com.intellij.usages.UsageGroup;
@@ -104,7 +105,7 @@ class ShowUsagesTableCellRenderer implements TableCellRenderer {
     panel.setForeground(panelForeground);
 
     if (column == 0) {
-      appendGroupText((GroupNode)usageNode.getParent(), panel, fileBgColor);
+      appendGroupText(list, (GroupNode)usageNode.getParent(), panel, fileBgColor, isSelected);
       return panel;
     }
     else if (usage != ShowUsagesAction.MORE_USAGES_SEPARATOR && usage != ShowUsagesAction.USAGES_OUTSIDE_SCOPE_SEPARATOR) {
@@ -130,6 +131,7 @@ class ShowUsagesTableCellRenderer implements TableCellRenderer {
         assert false : column;
       }
     }
+    SpeedSearchUtil.applySpeedSearchHighlighting(list, textChunks, false, isSelected);
     panel.add(textChunks);
     return panel;
   }
@@ -219,17 +221,18 @@ class ShowUsagesTableCellRenderer implements TableCellRenderer {
     return fileBgColor;
   }
 
-  private void appendGroupText(final GroupNode node, JPanel panel, Color fileBgColor) {
+  private void appendGroupText(JTable table, final GroupNode node, JPanel panel, Color fileBgColor, boolean isSelected) {
     UsageGroup group = node == null ? null : node.getGroup();
     if (group == null) return;
     GroupNode parentGroup = (GroupNode)node.getParent();
-    appendGroupText(parentGroup, panel, fileBgColor);
+    appendGroupText(table, parentGroup, panel, fileBgColor, isSelected);
     if (node.canNavigateToSource()) {
       SimpleColoredComponent renderer = new SimpleColoredComponent();
       renderer.setIcon(group.getIcon(false));
       SimpleTextAttributes attributes = deriveAttributesWithColor(SimpleTextAttributes.REGULAR_ATTRIBUTES, fileBgColor);
       renderer.append(group.getText(myUsageView), attributes);
       renderer.setBorder(null);
+      SpeedSearchUtil.applySpeedSearchHighlighting(table, renderer, false, isSelected);
       panel.add(renderer);
     }
   }
index ad44f8b77e1d1fef0a0d1489d6d29f6ad5ca6fd6..979b835c99f25db2678e273578791883ac401cab 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2015 JetBrains s.r.o.
+ * Copyright 2000-2016 JetBrains s.r.o.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -23,6 +23,7 @@ import com.intellij.openapi.actionSystem.ShortcutSet;
 import com.intellij.openapi.diagnostic.Logger;
 import com.intellij.openapi.project.DumbAwareAction;
 import com.intellij.openapi.util.Couple;
+import com.intellij.ui.speedSearch.SpeedSearchSupply;
 import com.intellij.util.ui.UIUtil;
 import org.intellij.lang.annotations.JdkConstants;
 import org.jetbrains.annotations.NonNls;
@@ -357,8 +358,9 @@ public class ScrollingUtil {
     UIUtil.maybeInstall(map, MOVE_END_ID, KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT, 0));
   }
 
-  public static abstract class ListScrollAction extends DumbAwareAction {
+  public static abstract class ListScrollAction extends SpeedSearchAwareAction {
     protected ListScrollAction(final ShortcutSet shortcutSet, final JComponent component) {
+      super(component);
       registerCustomShortcutSet(shortcutSet, component);
     }
   }
@@ -543,6 +545,19 @@ public class ScrollingUtil {
     installActions(table, UISettings.getInstance().CYCLE_SCROLLING);
   }
 
+  public abstract static class SpeedSearchAwareAction extends DumbAwareAction {
+    private final JComponent myComponent;
+
+    public SpeedSearchAwareAction(JComponent component) {
+      myComponent = component;
+    }
+
+    @Override
+    public void update(AnActionEvent e) {
+      e.getPresentation().setEnabled(SpeedSearchSupply.getSupply(myComponent) == null);
+    }
+  }
+
   public static void installActions(final JTable table, final boolean cycleScrolling) {
     ActionMap actionMap = table.getActionMap();
     actionMap.put(SCROLLUP_ACTION_ID, new MoveAction(SCROLLUP_ACTION_ID, table, cycleScrolling));
@@ -554,42 +569,42 @@ public class ScrollingUtil {
 
     maybeInstallDefaultShortcuts(table);
 
-    new DumbAwareAction() {
+    new SpeedSearchAwareAction(table) {
       public void actionPerformed(AnActionEvent e) {
         moveHome(table);
       }
     }.registerCustomShortcutSet(new CustomShortcutSet(KeyStroke.getKeyStroke(KeyEvent.VK_LEFT, 0)), table);
-    new DumbAwareAction() {
+    new SpeedSearchAwareAction(table) {
       public void actionPerformed(AnActionEvent e) {
         moveEnd(table);
       }
     }.registerCustomShortcutSet(new CustomShortcutSet(KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT, 0)), table);
-    new DumbAwareAction() {
+    new SpeedSearchAwareAction(table) {
       public void actionPerformed(AnActionEvent e) {
         moveHome(table);
       }
     }.registerCustomShortcutSet(CommonShortcuts.getMoveHome(), table);
-    new DumbAwareAction() {
+    new SpeedSearchAwareAction(table) {
       public void actionPerformed(AnActionEvent e) {
         moveEnd(table);
       }
     }.registerCustomShortcutSet(CommonShortcuts.getMoveEnd(), table);
-    new DumbAwareAction() {
+    new SpeedSearchAwareAction(table) {
       public void actionPerformed(AnActionEvent e) {
         moveDown(table, e.getModifiers(), cycleScrolling);
       }
     }.registerCustomShortcutSet(CommonShortcuts.getMoveDown(), table);
-    new DumbAwareAction() {
+    new SpeedSearchAwareAction(table) {
       public void actionPerformed(AnActionEvent e) {
         moveUp(table, e.getModifiers(), cycleScrolling);
       }
     }.registerCustomShortcutSet(CommonShortcuts.getMoveUp(), table);
-    new DumbAwareAction() {
+    new SpeedSearchAwareAction(table) {
       public void actionPerformed(AnActionEvent e) {
         movePageUp(table);
       }
     }.registerCustomShortcutSet(CommonShortcuts.getMovePageUp(), table);
-    new DumbAwareAction() {
+    new SpeedSearchAwareAction(table) {
       public void actionPerformed(AnActionEvent e) {
         movePageDown(table);
       }