mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-81481 Recent Files: when I press navigate to... shortcut open the 'navigate to' popup and copy speed search content in it.
This commit is contained in:
@@ -45,6 +45,7 @@ import com.intellij.ui.components.JBScrollPane;
|
||||
import com.intellij.ui.components.labels.LinkLabel;
|
||||
import com.intellij.ui.components.labels.LinkListener;
|
||||
import com.intellij.ui.components.panels.NonOpaquePanel;
|
||||
import com.intellij.ui.speedSearch.SpeedSearchSupply;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
import com.intellij.util.ui.UIUtil;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
@@ -169,6 +170,9 @@ public class EditorSearchComponent extends JPanel implements DataProvider, Selec
|
||||
@Override
|
||||
@Nullable
|
||||
public Object getData(@NonNls final String dataId) {
|
||||
if (SpeedSearchSupply.SPEED_SEARCH_CURRENT_QUERY.is(dataId)) {
|
||||
return mySearchField.getText();
|
||||
}
|
||||
if (PlatformDataKeys.EDITOR_EVEN_IF_INACTIVE.is(dataId)) {
|
||||
return myEditor;
|
||||
}
|
||||
|
||||
@@ -29,13 +29,18 @@ import com.intellij.openapi.fileEditor.FileEditorManager;
|
||||
import com.intellij.openapi.fileEditor.ex.FileEditorManagerEx;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Pair;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.openapi.wm.IdeFocusManager;
|
||||
import com.intellij.psi.PsiDocumentManager;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.ui.speedSearch.SpeedSearchSupply;
|
||||
import com.intellij.util.containers.CollectionFactory;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
@@ -104,7 +109,8 @@ public abstract class GotoActionBase extends AnAction {
|
||||
public abstract void elementChosen(ChooseByNamePopup popup, Object element);
|
||||
}
|
||||
|
||||
private static Pair<String, Integer> getInitialText(Editor editor) {
|
||||
private static Pair<String, Integer> getInitialText(boolean useEditorSelection, AnActionEvent e) {
|
||||
final Editor editor = e.getData(PlatformDataKeys.EDITOR);
|
||||
if (editor != null) {
|
||||
final String selectedText = editor.getSelectionModel().getSelectedText();
|
||||
if (selectedText != null && !selectedText.contains("\n")) {
|
||||
@@ -112,6 +118,19 @@ public abstract class GotoActionBase extends AnAction {
|
||||
}
|
||||
}
|
||||
|
||||
final String query = e.getData(SpeedSearchSupply.SPEED_SEARCH_CURRENT_QUERY);
|
||||
if (!StringUtil.isEmpty(query)) {
|
||||
return Pair.create(query, 0);
|
||||
}
|
||||
|
||||
final Component focusOwner = IdeFocusManager.getInstance(getEventProject(e)).getFocusOwner();
|
||||
if (focusOwner instanceof JComponent) {
|
||||
final SpeedSearchSupply supply = SpeedSearchSupply.getSupply((JComponent)focusOwner);
|
||||
if (supply != null) {
|
||||
return Pair.create(supply.getEnteredPrefix(), 0);
|
||||
}
|
||||
}
|
||||
|
||||
if (myInAction != null) {
|
||||
final Pair<String, Integer> lastString = ourLastStrings.get(myInAction);
|
||||
if (lastString != null) {
|
||||
@@ -136,7 +155,7 @@ public abstract class GotoActionBase extends AnAction {
|
||||
boolean mayRequestOpenInCurrentWindow = model.willOpenEditor() && FileEditorManagerEx.getInstanceEx(project).hasSplitOrUndockedWindows();
|
||||
final Class startedAction = myInAction;
|
||||
LOG.assertTrue(startedAction != null);
|
||||
Pair<String, Integer> start = getInitialText(useSelectionFromEditor ? e.getData(PlatformDataKeys.EDITOR) : null);
|
||||
Pair<String, Integer> start = getInitialText(useSelectionFromEditor, e);
|
||||
final ChooseByNamePopup popup = ChooseByNamePopup.createPopup(project, model, getPsiContext(e), start.first, mayRequestOpenInCurrentWindow, start.second);
|
||||
popup.setCheckBoxShortcut(getShortcutSet());
|
||||
popup.setFindUsagesTitle(findUsagesTitle);
|
||||
|
||||
@@ -80,6 +80,7 @@ public class PopupChooserBuilder {
|
||||
private Function<Object,String> myItemsNamer = null;
|
||||
private boolean myMayBeParent;
|
||||
private int myAdAlignment = SwingUtilities.LEFT;
|
||||
private boolean myModalContext;
|
||||
|
||||
public PopupChooserBuilder(@NotNull JList list) {
|
||||
myChooserComponent = list;
|
||||
@@ -172,6 +173,11 @@ public class PopupChooserBuilder {
|
||||
return this;
|
||||
}
|
||||
|
||||
public PopupChooserBuilder setModalContext(boolean modalContext) {
|
||||
myModalContext = modalContext;
|
||||
return this;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public JBPopup createPopup() {
|
||||
JList list = null;
|
||||
@@ -248,10 +254,21 @@ public class PopupChooserBuilder {
|
||||
builder.addListener(each);
|
||||
}
|
||||
|
||||
builder.setDimensionServiceKey(null, myDimensionServiceKey, false).setRequestFocus(myRequestFocus).setResizable(myForceResizable)
|
||||
.setMovable(myForceMovable).setTitle(myForceMovable ? myTitle : null).setCancelCallback(myCancelCallback).setAlpha(myAlpha)
|
||||
.setFocusOwners(myFocusOwners).setCancelKeyEnabled(myCancelKeyEnabled && !(myChooserComponent instanceof ListWithFilter)).
|
||||
setAdText(myAd, myAdAlignment).setKeyboardActions(myKeyboardActions).setMayBeParent(myMayBeParent).setLocateWithinScreenBounds(true);
|
||||
builder.setDimensionServiceKey(null, myDimensionServiceKey, false)
|
||||
.setRequestFocus(myRequestFocus)
|
||||
.setResizable(myForceResizable)
|
||||
.setMovable(myForceMovable)
|
||||
.setTitle(myForceMovable ? myTitle : null)
|
||||
.setCancelCallback(myCancelCallback)
|
||||
.setAlpha(myAlpha)
|
||||
.setFocusOwners(myFocusOwners)
|
||||
.setCancelKeyEnabled(myCancelKeyEnabled && !(myChooserComponent instanceof ListWithFilter))
|
||||
.setAdText(myAd, myAdAlignment)
|
||||
.setKeyboardActions(myKeyboardActions)
|
||||
.setMayBeParent(myMayBeParent)
|
||||
.setLocateWithinScreenBounds(true)
|
||||
.setCancelOnOtherWindowOpen(true)
|
||||
.setModalContext(myModalContext);
|
||||
|
||||
if (myCommandButton != null) {
|
||||
builder.setCommandButton(myCommandButton);
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
*/
|
||||
package com.intellij.ui.speedSearch;
|
||||
|
||||
import com.intellij.openapi.actionSystem.DataProvider;
|
||||
import com.intellij.openapi.ui.popup.JBPopup;
|
||||
import com.intellij.openapi.ui.popup.util.PopupUtil;
|
||||
import com.intellij.openapi.util.Condition;
|
||||
@@ -28,19 +29,28 @@ import com.intellij.ui.ScrollPaneFactory;
|
||||
import com.intellij.ui.UIBundle;
|
||||
import com.intellij.util.Function;
|
||||
import com.intellij.util.ui.ComponentWithEmptyText;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.awt.event.KeyAdapter;
|
||||
import java.awt.event.KeyEvent;
|
||||
|
||||
public class ListWithFilter<T> extends JPanel {
|
||||
public class ListWithFilter<T> extends JPanel implements DataProvider {
|
||||
private final JList myList;
|
||||
private final JTextField mySpeedSearchPatternField;
|
||||
private final NameFilteringListModel<T> myModel;
|
||||
private final JScrollPane myScroller;
|
||||
private final MySpeedSearch mySpeedSearch;
|
||||
|
||||
@Override
|
||||
public Object getData(@NonNls String dataId) {
|
||||
if (SpeedSearchSupply.SPEED_SEARCH_CURRENT_QUERY.is(dataId)) {
|
||||
return mySpeedSearchPatternField.getText();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static JComponent wrap(JList list) {
|
||||
return wrap(list, ScrollPaneFactory.createScrollPane(list), StringUtil.createToStringFunction(Object.class));
|
||||
}
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
*/
|
||||
package com.intellij.ui.speedSearch;
|
||||
|
||||
import com.intellij.openapi.actionSystem.DataKey;
|
||||
import com.intellij.openapi.util.Key;
|
||||
import com.intellij.openapi.util.TextRange;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -28,6 +29,7 @@ import javax.swing.*;
|
||||
*/
|
||||
public abstract class SpeedSearchSupply {
|
||||
private static final Key SPEED_SEARCH_COMPONENT_MARKER = new Key("SPEED_SEARCH_COMPONENT_MARKER");
|
||||
public static final DataKey<String> SPEED_SEARCH_CURRENT_QUERY = DataKey.create("SPEED_SEARCH_CURRENT_QUERY");
|
||||
|
||||
@Nullable
|
||||
public static SpeedSearchSupply getSupply(@NotNull final JComponent component) {
|
||||
|
||||
@@ -160,13 +160,14 @@ public abstract class BaseShowRecentFilesAction extends AnAction implements Dumb
|
||||
footerPanel.setBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4));
|
||||
footerPanel.add(pathLabel);
|
||||
|
||||
final PopupChooserBuilder builder = new PopupChooserBuilder(list).
|
||||
setTitle(getTitle()).
|
||||
setAdText(" ").
|
||||
setMovable(true).
|
||||
setItemChoosenCallback(runnable).
|
||||
addAdditionalChooseKeystroke(getAdditionalSelectKeystroke()).
|
||||
setFilteringEnabled(new Function<Object, String>() {
|
||||
final PopupChooserBuilder builder = new PopupChooserBuilder(list)
|
||||
.setTitle(getTitle())
|
||||
.setAdText(" ")
|
||||
.setMovable(true)
|
||||
.setItemChoosenCallback(runnable)
|
||||
.setModalContext(false)
|
||||
.addAdditionalChooseKeystroke(getAdditionalSelectKeystroke())
|
||||
.setFilteringEnabled(new Function<Object, String>() {
|
||||
public String fun(Object o) {
|
||||
return o instanceof VirtualFile ? ((VirtualFile)o).getName() : "";
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user