| /******************************************************************************* | |
| * Copyright (c) 2000, 2007 IBM Corporation 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: | |
| * IBM Corporation - initial API and implementation | |
| *******************************************************************************/ | |
| package org.eclipse.swt.snippets; | |
| /* | |
| * Table snippet: custom draw a Table's selection rectangle as a gradient | |
| * | |
| * For a detailed explanation of this snippet see | |
| * http://www.eclipse.org/articles/Article-CustomDrawingTableAndTreeItems/customDraw.htm#_example3 | |
| * | |
| * For a list of all SWT example snippets see | |
| * http://www.eclipse.org/swt/snippets/ | |
| * | |
| * @since 3.2 | |
| */ | |
| import org.eclipse.swt.*; | |
| import org.eclipse.swt.graphics.*; | |
| import org.eclipse.swt.widgets.*; | |
| public class Example3 { | |
| public static void main(String[] args) { | |
| Display display = new Display(); | |
| Shell shell = new Shell(display); | |
| final Color red = display.getSystemColor(SWT.COLOR_RED); | |
| final Color yellow = display.getSystemColor(SWT.COLOR_YELLOW); | |
| final Table table = new Table(shell, SWT.FULL_SELECTION); | |
| table.setHeaderVisible(true); | |
| new TableColumn(table, SWT.NONE).setWidth(100); | |
| new TableColumn(table, SWT.NONE).setWidth(100); | |
| new TableColumn(table, SWT.NONE).setWidth(100); | |
| for (int i = 0; i < 5; i++) { | |
| TableItem item = new TableItem(table, SWT.NONE); | |
| item.setText(0, "item " + i + " col 0"); | |
| item.setText(1, "item " + i + " col 1"); | |
| item.setText(2, "item " + i + " col 2"); | |
| } | |
| table.pack(); | |
| /* | |
| * NOTE: EraseItem is called repeatedly. Therefore it is critical | |
| * for performance that this method be as efficient as possible. | |
| */ | |
| table.addListener(SWT.EraseItem, new Listener() { | |
| public void handleEvent(Event event) { | |
| event.detail &= ~SWT.HOT; | |
| if ((event.detail & SWT.SELECTED) == 0) return; /* item not selected */ | |
| int clientWidth = table.getClientArea().width; | |
| GC gc = event.gc; | |
| Color oldForeground = gc.getForeground(); | |
| Color oldBackground = gc.getBackground(); | |
| gc.setForeground(red); | |
| gc.setBackground(yellow); | |
| gc.fillGradientRectangle(0, event.y, clientWidth, event.height, false); | |
| gc.setForeground(oldForeground); | |
| gc.setBackground(oldBackground); | |
| event.detail &= ~SWT.SELECTED; | |
| } | |
| }); | |
| shell.pack(); | |
| shell.open(); | |
| while (!shell.isDisposed()) { | |
| if (!display.readAndDispatch()) display.sleep(); | |
| } | |
| display.dispose(); | |
| } | |
| } |