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();
}
}