/*******************************************************************************
 * Copyright (c) 2000, 2004 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 example snippet: color cells and rows in table
 *
 * For a list of all SWT example snippets see
 * http://www.eclipse.org/swt/snippets/
 * 
 * @since 3.0
 */
import org.eclipse.swt.*;
import org.eclipse.swt.graphics.*;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;

public class Snippet129 {
 
public static void main(String[] args) {
	Display display = new Display();
	Color red = display.getSystemColor(SWT.COLOR_RED);
	Color blue = display.getSystemColor(SWT.COLOR_BLUE);
	Color white = display.getSystemColor(SWT.COLOR_WHITE);
	Color gray = display.getSystemColor(SWT.COLOR_GRAY);
	Shell shell = new Shell(display);
	shell.setLayout(new FillLayout());
	Table table = new Table(shell, SWT.BORDER | SWT.FULL_SELECTION);
	table.setBackground(gray);
	TableColumn column1 = new TableColumn(table, SWT.NONE);
	TableColumn column2 = new TableColumn(table, SWT.NONE);
	TableColumn column3 = new TableColumn(table, SWT.NONE);
	TableItem item = new TableItem(table, SWT.NONE);
	item.setText(new String[] {"entire","row","red foreground"});
	item.setForeground(red);
	item = new TableItem(table, SWT.NONE);
	item.setText(new String[] {"entire","row","red background"});
	item.setBackground(red);
	item = new TableItem(table, SWT.NONE);
	item.setText(new String[] {"entire","row","white fore/red back"});
	item.setForeground(white);
	item.setBackground(red);
	item = new TableItem(table, SWT.NONE);
	item.setText(new String[] {"normal","blue foreground","red foreground"});
	item.setForeground(1, blue);
	item.setForeground(2, red);
	item = new TableItem(table, SWT.NONE);
	item.setText(new String[] {"normal","blue background","red background"});
	item.setBackground(1, blue);
	item.setBackground(2, red);
	item = new TableItem(table, SWT.NONE);
	item.setText(new String[] {"white fore/blue back","normal","white fore/red back"});
	item.setForeground(0, white);
	item.setBackground(0, blue);
	item.setForeground(2, white);
	item.setBackground(2, red);
	
	column1.pack();
	column2.pack();
	column3.pack();
	
	shell.pack();
	shell.open();
	while (!shell.isDisposed()) {
		if (!display.readAndDispatch())
			display.sleep();
	}
	display.dispose();
}
}
