diff --git a/platform/lang-impl/src/com/intellij/ide/actions/GotoActionAction.java b/platform/lang-impl/src/com/intellij/ide/actions/GotoActionAction.java index 35c59a634a1c..91a98b90ce7f 100644 --- a/platform/lang-impl/src/com/intellij/ide/actions/GotoActionAction.java +++ b/platform/lang-impl/src/com/intellij/ide/actions/GotoActionAction.java @@ -28,6 +28,7 @@ import com.intellij.openapi.actionSystem.ex.ActionUtil; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.ModalityState; import com.intellij.openapi.editor.Editor; +import com.intellij.openapi.keymap.KeymapUtil; import com.intellij.openapi.project.DumbAware; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.popup.JBPopupFactory; @@ -37,7 +38,11 @@ import com.intellij.psi.PsiFile; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import javax.swing.*; +import javax.swing.event.ListSelectionEvent; +import javax.swing.event.ListSelectionListener; import java.awt.*; +import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.Set; @@ -77,6 +82,29 @@ public class GotoActionAction extends GotoActionBase implements DumbAware { oldPopup.close(false); } final ChooseByNamePopup popup = new ChooseByNamePopup(project, model, new GotoActionItemProvider(model), oldPopup, initialText, false, initialIndex) { + @Override + protected void initUI(Callback callback, ModalityState modalityState, boolean allowMultipleSelection) { + super.initUI(callback, modalityState, allowMultipleSelection); + myList.addListSelectionListener(new ListSelectionListener() { + @Override + public void valueChanged(ListSelectionEvent e) { + Object value = myList.getSelectedValue(); + myDropdownPopup.setAdText(getText(value), SwingConstants.LEFT); + } + + private String getText(Object o) { + if (o instanceof GotoActionModel.MatchedValue) { + GotoActionModel.MatchedValue mv = (GotoActionModel.MatchedValue)o; + if (mv.value instanceof BooleanOptionDescription || + mv.value instanceof GotoActionModel.ActionWrapper && ((GotoActionModel.ActionWrapper)mv.value).getAction() instanceof ToggleAction) { + return "Press " + KeymapUtil.getKeystrokeText(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0)) + " to toggle option"; + } + } + return getAdText(); + } + }); + } + @NotNull @Override protected Set filter(@NotNull Set elements) { diff --git a/platform/platform-api/src/com/intellij/openapi/ui/ComponentWithBrowseButton.java b/platform/platform-api/src/com/intellij/openapi/ui/ComponentWithBrowseButton.java index 906e2496296e..5ee7a73b73a6 100644 --- a/platform/platform-api/src/com/intellij/openapi/ui/ComponentWithBrowseButton.java +++ b/platform/platform-api/src/com/intellij/openapi/ui/ComponentWithBrowseButton.java @@ -32,6 +32,7 @@ import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.ui.GuiUtils; import com.intellij.ui.UIBundle; import com.intellij.util.Consumer; import com.intellij.util.ui.UIUtil; @@ -88,9 +89,7 @@ public class ComponentWithBrowseButton extends JPanel i public void setTextFieldPreferredWidth(final int charCount) { final Comp comp = getChildComponent(); - Dimension size = comp.getPreferredSize(); - FontMetrics fontMetrics = comp.getFontMetrics(comp.getFont()); - size.width = fontMetrics.charWidth('a') * charCount; + Dimension size = GuiUtils.getSizeByChars(charCount, comp); comp.setPreferredSize(size); final Dimension preferredSize = myBrowseButton.getPreferredSize(); setPreferredSize(new Dimension(size.width + preferredSize.width + 2, UIUtil.isUnderAquaLookAndFeel() ? preferredSize.height : preferredSize.height + 2)); diff --git a/platform/platform-api/src/com/intellij/ui/GuiUtils.java b/platform/platform-api/src/com/intellij/ui/GuiUtils.java index d0bd138ec31f..ce60c6b53de5 100644 --- a/platform/platform-api/src/com/intellij/ui/GuiUtils.java +++ b/platform/platform-api/src/com/intellij/ui/GuiUtils.java @@ -390,4 +390,18 @@ public class GuiUtils { public static JTextField createUndoableTextField() { return new JBTextField(); } + + /** + * Returns dimension with width required to type certain number of chars in provided component + * @param charCount number of chars + * @param comp component + * @return dimension with width enough to insert provided number of chars into component + */ + @NotNull + public static Dimension getSizeByChars(int charCount, @NotNull JComponent comp) { + Dimension size = comp.getPreferredSize(); + FontMetrics fontMetrics = comp.getFontMetrics(comp.getFont()); + size.width = fontMetrics.charWidth('a') * charCount; + return size; + } } diff --git a/platform/script-debugger/backend/src/org/jetbrains/debugger/ScriptManager.java b/platform/script-debugger/backend/src/org/jetbrains/debugger/ScriptManager.java index c16ffe5d4b81..60b8690e44a0 100644 --- a/platform/script-debugger/backend/src/org/jetbrains/debugger/ScriptManager.java +++ b/platform/script-debugger/backend/src/org/jetbrains/debugger/ScriptManager.java @@ -38,6 +38,9 @@ public interface ScriptManager { @Nullable Script findScriptByUrl(@NotNull String rawUrl); + @Nullable + Script findScriptById(@NotNull String id); + @Nullable ActionCallback getScriptSourceMapLoadCallback(@NotNull Script script); } \ No newline at end of file diff --git a/platform/script-debugger/backend/src/org/jetbrains/debugger/ScriptManagerBase.java b/platform/script-debugger/backend/src/org/jetbrains/debugger/ScriptManagerBase.java index e19deb1b6dc9..f22514ca704f 100644 --- a/platform/script-debugger/backend/src/org/jetbrains/debugger/ScriptManagerBase.java +++ b/platform/script-debugger/backend/src/org/jetbrains/debugger/ScriptManagerBase.java @@ -56,4 +56,10 @@ public abstract class ScriptManagerBase