package net.sf.eclipsefp.haskell.ui.console; import java.io.OutputStreamWriter; import java.io.UnsupportedEncodingException; import java.io.Writer; import java.util.LinkedList; import java.util.List; import net.sf.eclipsefp.haskell.ui.HaskellUIPlugin; import net.sf.eclipsefp.haskell.ui.internal.preferences.IPreferenceConstants; import net.sf.eclipsefp.haskell.ui.util.HaskellUIImages; import net.sf.eclipsefp.haskell.ui.util.IImageNames; import net.sf.eclipsefp.haskell.util.FileUtil; import org.eclipse.ui.console.ConsolePlugin; import org.eclipse.ui.console.IConsole; import org.eclipse.ui.console.IConsoleManager; import org.eclipse.ui.console.IOConsole; import org.eclipse.ui.console.IOConsoleOutputStream; /** * Haskell-specific IOConsole class. */ public class HaskellConsole extends IOConsole { public List<IOConsoleOutputStream> streams=new LinkedList<>(); /** * Construct and register the console with the console manager. */ public HaskellConsole(final String name) { super(name, HaskellConsole.class.getName(),HaskellUIImages.getImageDescriptor( IImageNames.HASKELL_MISC ),FileUtil.UTF8,true); // Register console with the console manager. IConsoleManager mgr = ConsolePlugin.getDefault().getConsoleManager(); mgr.addConsoles(new IConsole[] { this }); } /** * Create an output stream writer, ensuring that the console's output is blue. */ public Writer createOutputWriter() { final IOConsoleOutputStream outputStream = newOutputStream(); // using internals outputStream.setActivateOnWrite( HaskellUIPlugin.getDefault().getPreferenceStore().getBoolean( IPreferenceConstants.HASKELL_CONSOLE_ACTIVATE_ON_WRITE ) ); streams.add(outputStream); /*final Display stdDisplay = HaskellUIPlugin.getStandardDisplay(); stdDisplay.syncExec( new Runnable() { @Override public void run() { // JP likes blue for the console's text color. outputStream.setColor(stdDisplay.getSystemColor( SWT.COLOR_BLUE )); } });*/ try { return new OutputStreamWriter(outputStream,FileUtil.UTF8); } catch (UnsupportedEncodingException ioo){ return new OutputStreamWriter(outputStream); } } public void setActivate(final boolean activate){ for (IOConsoleOutputStream str:streams){ str.setActivateOnWrite( activate ); } } }