IDEA-139797 Default Theme doesn't allow to apply font size to evaluate expression...
[idea/community.git] / platform / xdebugger-impl / src / com / intellij / xdebugger / impl / evaluate / CodeFragmentInputComponent.java
1 /*
2  * Copyright 2000-2015 JetBrains s.r.o.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.intellij.xdebugger.impl.evaluate;
17
18 import com.intellij.openapi.project.Project;
19 import com.intellij.openapi.ui.Splitter;
20 import com.intellij.openapi.actionSystem.*;
21 import com.intellij.openapi.Disposable;
22 import com.intellij.xdebugger.XDebuggerBundle;
23 import com.intellij.xdebugger.XExpression;
24 import com.intellij.xdebugger.XSourcePosition;
25 import com.intellij.xdebugger.evaluation.XDebuggerEditorsProvider;
26 import com.intellij.xdebugger.impl.breakpoints.XExpressionImpl;
27 import com.intellij.xdebugger.impl.ui.XDebuggerEditorBase;
28 import com.intellij.xdebugger.impl.ui.XDebuggerExpressionEditor;
29 import org.jetbrains.annotations.NotNull;
30 import org.jetbrains.annotations.Nullable;
31
32 import javax.swing.*;
33 import java.awt.*;
34
35 /**
36  * @author nik
37  */
38 public class CodeFragmentInputComponent extends EvaluationInputComponent {
39   private final XDebuggerExpressionEditor myMultilineEditor;
40   private final JPanel myMainPanel;
41
42   public CodeFragmentInputComponent(final @NotNull Project project, @NotNull XDebuggerEditorsProvider editorsProvider,
43                                     final @Nullable XSourcePosition sourcePosition, @Nullable XExpression statements, Disposable parentDisposable) {
44     super(XDebuggerBundle.message("dialog.title.evaluate.code.fragment"));
45     myMultilineEditor = new XDebuggerExpressionEditor(project, editorsProvider, "evaluateCodeFragment", sourcePosition,
46                                                       statements != null ? statements : XExpressionImpl.EMPTY_CODE_FRAGMENT, true);
47     myMainPanel = new JPanel(new BorderLayout());
48     JPanel editorPanel = new JPanel(new BorderLayout());
49     editorPanel.add(myMultilineEditor.getComponent(), BorderLayout.CENTER);
50     DefaultActionGroup group = new DefaultActionGroup();
51     group.add(new HistoryNavigationAction(false, IdeActions.ACTION_PREVIOUS_OCCURENCE, parentDisposable));
52     group.add(new HistoryNavigationAction(true, IdeActions.ACTION_NEXT_OCCURENCE, parentDisposable));
53     editorPanel.add(ActionManager.getInstance().createActionToolbar(ActionPlaces.UNKNOWN, group, false).getComponent(), BorderLayout.EAST);
54     //myMainPanel.add(new JLabel(XDebuggerBundle.message("xdebugger.label.text.code.fragment")), BorderLayout.NORTH);
55     myMainPanel.add(editorPanel, BorderLayout.CENTER);
56     if (statements != null) {
57       myMultilineEditor.setExpression(statements);
58     }
59   }
60
61   @NotNull
62   protected XDebuggerEditorBase getInputEditor() {
63     return myMultilineEditor;
64   }
65
66   @Override
67   public void addComponent(JPanel contentPanel, JPanel resultPanel) {
68     final Splitter splitter = new Splitter(true, 0.3f, 0.2f, 0.7f);
69     contentPanel.add(splitter, BorderLayout.CENTER);
70     splitter.setFirstComponent(myMainPanel);
71     splitter.setSecondComponent(resultPanel);
72   }
73
74   private class HistoryNavigationAction extends AnAction {
75     private final boolean myForward;
76
77     public HistoryNavigationAction(boolean forward, String actionId, Disposable parentDisposable) {
78       myForward = forward;
79       final AnAction action = ActionManager.getInstance().getAction(actionId);
80       copyFrom(action);
81       registerCustomShortcutSet(action.getShortcutSet(), myMainPanel, parentDisposable);
82     }
83
84     @Override
85     public void update(AnActionEvent e) {
86       e.getPresentation().setEnabled(myForward ? myMultilineEditor.canGoForward() : myMultilineEditor.canGoBackward());
87     }
88
89     @Override
90     public void actionPerformed(AnActionEvent e) {
91       if (myForward) {
92         myMultilineEditor.goForward();
93       }
94       else {
95         myMultilineEditor.goBackward();
96       }
97     }
98   }
99 }