xbreakpoint.reached.text=Breakpoint reached:
+xdebugger.evaluate.language.hint=Click to change the language
+xdebugger.evaluate.history.hint=Show history
xdebugger.evaluate.label.result=&Result:
xdebugger.button.evaluate=E&valuate
xdebugger.evaluate.dialog.close=Close
/*
- * 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.
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.XDebuggerMultilineEditor;
+import com.intellij.xdebugger.impl.ui.XDebuggerExpressionEditor;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
* @author nik
*/
public class CodeFragmentInputComponent extends EvaluationInputComponent {
- private final XDebuggerMultilineEditor myMultilineEditor;
+ private final XDebuggerExpressionEditor myMultilineEditor;
private final JPanel myMainPanel;
public CodeFragmentInputComponent(final @NotNull Project project, @NotNull XDebuggerEditorsProvider editorsProvider,
final @Nullable XSourcePosition sourcePosition, @Nullable XExpression statements, Disposable parentDisposable) {
super(XDebuggerBundle.message("dialog.title.evaluate.code.fragment"));
- myMultilineEditor = new XDebuggerMultilineEditor(project, editorsProvider, "evaluateCodeFragment", sourcePosition, statements != null ? statements : XExpressionImpl.EMPTY_CODE_FRAGMENT);
+ myMultilineEditor = new XDebuggerExpressionEditor(project, editorsProvider, "evaluateCodeFragment", sourcePosition,
+ statements != null ? statements : XExpressionImpl.EMPTY_CODE_FRAGMENT, true);
myMainPanel = new JPanel(new BorderLayout());
JPanel editorPanel = new JPanel(new BorderLayout());
editorPanel.add(myMultilineEditor.getComponent(), BorderLayout.CENTER);
group.add(new HistoryNavigationAction(false, IdeActions.ACTION_PREVIOUS_OCCURENCE, parentDisposable));
group.add(new HistoryNavigationAction(true, IdeActions.ACTION_NEXT_OCCURENCE, parentDisposable));
editorPanel.add(ActionManager.getInstance().createActionToolbar(ActionPlaces.UNKNOWN, group, false).getComponent(), BorderLayout.EAST);
- myMainPanel.add(new JLabel(XDebuggerBundle.message("xdebugger.label.text.code.fragment")), BorderLayout.NORTH);
+ //myMainPanel.add(new JLabel(XDebuggerBundle.message("xdebugger.label.text.code.fragment")), BorderLayout.NORTH);
myMainPanel.add(editorPanel, BorderLayout.CENTER);
if (statements != null) {
myMultilineEditor.setExpression(statements);
/*
- * 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.
*/
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<XExpression> expressions = myExpressionEditor.getRecentExpressions();
+ if (!expressions.isEmpty()) {
+ ListPopupImpl popup = new ListPopupImpl(new BaseListPopupStep<XExpression>(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<XExpression>() {
+ @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
@NotNull
protected XDebuggerEditorBase getInputEditor() {
- return myExpressionComboBox;
+ return myExpressionEditor;
}
}
XDebugSessionTab tab = ((XDebugSessionImpl)mySession).getSessionTab();
if (tab != null) {
tab.getWatchesView().addWatchExpression(expression, -1, true);
- requestFocusInEditor();
+ getInputEditor().requestFocusInEditor();
}
}
}
setTitle(myInputComponent.getTitle());
mySwitchModeAction.putValue(Action.NAME, getSwitchButtonText(mode));
- requestFocusInEditor();
- }
-
- private void requestFocusInEditor() {
- JComponent preferredFocusedComponent = getInputEditor().getPreferredFocusedComponent();
- if (preferredFocusedComponent != null) {
- IdeFocusManager.getInstance(mySession.getProject()).requestFocus(preferredFocusedComponent, true);
- }
+ getInputEditor().requestFocusInEditor();
}
private XDebuggerEditorBase getInputEditor() {
/*
- * 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.
import com.intellij.openapi.wm.IdeFocusManager;
import com.intellij.reference.SoftReference;
import com.intellij.ui.ClickListener;
+import com.intellij.util.ui.JBUI;
+import com.intellij.xdebugger.XDebuggerBundle;
import com.intellij.xdebugger.XExpression;
import com.intellij.xdebugger.XSourcePosition;
import com.intellij.xdebugger.evaluation.EvaluationMode;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
-import javax.swing.border.EmptyBorder;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.lang.ref.WeakReference;
myHistoryId = historyId;
mySourcePosition = sourcePosition;
- myChooseFactory.setToolTipText("Click to change the language");
- myChooseFactory.setBorder(new EmptyBorder(0, 3, 0, 3));
+ myChooseFactory.setToolTipText(XDebuggerBundle.message("xdebugger.evaluate.language.hint"));
+ myChooseFactory.setBorder(JBUI.Borders.empty(0, 3, 0, 3));
new ClickListener() {
@Override
public boolean onClick(@NotNull MouseEvent e, int clickCount) {
public void actionPerformed(@NotNull AnActionEvent e) {
XExpression currentExpression = getExpression();
setExpression(new XExpressionImpl(currentExpression.getExpression(), language, currentExpression.getCustomInfo()));
- IdeFocusManager.getInstance(getProject()).requestFocus(getComponent(), true);
+ requestFocusInEditor();
}
});
}
@Nullable
public abstract JComponent getPreferredFocusedComponent();
+ public void requestFocusInEditor() {
+ JComponent preferredFocusedComponent = getPreferredFocusedComponent();
+ if (preferredFocusedComponent != null) {
+ IdeFocusManager.getInstance(myProject).requestFocus(preferredFocusedComponent, true);
+ }
+ }
+
public abstract void selectAll();
protected void onHistoryChanged() {
}
- protected List<XExpression> getRecentExpressions() {
+ public List<XExpression> getRecentExpressions() {
if (myHistoryId != null) {
return XDebuggerHistoryManager.getInstance(myProject).getRecentExpressions(myHistoryId);
}
import com.intellij.openapi.actionSystem.LangDataKeys;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.editor.ex.EditorEx;
+import com.intellij.openapi.editor.ex.util.EditorUtil;
import com.intellij.openapi.fileTypes.FileType;
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiDocumentManager;
/**
* @author nik
*/
-public class XDebuggerMultilineEditor extends XDebuggerEditorBase {
+public class XDebuggerExpressionEditor extends XDebuggerEditorBase {
private final JComponent myComponent;
private final EditorTextField myEditorTextField;
private XExpression myExpression;
- public XDebuggerMultilineEditor(Project project,
+ public XDebuggerExpressionEditor(Project project,
XDebuggerEditorsProvider debuggerEditorsProvider,
@Nullable @NonNls String historyId,
- @Nullable XSourcePosition sourcePosition, @NotNull XExpression text) {
- super(project, debuggerEditorsProvider, EvaluationMode.CODE_FRAGMENT, historyId, sourcePosition);
+ @Nullable XSourcePosition sourcePosition,
+ @NotNull XExpression text,
+ final boolean multiline) {
+ super(project, debuggerEditorsProvider, multiline ? EvaluationMode.CODE_FRAGMENT : EvaluationMode.EXPRESSION, historyId, sourcePosition);
myExpression = XExpressionImpl.changeMode(text, getMode());
myEditorTextField = new EditorTextField(createDocument(myExpression), project, debuggerEditorsProvider.getFileType()) {
@Override
protected EditorEx createEditor() {
final EditorEx editor = super.createEditor();
- editor.setVerticalScrollbarVisible(true);
+ editor.setOneLineMode(!multiline);
+ editor.setVerticalScrollbarVisible(multiline);
+ editor.getColorsScheme().setEditorFontName(getFont().getFontName());
+ editor.getColorsScheme().setEditorFontSize(getFont().getSize());
return editor;
}
@Override
protected boolean isOneLineMode() {
- return false;
+ return !multiline;
}
};
myEditorTextField.setFontInheritedFromLAF(false);
- myComponent = addChooseFactoryLabel(myEditorTextField, true);
+ myEditorTextField.setFont(EditorUtil.getEditorFont());
+ myComponent = addChooseFactoryLabel(myEditorTextField, multiline);
}
@Override
@Override
public XExpression getExpression() {
- return getEditorsProvider().createExpression(getProject(), myEditorTextField.getDocument(), myExpression.getLanguage(), EvaluationMode.CODE_FRAGMENT);
+ return getEditorsProvider().createExpression(getProject(), myEditorTextField.getDocument(), myExpression.getLanguage(), getMode());
}
@Override