package org.fandev.unscramble;
import com.intellij.execution.ExecutionManager;
import com.intellij.execution.Executor;
import com.intellij.execution.executors.DefaultRunExecutor;
import com.intellij.execution.filters.TextConsoleBuilderFactory;
import com.intellij.execution.ui.ConsoleView;
import com.intellij.execution.ui.ConsoleViewContentType;
import com.intellij.execution.ui.ExecutionConsole;
import com.intellij.execution.ui.RunContentDescriptor;
import com.intellij.execution.ui.actions.CloseAction;
import com.intellij.openapi.actionSystem.ActionGroup;
import com.intellij.openapi.actionSystem.ActionManager;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.DefaultActionGroup;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.DialogWrapper;
import com.intellij.unscramble.UnscrambleDialog;
import org.fandev.lang.fan.FanBundle;
import org.fandev.runner.FanTypeFilter;
import javax.swing.*;
import java.awt.*;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
/**
* Date: Sep 23, 2009
* Time: 11:30:32 PM
*
* @author Dror Bereznitsky
*/
public class FanUnscrambleDialog extends DialogWrapper {
private Project project;
private JPanel stackTracePanel;
private JTextArea strackTraceArea;
protected FanUnscrambleDialog(final Project project) {
super(false);
this.project = project;
setTitle(FanBundle.message("unscramble.dialog.title", new Object[0]));
init();
}
protected JComponent createCenterPanel() {
stackTracePanel = new JPanel(new BorderLayout());
strackTraceArea = new JTextArea(20, 70);
final JScrollPane scrollPane = new JScrollPane(strackTraceArea,
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
stackTracePanel.add(scrollPane, BorderLayout.CENTER);
setText(FanUnscrambleDialog.getTextInClipboard());
return stackTracePanel;
}
@Override
protected void doOKAction() {
super.doOKAction();
// Create the console
final ConsoleView consoleView =
TextConsoleBuilderFactory.getInstance().createBuilder(project).getConsole();
consoleView.addMessageFilter(new FanTypeFilter(project));
consoleView.print(getText(), ConsoleViewContentType.NORMAL_OUTPUT);
final DefaultActionGroup localDefaultActionGroup = new DefaultActionGroup();
// Create the console panel
final MyConsolePanel consolePanel = new MyConsolePanel(consoleView, localDefaultActionGroup);
final RunContentDescriptor runContentDescriptor = new RunContentDescriptor(consoleView, null, consolePanel, FanBundle.message("unscramble.unscrambled.stacktrace.tab", new Object[0])) {
public boolean isContentReuseProhibited() {
return true;
}
};
final Executor localExecutor = DefaultRunExecutor.getRunExecutorInstance();
localDefaultActionGroup.add(new CloseAction(localExecutor, runContentDescriptor, project));
final AnAction[] arrayOfAnAction = consoleView.createConsoleActions();
int i1 = arrayOfAnAction.length;
for (int i2 = 0; i2 < i1; ++i2) {
final AnAction localAnAction = arrayOfAnAction[i2];
localDefaultActionGroup.add(localAnAction);
}
ExecutionManager.getInstance(project).getContentManager().showRunContent(localExecutor, runContentDescriptor);
}
protected void setText(final String text) {
strackTraceArea.setText(text);
}
protected String getText() {
return strackTraceArea.getText();
}
public static String getTextInClipboard() {
String str = null;
try {
final Transferable localTransferable = Toolkit.getDefaultToolkit().getSystemClipboard().getContents(UnscrambleDialog.class);
if (localTransferable != null) {
str = (String) localTransferable.getTransferData(DataFlavor.stringFlavor);
}
}
catch (Exception localException) {
}
return str;
}
private static final class MyConsolePanel extends JPanel {
public MyConsolePanel(final ExecutionConsole executionConsole, final ActionGroup actionGroup) {
super(new BorderLayout());
final JPanel panel = new JPanel(new BorderLayout());
panel.add(ActionManager.getInstance().createActionToolbar("unknown", actionGroup, false).getComponent());
add(panel, BorderLayout.WEST);
add(executionConsole.getComponent(), BorderLayout.CENTER);
}
}
}