/******************************************************************************* * Copyright (c) 2007 Michael Krkoska and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Michael Krkoska - initial API and implementation *******************************************************************************/ package org.eclipse.jface.snippets.viewers; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.eclipse.jface.resource.JFaceResources; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.ColumnPixelData; import org.eclipse.jface.viewers.IFontProvider; import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.StyleRangeLabelProvider; import org.eclipse.jface.viewers.TableLayout; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.StyleRange; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.TableColumn; /** * A simple TableViewer using a StyleRangeLabelProvider to color a part of the label. * * @author Michael Krkoska */ public class Snippet041StyleRangeProviderSimple { private static final Display DISPLAY = Display.getDefault(); private static final Color GREEN = DISPLAY.getSystemColor(SWT.COLOR_DARK_GREEN); private static final Image IMAGE_BIG = DISPLAY.getSystemImage(SWT.ICON_WARNING); private static final Image IMAGE = new Image(DISPLAY, IMAGE_BIG.getImageData().scaledTo(16, 16)); private static final Pattern BRACES = Pattern.compile("\\(.*\\)"); public static void main( String[] args ) { Shell shell = new Shell(DISPLAY, SWT.CLOSE); shell.setSize(300, 300); shell.setLayout(new GridLayout()); Snippet041StyleRangeProviderSimple example = new Snippet041StyleRangeProviderSimple(); example.createPartControl(shell); shell.open(); while ( !shell.isDisposed() ) { if ( !DISPLAY.readAndDispatch() ) { DISPLAY.sleep(); } } DISPLAY.dispose(); } private TableViewer viewer; public void createPartControl( Composite parent ) { // SWT.FULL_SELECTION is needed on win32 as long as Bug 168807 exists viewer = new TableViewer(parent, SWT.FULL_SELECTION); GridData data = new GridData(GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL | GridData.FILL_BOTH); viewer.getControl().setLayoutData(data); viewer.setContentProvider(new ArrayContentProvider()); createColumns(); viewer.setLabelProvider(new MyStyleRangeLabelProvider(new MyLabelProvider())); // viewer.setLabelProvider(new MyLabelProvider()); StyleRangeLabelProvider.setUpOwnerDraw(viewer); String[] s = new String[10]; for ( int i = 0; i < s.length; i++ ) { s[i] = "row " + i + " (green)"; } viewer.setInput(s); } private void createColumns() { TableLayout layout = new TableLayout(); viewer.getTable().setLayout(layout); viewer.getTable().setHeaderVisible(false); viewer.getTable().setLinesVisible(true); int width = 300 - 2 * 5 - viewer.getTable().getShell().computeTrim(0, 0, 0, 0).width; new TableColumn(viewer.getTable(), SWT.NONE); layout.addColumnData(new ColumnPixelData(width)); } private final class MyLabelProvider extends LabelProvider implements IFontProvider { public Font getFont( Object element ) { return JFaceResources.getFont("Font"); } public Image getImage( Object element ) { // if(element.toString().startsWith("row 1")) // return IMAGE_BIG; if ( !element.toString().startsWith("row 0") ) { return IMAGE; } return null; } } private final class MyStyleRangeLabelProvider extends StyleRangeLabelProvider { private MyStyleRangeLabelProvider( ILabelProvider labelProvider ) { super(labelProvider); } public StyleRange[] getStyleRanges( Object element, int columnIndex, String label ) { Matcher matcher = BRACES.matcher(label); if ( matcher.find() ) { StyleRange styleRange = new StyleRange(matcher.start(), matcher.end() - matcher.start(), null, null); styleRange.foreground = GREEN; return new StyleRange[] { styleRange }; } return null; } } }