Mercurial > projects > dwt2
annotate org.eclipse.jface.examples.databinding/src/org/eclipse/jface/examples/databinding/snippets/Snippet001NestedSelectionWithCombo.d @ 99:5d5bd660917f
build some databind snippets
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Wed, 22 Apr 2009 18:59:26 +0200 |
parents | 18a80add24ac |
children | 6373fd739945 |
rev | line source |
---|---|
90
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1 /******************************************************************************* |
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2 * Copyright (c) 2006 The Pampered Chef, Inc. and others. |
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
3 * All rights reserved. This program and the accompanying materials |
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
4 * are made available under the terms of the Eclipse Public License v1.0 |
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
5 * which accompanies this distribution, and is available at |
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
6 * http://www.eclipse.org/legal/epl-v10.html |
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
7 * |
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
8 * Contributors: |
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
9 * The Pampered Chef, Inc. - initial API and implementation |
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
10 * Brad Reynolds - bug 116920 |
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
11 * Matthew Hall - bug 260329 |
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
12 ******************************************************************************/ |
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
13 |
93
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
14 module org.eclipse.jface.examples.databinding.snippets.Snippet001NestedSelectionWithCombo; |
90
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
15 |
93
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
16 import java.lang.all; |
90
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
17 import java.beans.PropertyChangeListener; |
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
18 import java.beans.PropertyChangeSupport; |
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
19 import java.util.ArrayList; |
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
20 import java.util.HashSet; |
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
21 |
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
22 import org.eclipse.core.databinding.DataBindingContext; |
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
23 import org.eclipse.core.databinding.beans.BeansObservables; |
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
24 import org.eclipse.core.databinding.observable.Observables; |
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
25 import org.eclipse.core.databinding.observable.Realm; |
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
26 import org.eclipse.core.databinding.observable.map.IObservableMap; |
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
27 import org.eclipse.core.databinding.observable.value.IObservableValue; |
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
28 import org.eclipse.jface.databinding.swt.SWTObservables; |
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
29 import org.eclipse.jface.databinding.viewers.ObservableMapLabelProvider; |
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
30 import org.eclipse.jface.databinding.viewers.ViewersObservables; |
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
31 import org.eclipse.jface.layout.GridLayoutFactory; |
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
32 import org.eclipse.jface.viewers.ArrayContentProvider; |
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
33 import org.eclipse.jface.viewers.ComboViewer; |
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
34 import org.eclipse.jface.viewers.ListViewer; |
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
35 import org.eclipse.swt.SWT; |
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
36 import org.eclipse.swt.widgets.Combo; |
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
37 import org.eclipse.swt.widgets.Display; |
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
38 import org.eclipse.swt.widgets.List; |
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
39 import org.eclipse.swt.widgets.Shell; |
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
40 import org.eclipse.swt.widgets.Text; |
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
41 |
99
5d5bd660917f
build some databind snippets
Frank Benoit <benoit@tionex.de>
parents:
93
diff
changeset
|
42 import org.eclipse.jface.viewers.Viewer; |
90
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
43 /** |
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
44 * Demonstrates nested selection.<br> |
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
45 * At the first level, user may select a person.<br> |
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
46 * At the second level, user may select a city to associate with the selected<br> |
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
47 * person or edit the person's name. |
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
48 */ |
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
49 public class Snippet001NestedSelectionWithCombo { |
93
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
50 public static void main(String[] args) { |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
51 ViewModel viewModel = new ViewModel(); |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
52 Shell shell = (new View(viewModel)).createShell(); |
90
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
53 |
93
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
54 // The SWT event loop |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
55 Display display = Display.getCurrent(); |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
56 while (!shell.isDisposed()) { |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
57 if (!display.readAndDispatch()) { |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
58 display.sleep(); |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
59 } |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
60 } |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
61 } |
90
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
62 |
93
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
63 // Minimal JavaBeans support |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
64 public static abstract class AbstractModelObject { |
99
5d5bd660917f
build some databind snippets
Frank Benoit <benoit@tionex.de>
parents:
93
diff
changeset
|
65 private PropertyChangeSupport propertyChangeSupport; |
5d5bd660917f
build some databind snippets
Frank Benoit <benoit@tionex.de>
parents:
93
diff
changeset
|
66 this(){ |
5d5bd660917f
build some databind snippets
Frank Benoit <benoit@tionex.de>
parents:
93
diff
changeset
|
67 propertyChangeSupport = new PropertyChangeSupport( |
93
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
68 this); |
99
5d5bd660917f
build some databind snippets
Frank Benoit <benoit@tionex.de>
parents:
93
diff
changeset
|
69 } |
90
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
70 |
93
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
71 public void addPropertyChangeListener(PropertyChangeListener listener) { |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
72 propertyChangeSupport.addPropertyChangeListener(listener); |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
73 } |
90
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
74 |
93
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
75 public void addPropertyChangeListener(String propertyName, |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
76 PropertyChangeListener listener) { |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
77 propertyChangeSupport.addPropertyChangeListener(propertyName, |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
78 listener); |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
79 } |
90
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
80 |
93
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
81 public void removePropertyChangeListener(PropertyChangeListener listener) { |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
82 propertyChangeSupport.removePropertyChangeListener(listener); |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
83 } |
90
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
84 |
93
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
85 public void removePropertyChangeListener(String propertyName, |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
86 PropertyChangeListener listener) { |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
87 propertyChangeSupport.removePropertyChangeListener(propertyName, |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
88 listener); |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
89 } |
90
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
90 |
93
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
91 protected void firePropertyChange(String propertyName, Object oldValue, |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
92 Object newValue) { |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
93 propertyChangeSupport.firePropertyChange(propertyName, oldValue, |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
94 newValue); |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
95 } |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
96 } |
90
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
97 |
93
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
98 // The data model class. This is normally a persistent class of some sort. |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
99 // |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
100 // This example implements full JavaBeans bound properties so that changes |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
101 // to instances of this class will automatically be propogated to the UI. |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
102 public static class Person : AbstractModelObject { |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
103 // Constructor |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
104 public this(String name, String city) { |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
105 this.name = name; |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
106 this.city = city; |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
107 } |
90
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
108 |
93
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
109 // Some JavaBean bound properties... |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
110 String name; |
90
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
111 |
93
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
112 String city; |
90
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
113 |
93
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
114 public String getName() { |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
115 return name; |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
116 } |
90
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
117 |
93
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
118 public void setName(String name) { |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
119 String oldValue = this.name; |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
120 this.name = name; |
99
5d5bd660917f
build some databind snippets
Frank Benoit <benoit@tionex.de>
parents:
93
diff
changeset
|
121 firePropertyChange("name", stringcast(oldValue), stringcast(name)); |
93
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
122 } |
90
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
123 |
93
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
124 public String getCity() { |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
125 return city; |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
126 } |
90
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
127 |
93
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
128 public void setCity(String city) { |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
129 String oldValue = this.city; |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
130 this.city = city; |
99
5d5bd660917f
build some databind snippets
Frank Benoit <benoit@tionex.de>
parents:
93
diff
changeset
|
131 firePropertyChange("city", stringcast(oldValue), stringcast(city)); |
93
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
132 } |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
133 } |
90
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
134 |
93
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
135 // The View's model--the root of our GUI's Model graph |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
136 // |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
137 // Typically each View class has a corresponding ViewModel class. |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
138 // The ViewModel is responsible for getting the objects to edit from the |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
139 // DAO. Since this snippet doesn't have any persistent objects to |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
140 // retrieve, this ViewModel just instantiates some objects to edit. |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
141 // |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
142 // This ViewModel also implements JavaBean bound properties. |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
143 static class ViewModel : AbstractModelObject { |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
144 // The model to bind |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
145 private ArrayList people; |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
146 private void initPeople(){ |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
147 people = new ArrayList(); |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
148 people.add(new Person("Wile E. Coyote", "Tucson")); |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
149 people.add(new Person("Road Runner", "Lost Horse")); |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
150 people.add(new Person("Bugs Bunny", "Forrest")); |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
151 } |
90
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
152 |
93
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
153 // Choice of cities for the Combo |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
154 private ArrayList cities; |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
155 private void initCities(){ |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
156 cities = new ArrayList(); |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
157 cities.add("Tucson"); |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
158 cities.add("AcmeTown"); |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
159 cities.add("Lost Horse"); |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
160 cities.add("Forrest"); |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
161 cities.add("Lost Mine"); |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
162 } |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
163 this(){ |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
164 initPeople(); |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
165 initCities(); |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
166 } |
90
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
167 |
93
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
168 public ArrayList getPeople() { |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
169 return people; |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
170 } |
90
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
171 |
93
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
172 public ArrayList getCities() { |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
173 return cities; |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
174 } |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
175 } |
90
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
176 |
93
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
177 // The GUI view |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
178 static class View { |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
179 private ViewModel viewModel; |
90
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
180 |
93
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
181 public this(ViewModel viewModel) { |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
182 this.viewModel = viewModel; |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
183 } |
90
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
184 |
93
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
185 public Shell createShell() { |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
186 // Build a UI |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
187 Shell shell = new Shell(Display.getCurrent()); |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
188 Realm realm = SWTObservables.getRealm(shell.getDisplay()); |
90
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
189 |
93
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
190 List peopleList = new List(shell, SWT.BORDER); |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
191 Text name = new Text(shell, SWT.BORDER); |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
192 Combo city = new Combo(shell, SWT.BORDER | SWT.READ_ONLY); |
90
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
193 |
93
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
194 ListViewer peopleListViewer = new ListViewer(peopleList); |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
195 IObservableMap attributeMap = BeansObservables.observeMap( |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
196 Observables.staticObservableSet(realm, new HashSet( |
99
5d5bd660917f
build some databind snippets
Frank Benoit <benoit@tionex.de>
parents:
93
diff
changeset
|
197 viewModel.getPeople())), Class.fromType!(Person), "name"); |
93
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
198 peopleListViewer.setLabelProvider(new ObservableMapLabelProvider( |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
199 attributeMap)); |
99
5d5bd660917f
build some databind snippets
Frank Benoit <benoit@tionex.de>
parents:
93
diff
changeset
|
200 peopleListViewer.setContentProvider(new ArrayContentProvider!(Object)()); |
93
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
201 peopleListViewer.setInput(viewModel.getPeople()); |
90
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
202 |
93
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
203 DataBindingContext dbc = new DataBindingContext(realm); |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
204 IObservableValue selectedPerson = ViewersObservables |
99
5d5bd660917f
build some databind snippets
Frank Benoit <benoit@tionex.de>
parents:
93
diff
changeset
|
205 .observeSingleSelection(cast(Viewer)peopleListViewer); |
93
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
206 dbc.bindValue(SWTObservables.observeText(name, SWT.Modify), |
99
5d5bd660917f
build some databind snippets
Frank Benoit <benoit@tionex.de>
parents:
93
diff
changeset
|
207 BeansObservables.observeDetailValue(realm, selectedPerson, |
5d5bd660917f
build some databind snippets
Frank Benoit <benoit@tionex.de>
parents:
93
diff
changeset
|
208 "name", Class.fromType!(String)), null, null); |
90
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
209 |
93
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
210 ComboViewer cityViewer = new ComboViewer(city); |
99
5d5bd660917f
build some databind snippets
Frank Benoit <benoit@tionex.de>
parents:
93
diff
changeset
|
211 cityViewer.setContentProvider(new ArrayContentProvider!(Object)()); |
93
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
212 cityViewer.setInput(viewModel.getCities()); |
90
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
213 |
93
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
214 IObservableValue citySelection = ViewersObservables |
99
5d5bd660917f
build some databind snippets
Frank Benoit <benoit@tionex.de>
parents:
93
diff
changeset
|
215 .observeSingleSelection(cast(Viewer)cityViewer); |
5d5bd660917f
build some databind snippets
Frank Benoit <benoit@tionex.de>
parents:
93
diff
changeset
|
216 dbc.bindValue( citySelection, BeansObservables.observeDetailValue( realm, |
5d5bd660917f
build some databind snippets
Frank Benoit <benoit@tionex.de>
parents:
93
diff
changeset
|
217 selectedPerson, "city", Class.fromType!(String)), null, null); |
90
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
218 |
93
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
219 GridLayoutFactory.swtDefaults().applyTo(shell); |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
220 // Open and return the Shell |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
221 shell.pack(); |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
222 shell.open(); |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
223 return shell; |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
224 } |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
225 } |
90
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
226 |
6086085e153d
Added databinding snippets. unmodified java sources.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
227 } |
93
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
228 void main( String[] args ){ |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
229 Snippet001NestedSelectionWithCombo.main( args ); |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
230 } |
18a80add24ac
Work on databinding snippets
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
231 |