/* * Copyright 2003-2010 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.codehaus.groovy.eclipse.ui.console; import java.util.ArrayList; import java.util.List; import org.codehaus.groovy.eclipse.TraceCategory; import org.eclipse.debug.ui.IDebugUIConstants; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.resource.JFaceResources; import org.eclipse.jface.text.ITypedRegion; import org.eclipse.jface.text.rules.FastPartitioner; import org.eclipse.jface.text.rules.IPredicateRule; import org.eclipse.jface.text.rules.RuleBasedPartitionScanner; import org.eclipse.jface.text.rules.SingleLineRule; import org.eclipse.jface.text.rules.Token; import org.eclipse.jface.util.IPropertyChangeListener; import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.StyleRange; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.console.IConsoleDocumentPartitioner; import org.eclipse.ui.console.IConsoleView; import org.eclipse.ui.console.TextConsole; import org.eclipse.ui.part.IPageBookViewPage; /** * * @author andrew * @created Nov 24, 2010 */ public class GroovyConsole extends TextConsole { public final static String CONSOLE_TYPE = "GroovyEventTraceConsole"; //$NON-NLS-1$ final static RuleBasedPartitionScanner scanner = new RuleBasedPartitionScanner(); { List<IPredicateRule> rules = new ArrayList<IPredicateRule>(TraceCategory.values().length); for (TraceCategory category : TraceCategory.values()) { rules.add(new SingleLineRule(category.getPaddedLabel(), "", new Token(category.label))); } scanner.setPredicateRules(rules.toArray(new IPredicateRule[0])); } /** * Provides a partitioner for this console type */ class GroovyEventTraceConsolePartitioner extends FastPartitioner implements IConsoleDocumentPartitioner { public GroovyEventTraceConsolePartitioner() { super(scanner, TraceCategory.stringValues()); getDocument().setDocumentPartitioner(this); } public boolean isReadOnly(int offset) { return true; } public StyleRange[] getStyleRanges(int offset, int length) { ITypedRegion regions[] = computePartitioning(offset, length); StyleRange[] styles = new StyleRange[regions.length]; for (int i = 0; i < regions.length; i++) { if (TraceCategory.CLASSPATH.label.equals(regions[i].getType())) { styles[i] = new StyleRange(offset, length, Display.getDefault().getSystemColor(SWT.COLOR_DARK_GREEN), null); } else if (TraceCategory.COMPILER.label.equals(regions[i].getType())) { styles[i] = new StyleRange(offset, length, Display.getDefault().getSystemColor(SWT.COLOR_BLUE), null); } else if (TraceCategory.DSL.label.equals(regions[i].getType())) { styles[i] = new StyleRange(offset, length, Display.getDefault().getSystemColor(SWT.COLOR_DARK_RED), null); } else if (TraceCategory.REFACTORING.label.equals(regions[i].getType())) { styles[i] = new StyleRange(offset, length, Display.getDefault().getSystemColor(SWT.COLOR_DARK_YELLOW), null); } else { styles[i] = new StyleRange(offset, length, null, null); } } return styles; } } public GroovyConsole(String name, String consoleType, ImageDescriptor imageDescriptor, boolean autoLifecycle) { super(name, consoleType, imageDescriptor, autoLifecycle); } private GroovyEventTraceConsolePartitioner partitioner = new GroovyEventTraceConsolePartitioner(); private IPropertyChangeListener propertyListener = new IPropertyChangeListener() { public void propertyChange(PropertyChangeEvent event) { String property = event.getProperty(); if (property.equals(IDebugUIConstants.PREF_CONSOLE_FONT)) { setFont(JFaceResources.getFont(IDebugUIConstants.PREF_CONSOLE_FONT)); } } }; public GroovyConsole() { super("Groovy Event Trace Console", CONSOLE_TYPE, null, true); Font font = JFaceResources.getFont(IDebugUIConstants.PREF_CONSOLE_FONT); setFont(font); partitioner.connect(getDocument()); } /** * @see org.eclipse.ui.console.AbstractConsole#init() */ @Override protected void init() { JFaceResources.getFontRegistry().addListener(propertyListener); } /** * @see org.eclipse.ui.console.TextConsole#dispose() */ @Override protected void dispose() { JFaceResources.getFontRegistry().removeListener(propertyListener); super.dispose(); } /** * @see org.eclipse.ui.console.TextConsole#getPartitioner() */ @Override protected IConsoleDocumentPartitioner getPartitioner() { return partitioner; } /** * @see org.eclipse.ui.console.TextConsole#createPage(org.eclipse.ui.console.IConsoleView) */ @Override public IPageBookViewPage createPage(IConsoleView view) { return new GroovyConsolePage(this, view); } }