| /******************************************************************************* |
| * Copyright (c) 2006 Brad Reynolds 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: |
| * Brad Reynolds - initial API and implementation |
| * IBM Corporation - see bug 137934 |
| ******************************************************************************/ |
| |
| package org.eclipse.jface.examples.databinding.snippets; |
| |
| import java.beans.PropertyChangeListener; |
| import java.beans.PropertyChangeSupport; |
| import java.util.ArrayList; |
| import java.util.List; |
| |
| import org.eclipse.core.databinding.beans.BeansObservables; |
| import org.eclipse.core.databinding.observable.Observables; |
| import org.eclipse.core.databinding.observable.Realm; |
| import org.eclipse.core.databinding.observable.list.IObservableList; |
| import org.eclipse.core.databinding.observable.map.IObservableMap; |
| import org.eclipse.jface.databinding.swt.SWTObservables; |
| import org.eclipse.jface.databinding.viewers.ObservableListContentProvider; |
| import org.eclipse.jface.databinding.viewers.ObservableMapLabelProvider; |
| import org.eclipse.jface.viewers.ILabelProvider; |
| import org.eclipse.jface.viewers.ITableColorProvider; |
| import org.eclipse.jface.viewers.StructuredSelection; |
| import org.eclipse.jface.viewers.TableViewer; |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.events.SelectionAdapter; |
| import org.eclipse.swt.events.SelectionEvent; |
| import org.eclipse.swt.graphics.Color; |
| import org.eclipse.swt.layout.GridData; |
| import org.eclipse.swt.layout.GridLayout; |
| import org.eclipse.swt.widgets.Button; |
| import org.eclipse.swt.widgets.Display; |
| import org.eclipse.swt.widgets.Shell; |
| import org.eclipse.swt.widgets.Table; |
| import org.eclipse.swt.widgets.TableColumn; |
| |
| /** |
| * An example showing how to create a {@link ILabelProvider label provider} that |
| * to provide colors. |
| * |
| * @since 3.2 |
| */ |
| public class Snippet007ColorLabelProvider { |
| /** |
| * @param args |
| */ |
| public static void main(String[] args) { |
| final List persons = new ArrayList(); |
| persons.add(new Person("Fiona Apple", Person.FEMALE)); |
| persons.add(new Person("Elliot Smith", Person.MALE)); |
| persons.add(new Person("Diana Krall", Person.FEMALE)); |
| persons.add(new Person("David Gilmour", Person.MALE)); |
| |
| final Display display = new Display(); |
| Realm.runWithDefault(SWTObservables.getRealm(display), new Runnable() { |
| public void run() { |
| Shell shell = new Shell(display); |
| shell.setText("Gender Bender"); |
| shell.setLayout(new GridLayout()); |
| |
| Table table = new Table(shell, SWT.SINGLE | SWT.H_SCROLL |
| | SWT.V_SCROLL | SWT.BORDER); |
| GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true); |
| table.setLayoutData(gridData); |
| table.setHeaderVisible(true); |
| table.setLinesVisible(true); |
| TableColumn column = new TableColumn(table, SWT.NONE); |
| column.setText("No"); |
| column.setWidth(20); |
| column = new TableColumn(table, SWT.NONE); |
| column.setText("Name"); |
| column.setWidth(100); |
| final TableViewer viewer = new TableViewer(table); |
| |
| IObservableList observableList = Observables |
| .staticObservableList(persons); |
| ObservableListContentProvider contentProvider = new ObservableListContentProvider(); |
| |
| viewer.setContentProvider(contentProvider); |
| |
| // this does not have to correspond to the columns in the table, |
| // we just list all attributes that affect the table content. |
| IObservableMap[] attributes = BeansObservables.observeMaps( |
| contentProvider.getKnownElements(), Person.class, |
| new String[] { "name", "gender" }); |
| |
| class ColorLabelProvider extends ObservableMapLabelProvider |
| implements ITableColorProvider { |
| Color male = display.getSystemColor(SWT.COLOR_BLUE); |
| |
| Color female = new Color(display, 255, 192, 203); |
| |
| ColorLabelProvider(IObservableMap[] attributes) { |
| super(attributes); |
| } |
| |
| // to drive home the point that attributes does not have to |
| // match |
| // the columns |
| // in the table, we change the column text as follows: |
| public String getColumnText(Object element, int index) { |
| if (index == 0) { |
| return Integer |
| .toString(persons.indexOf(element) + 1); |
| } |
| return ((Person) element).getName(); |
| } |
| |
| public Color getBackground(Object element, int index) { |
| return null; |
| } |
| |
| public Color getForeground(Object element, int index) { |
| if (index == 0) |
| return null; |
| Person person = (Person) element; |
| return (person.getGender() == Person.MALE) ? male |
| : female; |
| } |
| |
| public void dispose() { |
| super.dispose(); |
| female.dispose(); |
| } |
| } |
| viewer.setLabelProvider(new ColorLabelProvider(attributes)); |
| |
| viewer.setInput(observableList); |
| |
| table.getColumn(0).pack(); |
| |
| Button button = new Button(shell, SWT.PUSH); |
| button.setText("Toggle Gender"); |
| button.addSelectionListener(new SelectionAdapter() { |
| public void widgetSelected(SelectionEvent arg0) { |
| StructuredSelection selection = (StructuredSelection) viewer |
| .getSelection(); |
| if (selection != null && !selection.isEmpty()) { |
| Person person = (Person) selection |
| .getFirstElement(); |
| person |
| .setGender((person.getGender() == Person.MALE) ? Person.FEMALE |
| : Person.MALE); |
| } |
| } |
| }); |
| |
| shell.setSize(300, 400); |
| shell.open(); |
| |
| while (!shell.isDisposed()) { |
| if (!display.readAndDispatch()) |
| display.sleep(); |
| } |
| } |
| }); |
| display.dispose(); |
| } |
| |
| private static class Person { |
| static final int MALE = 0; |
| |
| static final int FEMALE = 1; |
| |
| private String name; |
| |
| private int gender; |
| |
| private PropertyChangeSupport changeSupport = new PropertyChangeSupport( |
| this); |
| |
| Person(String name, int gender) { |
| this.name = name; |
| this.gender = gender; |
| } |
| |
| /** |
| * Returns the name. Method declared public to satisfy Java bean |
| * conventions |
| * |
| * @return the name |
| */ |
| public String getName() { |
| return name; |
| } |
| |
| /** |
| * @param listener |
| */ |
| public void addPropertyChangeListener(PropertyChangeListener listener) { |
| changeSupport.addPropertyChangeListener(listener); |
| } |
| |
| public void removePropertyChangeListener(PropertyChangeListener listener) { |
| changeSupport.removePropertyChangeListener(listener); |
| } |
| |
| /** |
| * Returns the gender. Method declared public to satisfy Java bean |
| * conventions |
| * |
| * @return the gender |
| */ |
| public int getGender() { |
| return gender; |
| } |
| |
| void setGender(int gender) { |
| changeSupport.firePropertyChange("gender", this.gender, |
| this.gender = gender); |
| } |
| } |
| } |