package jetbrains.mps.debugger.java.runtime.ui.evaluation; /*Generated by MPS */ import javax.swing.JTabbedPane; import jetbrains.mps.ide.embeddableEditor.EmbeddableEditor; import jetbrains.mps.debugger.java.runtime.evaluation.container.IEvaluationContainer; import jetbrains.mps.nodeEditor.Highlighter; import jetbrains.mps.project.Project; import org.jetbrains.annotations.NotNull; import jetbrains.mps.debugger.java.runtime.state.DebugSession; import org.jetbrains.mps.openapi.model.SNode; import javax.swing.JSplitPane; import com.intellij.ui.components.JBScrollPane; import jetbrains.mps.debugger.java.runtime.evaluation.container.Properties; import javax.swing.AbstractAction; import java.awt.event.ActionEvent; import javax.swing.KeyStroke; import javax.swing.JComponent; import com.intellij.openapi.application.ApplicationManager; public class EvaluationPanel extends EvaluationUi { private final JTabbedPane myTabbedPane = new JTabbedPane(); private EmbeddableEditor myEditor; private EmbeddableEditor myResultEditor; private final IEvaluationContainer myEvaluationModel; private final Highlighter myHighlighter; private volatile boolean myIsDisposed = false; public EvaluationPanel(final Project mpsProject, @NotNull DebugSession session, IEvaluationContainer evaluationModel, boolean autoUpdate) { super(session, autoUpdate); myHighlighter = mpsProject.getComponent(Highlighter.class); myEvaluationModel = evaluationModel; mpsProject.getModelAccess().executeCommand(new Runnable() { public void run() { SNode node = myEvaluationModel.getNode(); myEditor = new EmbeddableEditor(mpsProject, true); myEditor.editNode(node); } }); myTree.addModel(myEvaluationModel); if (myDebugSession.isPaused()) { myTree.updateLocation(myDebugSession.getUiState().getThread().getThread()); } JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT); splitPane.setResizeWeight(0.8); splitPane.setTopComponent(myEditor); splitPane.setBottomComponent(new JBScrollPane(myTree)); if (Properties.IS_DEVELOPER_MODE) { myTabbedPane.addTab("Main", splitPane); add(myTabbedPane); } else { add(splitPane); } myEditor.registerKeyboardAction(new AbstractAction() { @Override public void actionPerformed(ActionEvent p0) { evaluate(); } }, KeyStroke.getKeyStroke("ctrl ENTER"), JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT); myHighlighter.addAdditionalEditor(myEditor.getEditor()); } public IEvaluationContainer getEvaluationContainer() { return myEvaluationModel; } @Override public void dispose() { ApplicationManager.getApplication().assertIsDispatchThread(); if (myIsDisposed) { return; } myIsDisposed = true; super.dispose(); myHighlighter.removeAdditionalEditor(myEditor.getEditor()); myEditor.disposeEditor(); } @Override public void evaluate() { evaluate(myEvaluationModel); } @Override protected void update() { myEvaluationModel.updateState(); } public JComponent getPreferredFocusedComponent() { return myEditor.getPreferredFocusedComponent(); } }