X-Git-Url: https://git.jetbrains.org/?p=idea%2Fcommunity.git;a=blobdiff_plain;f=platform%2Fxdebugger-impl%2Fsrc%2Fcom%2Fintellij%2Fxdebugger%2Fimpl%2Fevaluate%2FExpressionInputComponent.java;h=8fbf2f32dac6f86e383b5e5c1f6b2021e03b2304;hp=e3295b5cce37e6b32d5caf21aa3ea8161180dc8d;hb=d2d98abb619dd58ff826f24c2341a49d092c4bfe;hpb=7c7adca1486e0a3d882e9a642f69de0d8e7cf7d0 diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/ExpressionInputComponent.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/ExpressionInputComponent.java index e3295b5cce37..8fbf2f32dac6 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/ExpressionInputComponent.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/ExpressionInputComponent.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * Copyright 2000-2015 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. @@ -15,46 +15,107 @@ */ package com.intellij.xdebugger.impl.evaluate; +import com.intellij.codeInsight.lookup.LookupManager; +import com.intellij.icons.AllIcons; +import com.intellij.openapi.actionSystem.AnAction; +import com.intellij.openapi.actionSystem.AnActionEvent; +import com.intellij.openapi.actionSystem.CustomShortcutSet; +import com.intellij.openapi.editor.ex.util.EditorUtil; import com.intellij.openapi.project.Project; -import com.intellij.ui.IdeBorderFactory; +import com.intellij.openapi.ui.popup.PopupStep; +import com.intellij.openapi.ui.popup.util.BaseListPopupStep; +import com.intellij.ui.ColoredListCellRenderer; import com.intellij.ui.components.JBLabel; +import com.intellij.ui.popup.list.ListPopupImpl; +import com.intellij.util.ui.JBUI; import com.intellij.util.ui.UIUtil; import com.intellij.xdebugger.XDebuggerBundle; import com.intellij.xdebugger.XExpression; import com.intellij.xdebugger.XSourcePosition; import com.intellij.xdebugger.evaluation.XDebuggerEditorsProvider; +import com.intellij.xdebugger.impl.breakpoints.XExpressionImpl; import com.intellij.xdebugger.impl.ui.XDebuggerEditorBase; -import com.intellij.xdebugger.impl.ui.XDebuggerExpressionComboBox; +import com.intellij.xdebugger.impl.ui.XDebuggerExpressionEditor; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.*; import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.List; /** * @author nik */ public class ExpressionInputComponent extends EvaluationInputComponent { - private final XDebuggerExpressionComboBox myExpressionComboBox; + private final XDebuggerExpressionEditor myExpressionEditor; private final JPanel myMainPanel; public ExpressionInputComponent(final @NotNull Project project, @NotNull XDebuggerEditorsProvider editorsProvider, final @Nullable XSourcePosition sourcePosition, @Nullable XExpression expression) { super(XDebuggerBundle.message("xdebugger.dialog.title.evaluate.expression")); myMainPanel = new JPanel(new BorderLayout()); - myMainPanel.add(new JLabel(XDebuggerBundle.message("xdebugger.evaluate.label.expression")), BorderLayout.WEST); - myExpressionComboBox = new XDebuggerExpressionComboBox(project, editorsProvider, "evaluateExpression", sourcePosition); - myExpressionComboBox.getComboBox().setMinimumAndPreferredWidth(250); - myMainPanel.add(myExpressionComboBox.getComponent(), BorderLayout.CENTER); + //myMainPanel.add(new JLabel(XDebuggerBundle.message("xdebugger.evaluate.label.expression")), BorderLayout.WEST); + myExpressionEditor = new XDebuggerExpressionEditor(project, editorsProvider, "evaluateExpression", sourcePosition, + expression != null ? expression : XExpressionImpl.EMPTY_EXPRESSION, false); + myMainPanel.add(myExpressionEditor.getComponent(), BorderLayout.CENTER); + JButton historyButton = new JButton(AllIcons.General.MessageHistory); + historyButton.setToolTipText(XDebuggerBundle.message("xdebugger.evaluate.history.hint")); + historyButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + showHistory(); + } + }); + myMainPanel.add(historyButton, BorderLayout.EAST); final JBLabel help = new JBLabel(XDebuggerBundle.message("xdebugger.evaluate.addtowatches.hint"), SwingConstants.RIGHT); - help.setBorder(IdeBorderFactory.createEmptyBorder(2,0,6,0)); + help.setBorder(JBUI.Borders.empty(2, 0, 6, 0)); help.setComponentStyle(UIUtil.ComponentStyle.SMALL); help.setFontColor(UIUtil.FontColor.BRIGHTER); myMainPanel.add(help, BorderLayout.SOUTH); if (expression != null) { - myExpressionComboBox.setExpression(expression); + myExpressionEditor.setExpression(expression); + } + myExpressionEditor.selectAll(); + + new AnAction("XEvaluateDialog.ShowHistory") { + @Override + public void actionPerformed(AnActionEvent e) { + showHistory(); + } + + @Override + public void update(AnActionEvent e) { + e.getPresentation().setEnabled(LookupManager.getActiveLookup(myExpressionEditor.getEditor()) == null); + } + }.registerCustomShortcutSet(CustomShortcutSet.fromString("DOWN"), myMainPanel); + } + + private void showHistory() { + List expressions = myExpressionEditor.getRecentExpressions(); + if (!expressions.isEmpty()) { + ListPopupImpl popup = new ListPopupImpl(new BaseListPopupStep(null, expressions) { + @Override + public PopupStep onChosen(XExpression selectedValue, boolean finalChoice) { + myExpressionEditor.setExpression(selectedValue); + myExpressionEditor.requestFocusInEditor(); + return FINAL_CHOICE; + } + }) { + @Override + protected ListCellRenderer getListElementRenderer() { + return new ColoredListCellRenderer() { + @Override + protected void customizeCellRenderer(JList list, XExpression value, int index, boolean selected, boolean hasFocus) { + append(value.getExpression()); + } + }; + } + }; + popup.getList().setFont(EditorUtil.getEditorFont()); + popup.showUnderneathOf(myExpressionEditor.getComponent()); } - myExpressionComboBox.selectAll(); } @Override @@ -65,6 +126,6 @@ public class ExpressionInputComponent extends EvaluationInputComponent { @NotNull protected XDebuggerEditorBase getInputEditor() { - return myExpressionComboBox; + return myExpressionEditor; } }