/*
- * Copyright 2000-2014 JetBrains s.r.o.
+ * Copyright 2000-2016 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.util.xmlb.annotations.Attribute;
import com.intellij.util.xmlb.annotations.Text;
import com.intellij.xdebugger.XExpression;
+import com.intellij.xdebugger.evaluation.EvaluationMode;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@Attribute("custom")
public String myCustomInfo;
+ @Attribute("mode")
+ public EvaluationMode myMode = EvaluationMode.EXPRESSION;
+
@Text
public String myOldExpression;
public XExpressionState() {
}
- public XExpressionState(boolean disabled, @NotNull String expression, String language, String customInfo) {
+ public XExpressionState(boolean disabled, @NotNull String expression, String language, String customInfo, EvaluationMode mode) {
myDisabled = disabled;
myExpression = expression;
myLanguage = language;
myCustomInfo = customInfo;
+ myMode = mode;
}
public XExpressionState(boolean disabled, XExpression expression) {
- this(disabled, expression.getExpression(), expression.getLanguage() != null ? expression.getLanguage().getID() : null, expression.getCustomInfo());
+ this(disabled,
+ expression.getExpression(),
+ expression.getLanguage() != null ? expression.getLanguage().getID() : null,
+ expression.getCustomInfo(),
+ expression.getMode());
}
public XExpressionState(XExpression expression) {
if (StringUtil.isEmptyOrSpaces(myExpression)) {
return null;
}
- return new XExpressionImpl(myExpression, Language.findLanguageByID(myLanguage), myCustomInfo);
+ return new XExpressionImpl(myExpression, Language.findLanguageByID(myLanguage), myCustomInfo, myMode);
}
}
onCheckboxChanged();
}
};
- myLogExpressionComboBox = new XDebuggerExpressionComboBox(project, debuggerEditorsProvider, LOG_EXPRESSION_HISTORY_ID, myBreakpoint.getSourcePosition());
+ myLogExpressionComboBox = new XDebuggerExpressionComboBox(project, debuggerEditorsProvider, LOG_EXPRESSION_HISTORY_ID, myBreakpoint.getSourcePosition(), true);
JComponent logExpressionComponent = myLogExpressionComboBox.getComponent();
myLogExpressionPanel.add(logExpressionComponent, BorderLayout.CENTER);
myLogExpressionComboBox.setEnabled(false);
myCustomPanels = new ArrayList<>();
if (debuggerEditorsProvider != null) {
myConditionEnabledCheckbox = new JBCheckBox(XDebuggerBundle.message("xbreakpoints.condition.checkbox"));
- myConditionComboBox = new XDebuggerExpressionComboBox(project, debuggerEditorsProvider, CONDITION_HISTORY_ID, myBreakpoint.getSourcePosition());
+ myConditionComboBox = new XDebuggerExpressionComboBox(project, debuggerEditorsProvider, CONDITION_HISTORY_ID, myBreakpoint.getSourcePosition(), true);
JComponent conditionComponent = myConditionComboBox.getComponent();
conditionComponent.setBorder(JBUI.Borders.emptyRight(3));
myConditionExpressionPanel.add(conditionComponent, BorderLayout.CENTER);
@Override
@NotNull
- protected XDebuggerEditorBase getInputEditor() {
+ public XDebuggerEditorBase getInputEditor() {
return myMultilineEditor;
}
+ public JPanel getMainComponent() {
+ return myMainPanel;
+ }
+
@Override
public void addComponent(JPanel contentPanel, JPanel resultPanel) {
final JBSplitter splitter = new JBSplitter(true, 0.3f, 0.2f, 0.7f);
*/
package com.intellij.xdebugger.impl.ui;
+import com.intellij.icons.AllIcons;
import com.intellij.ide.DataManager;
import com.intellij.lang.Language;
import com.intellij.lang.LanguageUtil;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.fileTypes.FileType;
import com.intellij.openapi.project.Project;
+import com.intellij.openapi.ui.ComponentWithBrowseButton;
+import com.intellij.openapi.ui.DialogWrapper;
import com.intellij.openapi.ui.popup.JBPopupFactory;
import com.intellij.openapi.ui.popup.ListPopup;
import com.intellij.openapi.util.IconLoader;
import com.intellij.xdebugger.evaluation.XDebuggerEditorsProvider;
import com.intellij.xdebugger.impl.XDebuggerHistoryManager;
import com.intellij.xdebugger.impl.breakpoints.XExpressionImpl;
+import com.intellij.xdebugger.impl.evaluate.CodeFragmentInputComponent;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
false);
}
- protected JPanel addChooseFactoryLabel(JComponent component, boolean top) {
- JPanel panel = new JPanel(new BorderLayout());
- panel.add(component, BorderLayout.CENTER);
+ protected JPanel decorate(JComponent component, boolean multiline, boolean showEditor) {
+ JPanel panel = JBUI.Panels.simplePanel();
- JPanel factoryPanel = new JPanel(new BorderLayout());
- factoryPanel.add(myChooseFactory, top ? BorderLayout.NORTH : BorderLayout.CENTER);
+ JPanel factoryPanel = JBUI.Panels.simplePanel();
+ factoryPanel.add(myChooseFactory, multiline ? BorderLayout.NORTH : BorderLayout.CENTER);
panel.add(factoryPanel, BorderLayout.WEST);
+
+ if (!multiline && showEditor) {
+ ComponentWithBrowseButton<JComponent> componentWithButton =
+ new ComponentWithBrowseButton<>(component, e -> showCodeFragmentEditor(component, this));
+ componentWithButton.setButtonIcon(AllIcons.Actions.ShowViewer);
+ componentWithButton.getButton().setDisabledIcon(IconLoader.getDisabledIcon(AllIcons.Actions.ShowViewer));
+ panel.add(componentWithButton, BorderLayout.CENTER);
+ } else {
+ panel.add(component, BorderLayout.CENTER);
+ }
+
return panel;
}
if (language == null) {
language = LanguageUtil.getFileTypeLanguage(getEditorsProvider().getFileType());
}
+ text = new XExpressionImpl(text.getExpression(), language, text.getCustomInfo(), text.getMode());
}
- text = new XExpressionImpl(text.getExpression(), language, text.getCustomInfo(), getMode());
Collection<Language> languages = getEditorsProvider().getSupportedLanguages(myProject, mySourcePosition);
boolean many = languages.size() > 1;
setExpression(expressions.get(myHistoryIndex));
}
}
+
+ private void showCodeFragmentEditor(Component parent, XDebuggerEditorBase baseEditor) {
+ DialogWrapper dialog = new DialogWrapper(parent, true) {
+ CodeFragmentInputComponent inputComponent =
+ new CodeFragmentInputComponent(baseEditor.getProject(), baseEditor.getEditorsProvider(), mySourcePosition,
+ XExpressionImpl.changeMode(baseEditor.getExpression(), EvaluationMode.CODE_FRAGMENT),
+ null, null);
+
+ {
+ setTitle("Edit");
+ init();
+ }
+
+ @Nullable
+ @Override
+ protected String getDimensionServiceKey() {
+ return "#xdebugger.code.fragment.editor";
+ }
+
+ @Nullable
+ @Override
+ protected JComponent createCenterPanel() {
+ return inputComponent.getMainComponent();
+ }
+
+ @Override
+ protected void doOKAction() {
+ super.doOKAction();
+ baseEditor.setExpression(inputComponent.getInputEditor().getExpression());
+ IdeFocusManager.findInstance().requestFocus(baseEditor.getEditorComponent(), false);
+ }
+
+ @Nullable
+ @Override
+ public JComponent getPreferredFocusedComponent() {
+ return inputComponent.getInputEditor().getPreferredFocusedComponent();
+ }
+ };
+ dialog.show();
+ }
}
*/
public class XDebuggerExpressionComboBox extends XDebuggerEditorBase {
private final JComponent myComponent;
- private final ComboBox myComboBox;
+ private final ComboBox<XExpression> myComboBox;
private EditorComboBoxEditor myEditor;
private XExpression myExpression;
- public XDebuggerExpressionComboBox(final @NotNull Project project, final @NotNull XDebuggerEditorsProvider debuggerEditorsProvider, final @Nullable @NonNls String historyId,
- final @Nullable XSourcePosition sourcePosition) {
+ public XDebuggerExpressionComboBox(@NotNull Project project, @NotNull XDebuggerEditorsProvider debuggerEditorsProvider, @Nullable @NonNls String historyId,
+ @Nullable XSourcePosition sourcePosition, boolean showEditor) {
super(project, debuggerEditorsProvider, EvaluationMode.EXPRESSION, historyId, sourcePosition);
- myComboBox = new ComboBox(100);
+ myComboBox = new ComboBox<>(100);
myComboBox.setEditable(true);
myExpression = XExpressionImpl.EMPTY_EXPRESSION;
Dimension minimumSize = new Dimension(myComboBox.getMinimumSize());
myComboBox.setMinimumSize(minimumSize);
initEditor();
fillComboBox();
- myComponent = addChooseFactoryLabel(myComboBox, false);
+ myComponent = decorate(myComboBox, false, showEditor);
}
public ComboBox getComboBox() {
public XExpression getExpression() {
Object document = myEditor.getItem();
if (document instanceof Document) { // sometimes null on Mac
- return getEditorsProvider().createExpression(getProject(), (Document)document, myExpression.getLanguage(), EvaluationMode.EXPRESSION);
+ return getEditorsProvider().createExpression(getProject(), (Document)document, myExpression.getLanguage(), myExpression.getMode());
}
return myExpression;
}
myEditorTextField.setFontInheritedFromLAF(false);
myEditorTextField.setFont(EditorUtil.getEditorFont());
}
- myComponent = addChooseFactoryLabel(myEditorTextField, multiline);
+ myComponent = decorate(myEditorTextField, multiline, false);
}
@Override
public XDebuggerTreeInplaceEditor(final XDebuggerTreeNode node, @NonNls final String historyId) {
myNode = node;
myTree = myNode.getTree();
- myExpressionEditor = new XDebuggerExpressionComboBox(myTree.getProject(), myTree.getEditorsProvider(), historyId, myTree.getSourcePosition());
+ myExpressionEditor = new XDebuggerExpressionComboBox(myTree.getProject(), myTree.getEditorsProvider(), historyId, myTree.getSourcePosition(), false);
}
@Override