/*******************************************************************************
* Copyright (c) {06/11/2005} {Christopher Thomas}
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*
* Contributors:
* {Christopher Thomas} - initial API and implementation
* chris.alex.thomas@gmail.com
* {Danny Valliant} - Initial Hotkey support and Console output
* xenden@users.sourceforge.net
*******************************************************************************/
package com.antimatterstudios.esftp.ui;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.text.IDocument;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.graphics.Color;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.console.ConsolePlugin;
import org.eclipse.ui.console.IConsole;
import org.eclipse.ui.console.IConsoleConstants;
import org.eclipse.ui.console.MessageConsole;
import org.eclipse.ui.console.MessageConsoleStream;
/**
* Create an instance of this class in any of your plugin classes.
*
* Use it as follows ...
*
* ConsoleDisplayMgr.getDefault().println("Some error msg", ConsoleDisplayMgr.MSG_ERROR);
* ...
* ...
* ConsoleDisplayMgr.getDefault().clear();
* ...
*/
public class ConsoleDisplayMgr
{
private static ConsoleDisplayMgr Console = null;
private MessageConsole m_MessageConsole = null;
private String m_Title = null;
public static final int MSG_INFORMATION = 1;
public static final int MSG_ERROR = 2;
public static final int MSG_WARNING = 3;
protected ConsoleDisplayMgr(String messageTitle){
m_Title = messageTitle;
m_MessageConsole = new MessageConsole(m_Title, null);
m_MessageConsole.setTabWidth(4);
IConsole[] c = new IConsole[]{ m_MessageConsole };
ConsolePlugin.getDefault().getConsoleManager().addConsoles(c);
}
public static ConsoleDisplayMgr getDefault(String consoleTitle){
if(Console == null) Console = new ConsoleDisplayMgr(consoleTitle);
return Console;
}
private void showError(String msg){
Shell sh = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
MessageDialog.openError(sh, "Error", msg);
}
public void print(String msg, int msgKind){
if( msg == null ) return;
/* if console-view in Java-perspective is not active, then show it and
* then display the message in the console attached to it */
if( !displayConsoleView() ){
/*If an exception occurs while displaying in the console, then just diplay atleast the same in a message-box */
showError(msg);
}else{
/* display message on console */
getNewMessageConsoleStream(msgKind).print(msg);
}
}
public void println(String msg, int msgKind){
if( msg == null ) return;
/* if console-view in Java-perspective is not active, then show it and
* then display the message in the console attached to it */
if( !displayConsoleView() ){
/*If an exception occurs while displaying in the console, then just diplay atleast the same in a message-box */
showError(msg);
}else{
/* display message on console */
getNewMessageConsoleStream(msgKind).println(msg);
}
}
public void clear(){
IDocument document = m_MessageConsole.getDocument();
if (document != null) {
document.set("");
}
}
private boolean displayConsoleView(){
try{
IWorkbenchWindow activeWorkbenchWindow = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
if( activeWorkbenchWindow != null ){
IWorkbenchPage activePage = activeWorkbenchWindow.getActivePage();
if( activePage != null ){
activePage.showView(IConsoleConstants.ID_CONSOLE_VIEW, null, IWorkbenchPage.VIEW_VISIBLE);
}
}
} catch (PartInitException partEx) {
return false;
}
return true;
}
private MessageConsoleStream getNewMessageConsoleStream(int msgKind){
int swtColorId = SWT.COLOR_DARK_GREEN;
switch (msgKind){
case MSG_INFORMATION:
swtColorId = SWT.COLOR_DARK_GREEN;
break;
case MSG_ERROR:
swtColorId = SWT.COLOR_DARK_MAGENTA;
break;
case MSG_WARNING:
swtColorId = SWT.COLOR_DARK_BLUE;
break;
}
MessageConsoleStream msgConsoleStream = m_MessageConsole.newMessageStream();
if (msgConsoleStream == null) {
System.out.print("Error getting console message stream");
}else{
Color c = null;
Display d = Display.getCurrent();
if(d != null) c = d.getSystemColor(swtColorId);
if(c != null) msgConsoleStream.setColor(c);
}
return msgConsoleStream;
}
}