diff org.eclipse.jface.examples.databinding/src/org/eclipse/jface/examples/databinding/snippets/Snippet029TreeViewerMultiListProperty.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/Snippet029TreeViewerMultiListProperty.d	Sun Apr 19 11:33:55 2009 +0200
@@ -0,0 +1,257 @@
+/*******************************************************************************
+ * 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 java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.databinding.beans.BeanProperties;
+import org.eclipse.core.databinding.observable.Realm;
+import org.eclipse.core.databinding.property.list.IListProperty;
+import org.eclipse.core.databinding.property.list.MultiListProperty;
+import org.eclipse.jface.databinding.swt.SWTObservables;
+import org.eclipse.jface.databinding.viewers.ObservableListTreeContentProvider;
+import org.eclipse.jface.databinding.viewers.ObservableMapLabelProvider;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+
+/**
+ * @since 3.2
+ * 
+ */
+public class Snippet029TreeViewerMultiListProperty {
+	protected Shell shell;
+	private TreeViewer viewer;
+
+	/**
+	 * Launch the application
+	 * 
+	 * @param args
+	 */
+	public static void main(String[] args) {
+		try {
+			Snippet029TreeViewerMultiListProperty window = new Snippet029TreeViewerMultiListProperty();
+			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(new FillLayout());
+
+		viewer = new TreeViewer(shell, SWT.FULL_SELECTION | SWT.MULTI
+				| SWT.BORDER);
+
+		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 Catalog extends AbstractModelObject {
+		private String name;
+		private List catalogs = new ArrayList();
+		private List items = new ArrayList();
+
+		public Catalog(String name) {
+			this.name = name;
+		}
+
+		public String getName() {
+			return name;
+		}
+
+		public void setName(String name) {
+			firePropertyChange("name", this.name, this.name = name);
+		}
+
+		public List getCatalogs() {
+			return catalogs;
+		}
+
+		public void setCatalogs(List catalogs) {
+			firePropertyChange("catalogs", this.catalogs,
+					this.catalogs = catalogs);
+		}
+
+		public List getItems() {
+			return items;
+		}
+
+		public void setItems(List items) {
+			firePropertyChange("items", this.items, this.items = items);
+		}
+	}
+
+	public static class CatalogItem extends AbstractModelObject {
+		private String name;
+
+		public CatalogItem(String name) {
+			this.name = name;
+		}
+
+		public String getName() {
+			return name;
+		}
+
+		public void setName(String name) {
+			firePropertyChange("name", this.name, this.name = name);
+		}
+	}
+
+	private void bindUI() {
+		List items;
+
+		Catalog fruits = new Catalog("Fruits");
+		items = new ArrayList();
+		items.add(new CatalogItem("Apple"));
+		items.add(new CatalogItem("Orange"));
+		fruits.setCatalogs(items);
+
+		Catalog vegetables = new Catalog("Vegetables");
+		items = new ArrayList();
+		items.add(new CatalogItem("Peas"));
+		items.add(new CatalogItem("Carrots"));
+		items.add(new CatalogItem("Potatoes"));
+		vegetables.setItems(items);
+
+		Catalog foods = new Catalog("Foods");
+		items = new ArrayList();
+		items.add(fruits);
+		items.add(vegetables);
+		foods.setCatalogs(items);
+
+		items = new ArrayList();
+		items.add(new CatalogItem("Own Hand"));
+		foods.setItems(items);
+
+		Catalog catalog = new Catalog("Main Catalog");
+		items = new ArrayList();
+		items.add(foods);
+		catalog.setCatalogs(items);
+
+		IListProperty childrenProperty = new MultiListProperty(
+				new IListProperty[] { BeanProperties.list("catalogs"),
+						BeanProperties.list("items") });
+
+		ObservableListTreeContentProvider contentProvider = new ObservableListTreeContentProvider(
+				childrenProperty.listFactory(), null);
+		viewer.setContentProvider(contentProvider);
+
+		ObservableMapLabelProvider labelProvider = new ObservableMapLabelProvider(
+				BeanProperties.value("name").observeDetail(
+						contentProvider.getKnownElements())) {
+			Image catalogImage = createCatalogImage();
+			Image catalogItemImage = createCatalogItemImage();
+
+			public Image getImage(Object element) {
+				if (element instanceof Catalog)
+					return catalogImage;
+				if (element instanceof CatalogItem)
+					return catalogItemImage;
+				return super.getImage(element);
+			}
+
+			public void dispose() {
+				catalogImage.dispose();
+				catalogItemImage.dispose();
+				super.dispose();
+			}
+
+			private Image createCatalogImage() {
+				Display display = Display.getCurrent();
+				Image catalogImage = new Image(display, 12, 12);
+				GC gc = new GC(catalogImage);
+				gc.setBackground(display.getSystemColor(SWT.COLOR_GREEN));
+				gc.fillArc(1, 1, 10, 10, 0, 360);
+				gc.dispose();
+				return catalogImage;
+			}
+
+			private Image createCatalogItemImage() {
+				Display display = Display.getCurrent();
+				Image catalogImage = new Image(display, 12, 12);
+				GC gc = new GC(catalogImage);
+				gc.setBackground(display.getSystemColor(SWT.COLOR_CYAN));
+				gc.fillPolygon(new int[] { 1, 10, 5, 1, 6, 1, 10, 10, 1, 10 });
+				gc.dispose();
+				return catalogImage;
+			}
+		};
+		viewer.setLabelProvider(labelProvider);
+
+		viewer.setInput(catalog);
+	}
+}