From a3fe80e2d1820dbc2294c90c0b2af01177a4b75d Mon Sep 17 00:00:00 2001 From: peter Date: Mon, 19 Jan 2015 17:11:51 +0100 Subject: [PATCH] API to select UI elements the same way as speed search would do --- .../template/impl/TemplateListPanel.java | 16 ++-------------- .../ui/speedSearch/SpeedSearchSupply.java | 6 ++++++ .../src/com/intellij/ui/SpeedSearchBase.java | 7 ++++++- 3 files changed, 14 insertions(+), 15 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/codeInsight/template/impl/TemplateListPanel.java b/platform/lang-impl/src/com/intellij/codeInsight/template/impl/TemplateListPanel.java index d310851b8965..24efa6e9dd93 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/template/impl/TemplateListPanel.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/template/impl/TemplateListPanel.java @@ -33,6 +33,7 @@ import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.EmptyRunnable; import com.intellij.openapi.util.text.StringUtil; import com.intellij.ui.*; +import com.intellij.ui.speedSearch.SpeedSearchSupply; import com.intellij.util.Alarm; import com.intellij.util.NullableFunction; import com.intellij.util.ObjectUtils; @@ -947,20 +948,7 @@ public class TemplateListPanel extends JPanel implements Disposable { } void selectNode(@NotNull String searchQuery) { - for (TemplateGroup group : myTemplateGroups) { - for (TemplateImpl template : group.getElements()) { - if (StringUtil.startsWithIgnoreCase(template.getKey(), searchQuery)) { - selectTemplate(group.getName(), template.getKey()); - return; - } - } - } - for (TemplateGroup group : myTemplateGroups) { - if (StringUtil.startsWithIgnoreCase(group.getName(), searchQuery)) { - selectTemplate(group.getName(), null); - return; - } - } + ObjectUtils.assertNotNull(SpeedSearchSupply.getSupply(myTree, true)).findAndSelectElement(searchQuery); } private void selectTemplate(@Nullable final String groupName, @Nullable final String templateKey) { diff --git a/platform/platform-api/src/com/intellij/ui/speedSearch/SpeedSearchSupply.java b/platform/platform-api/src/com/intellij/ui/speedSearch/SpeedSearchSupply.java index 736c4db0b677..75ffa534737e 100644 --- a/platform/platform-api/src/com/intellij/ui/speedSearch/SpeedSearchSupply.java +++ b/platform/platform-api/src/com/intellij/ui/speedSearch/SpeedSearchSupply.java @@ -80,4 +80,10 @@ public abstract class SpeedSearchSupply { public abstract void addChangeListener(@NotNull PropertyChangeListener listener); public abstract void removeChangeListener(@NotNull PropertyChangeListener listener); + + /** + * Find an element matching the searching query in the underlying component and select it there. Speed-search popup is not affected. + * @param searchQuery text that the selected element should match + */ + public abstract void findAndSelectElement(@NotNull String searchQuery); } diff --git a/platform/platform-impl/src/com/intellij/ui/SpeedSearchBase.java b/platform/platform-impl/src/com/intellij/ui/SpeedSearchBase.java index 6ee1ded56642..7170e20b9d7f 100644 --- a/platform/platform-impl/src/com/intellij/ui/SpeedSearchBase.java +++ b/platform/platform-impl/src/com/intellij/ui/SpeedSearchBase.java @@ -338,6 +338,11 @@ public abstract class SpeedSearchBase extends SpeedSear if ( mySearchPopup != null ) mySearchPopup.refreshSelection(); } + @Override + public void findAndSelectElement(@NotNull String searchQuery) { + selectElement(findElement(searchQuery), searchQuery); + } + private class SearchPopup extends JPanel { private final SearchField mySearchField; @@ -425,7 +430,7 @@ public abstract class SpeedSearchBase extends SpeedSear } public void refreshSelection () { - updateSelection(findElement(mySearchField.getText())); + findAndSelectElement(mySearchField.getText()); } private void updateSelection(Object element) {