diff org.eclipse.jface.examples.databinding/src/org/eclipse/jface/examples/databinding/snippets/Snippet028DuplexingObservableValue.d @ 90:6086085e153d

Added databinding snippets. unmodified java sources.
author Frank Benoit <benoit@tionex.de>
date Sun, 19 Apr 2009 11:33:55 +0200
parents
children 5d5bd660917f
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.eclipse.jface.examples.databinding/src/org/eclipse/jface/examples/databinding/snippets/Snippet028DuplexingObservableValue.d	Sun Apr 19 11:33:55 2009 +0200
@@ -0,0 +1,297 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Matthew Hall 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:
+ *     Matthew Hall - initial API and implementation (bug 175735)
+ *     Matthew Hall - bugs 262407, 260337
+ ******************************************************************************/
+
+package org.eclipse.jface.examples.databinding.snippets;
+
+import java.beans.PropertyChangeListener;
+import java.beans.PropertyChangeSupport;
+
+import org.eclipse.core.databinding.DataBindingContext;
+import org.eclipse.core.databinding.beans.BeanProperties;
+import org.eclipse.core.databinding.observable.Realm;
+import org.eclipse.core.databinding.observable.list.IObservableList;
+import org.eclipse.core.databinding.observable.list.WritableList;
+import org.eclipse.core.databinding.observable.value.DuplexingObservableValue;
+import org.eclipse.jface.databinding.swt.SWTObservables;
+import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.jface.databinding.viewers.ViewerSupport;
+import org.eclipse.jface.databinding.viewers.ViewerProperties;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.swt.widgets.Text;
+
+/**
+ * @since 3.2
+ * 
+ */
+public class Snippet028DuplexingObservableValue {
+	protected Shell shell;
+	private TableViewer viewer;
+	private Table table;
+	private Text releaseDate;
+	private Text title;
+	private Text director;
+	private Text writer;
+
+	/**
+	 * Launch the application
+	 * 
+	 * @param args
+	 */
+	public static void main(String[] args) {
+		try {
+			Snippet028DuplexingObservableValue window = new Snippet028DuplexingObservableValue();
+			window.open();
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+
+	/**
+	 * Open the window
+	 */
+	public void open() {
+		final Display display = Display.getDefault();
+		Realm.runWithDefault(SWTObservables.getRealm(display), new Runnable() {
+			public void run() {
+				createContents();
+				shell.open();
+				shell.layout();
+				while (!shell.isDisposed()) {
+					if (!display.readAndDispatch())
+						display.sleep();
+				}
+			}
+		});
+	}
+
+	protected void createContents() {
+		shell = new Shell();
+		shell.setSize(509, 375);
+		shell.setText("Snippet028DuplexingObservableValue.java");
+		final GridLayout gridLayout = new GridLayout();
+		gridLayout.makeColumnsEqualWidth = true;
+		gridLayout.numColumns = 4;
+		shell.setLayout(gridLayout);
+
+		viewer = new TableViewer(shell, SWT.FULL_SELECTION | SWT.MULTI
+				| SWT.BORDER);
+		table = viewer.getTable();
+		table.setLinesVisible(true);
+		table.setHeaderVisible(true);
+		table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 4, 1));
+
+		final TableColumn newColumnTableColumn_1 = new TableColumn(table,
+				SWT.NONE);
+		newColumnTableColumn_1.setWidth(120);
+		newColumnTableColumn_1.setText("Movie");
+
+		final TableColumn newColumnTableColumn = new TableColumn(table,
+				SWT.NONE);
+
+		newColumnTableColumn.setWidth(120);
+		newColumnTableColumn.setText("Release Date");
+
+		final TableColumn newColumnTableColumn_2 = new TableColumn(table,
+				SWT.NONE);
+		newColumnTableColumn_2.setWidth(120);
+		newColumnTableColumn_2.setText("Director");
+
+		final TableColumn newColumnTableColumn_3 = new TableColumn(table,
+				SWT.NONE);
+		newColumnTableColumn_3.setWidth(120);
+		newColumnTableColumn_3.setText("Writer");
+
+		final Label movieLabel = new Label(shell, SWT.NONE);
+		movieLabel.setText("Movie");
+
+		final Label directorLabel = new Label(shell, SWT.NONE);
+		directorLabel.setLayoutData(new GridData());
+		directorLabel.setText("Release Date");
+
+		final Label producerLabel = new Label(shell, SWT.NONE);
+		producerLabel.setText("Director");
+
+		final Label scoreLabel = new Label(shell, SWT.NONE);
+		scoreLabel.setText("Writer");
+
+		title = new Text(shell, SWT.BORDER);
+		final GridData gd_title = new GridData(SWT.FILL, SWT.CENTER, true,
+				false);
+		title.setLayoutData(gd_title);
+
+		releaseDate = new Text(shell, SWT.BORDER);
+		final GridData gd_releaseDate = new GridData(SWT.FILL, SWT.CENTER,
+				true, false);
+		releaseDate.setLayoutData(gd_releaseDate);
+
+		director = new Text(shell, SWT.BORDER);
+		final GridData gd_director = new GridData(SWT.FILL, SWT.CENTER, true,
+				false);
+		director.setLayoutData(gd_director);
+
+		writer = new Text(shell, SWT.BORDER);
+		final GridData gd_writer = new GridData(SWT.FILL, SWT.CENTER, true,
+				false);
+		writer.setLayoutData(gd_writer);
+
+		bindUI();
+	}
+
+	// Minimal JavaBeans support
+	public static abstract class AbstractModelObject {
+		private PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(
+				this);
+
+		public void addPropertyChangeListener(PropertyChangeListener listener) {
+			propertyChangeSupport.addPropertyChangeListener(listener);
+		}
+
+		public void addPropertyChangeListener(String propertyName,
+				PropertyChangeListener listener) {
+			propertyChangeSupport.addPropertyChangeListener(propertyName,
+					listener);
+		}
+
+		public void removePropertyChangeListener(PropertyChangeListener listener) {
+			propertyChangeSupport.removePropertyChangeListener(listener);
+		}
+
+		public void removePropertyChangeListener(String propertyName,
+				PropertyChangeListener listener) {
+			propertyChangeSupport.removePropertyChangeListener(propertyName,
+					listener);
+		}
+
+		protected void firePropertyChange(String propertyName, Object oldValue,
+				Object newValue) {
+			propertyChangeSupport.firePropertyChange(propertyName, oldValue,
+					newValue);
+		}
+	}
+
+	public static class MovieInfo extends AbstractModelObject {
+		private String title;
+		private String releaseDate;
+		private String director;
+		private String writer;
+
+		public MovieInfo(String title, String releaseDate, String director,
+				String writer) {
+			this.title = title;
+			this.releaseDate = releaseDate;
+			this.director = director;
+			this.writer = writer;
+		}
+
+		public String getTitle() {
+			return title;
+		}
+
+		public void setTitle(String title) {
+			firePropertyChange("title", this.title, this.title = title);
+		}
+
+		public String getReleaseDate() {
+			return releaseDate;
+		}
+
+		public void setReleaseDate(String releaseDate) {
+			firePropertyChange("releaseDate", this.releaseDate,
+					this.releaseDate = releaseDate);
+		}
+
+		public String getDirector() {
+			return director;
+		}
+
+		public void setDirector(String director) {
+			firePropertyChange("director", this.director,
+					this.director = director);
+		}
+
+		public String getWriter() {
+			return writer;
+		}
+
+		public void setWriter(String writer) {
+			firePropertyChange("writer", this.writer, this.writer = writer);
+		}
+	}
+
+	private void bindUI() {
+		IObservableList movies = new WritableList();
+		movies.add(new MovieInfo("007: Quantum of Solace", "October 31, 2008",
+				"Marc Forster", "Robert Wade"));
+		movies.add(new MovieInfo("Batman Begins", "June 15, 2005",
+				"Christopher Nolan", "David S. Goyer"));
+		movies.add(new MovieInfo("Cloverfield", "January 18, 2008",
+				"Matt Reeves", "Drew Goddard"));
+		movies.add(new MovieInfo("The Dark Knight", "July 18, 2008",
+				"Christopher Nolan", "David S. Goyer"));
+		movies.add(new MovieInfo("Finding Nemo", "May 30, 2003",
+				"Andrew Stanton", "Andrew Stanton"));
+		movies.add(new MovieInfo("Get Smart", "June 20, 2008", "Peter Segal",
+				"Tom J. Astle"));
+		movies.add(new MovieInfo(
+				"Indiana Jones and the Kingdom of the Crystal Skull",
+				"May 22, 2008", "Steven Spielberg", "Drunken Lemurs"));
+		movies.add(new MovieInfo("Iron Man", "May 2, 2008", "Jon Favreau",
+				"Mark Fergus"));
+		movies.add(new MovieInfo("Raiders of the Lost Ark", "June 12, 1981",
+				"Steven Spielberg", "George Lucas"));
+		movies.add(new MovieInfo("Valkyrie", "December 25, 2008",
+				"Bryan Singer", "Christopher McQuarrie"));
+		movies.add(new MovieInfo("Wall-E", "June 27, 2008", "Andrew Stanton",
+				"Andrew Stanton"));
+		movies.add(new MovieInfo("Wanted", "June 27, 2008",
+				"Timur Bekmambetov", "Michael Brandt"));
+
+		ViewerSupport.bind(viewer, movies, BeanProperties.values(
+				MovieInfo.class, new String[] { "title", "releaseDate",
+						"director", "writer" }));
+
+		// Select Batman Begins and The Dark Knight, which have the same
+		// director and writer
+		viewer.setSelection(new StructuredSelection(new Object[] {
+				movies.get(1), movies.get(3) }));
+
+		DataBindingContext dbc = new DataBindingContext();
+
+		IObservableList selections = ViewerProperties.multipleSelection()
+				.observe(viewer);
+		dbc.bindValue(WidgetProperties.text(SWT.Modify).observe(title),
+				DuplexingObservableValue.withDefaults(BeanProperties.value(
+						"title").observeDetail(selections), "",
+						"<Multiple titles>"));
+		dbc.bindValue(WidgetProperties.text(SWT.Modify).observe(releaseDate),
+				DuplexingObservableValue.withDefaults(BeanProperties.value(
+						"releaseDate").observeDetail(selections), "",
+						"<Multiple dates>"));
+		dbc.bindValue(WidgetProperties.text(SWT.Modify).observe(director),
+				DuplexingObservableValue.withDefaults(BeanProperties.value(
+						"director").observeDetail(selections), "",
+						"<Multiple directors>"));
+		dbc.bindValue(WidgetProperties.text(SWT.Modify).observe(writer),
+				DuplexingObservableValue.withDefaults(BeanProperties.value(
+						"writer").observeDetail(selections), "",
+						"<Multiple writers>"));
+	}
+}