Mercurial > projects > dwt2
comparison org.eclipse.jface.examples.databinding/src/org/eclipse/jface/examples/databinding/snippets/Snippet018CheckboxTableViewerCheckedSelection.d @ 99:5d5bd660917f
build some databind snippets
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Wed, 22 Apr 2009 18:59:26 +0200 |
parents | 6086085e153d |
children | e884642ad36e |
comparison
equal
deleted
inserted
replaced
98:48d4ee626868 | 99:5d5bd660917f |
---|---|
8 * Contributors: | 8 * Contributors: |
9 * Matthew Hall - initial API and implementation (bug 124684) | 9 * Matthew Hall - initial API and implementation (bug 124684) |
10 * Matthew Hall - bugs 260329, 260337 | 10 * Matthew Hall - bugs 260329, 260337 |
11 ******************************************************************************/ | 11 ******************************************************************************/ |
12 | 12 |
13 package org.eclipse.jface.examples.databinding.snippets; | 13 module org.eclipse.jface.examples.databinding.snippets.Snippet018CheckboxTableViewerCheckedSelection; |
14 | |
15 import java.lang.all; | |
14 | 16 |
15 import java.beans.PropertyChangeListener; | 17 import java.beans.PropertyChangeListener; |
16 import java.beans.PropertyChangeSupport; | 18 import java.beans.PropertyChangeSupport; |
17 import java.util.ArrayList; | 19 import java.util.ArrayList; |
18 import java.util.Arrays; | 20 import java.util.Arrays; |
57 | 59 |
58 /** | 60 /** |
59 * Snippet 018: Binding to the checked elements in a CheckboxTableViewer. | 61 * Snippet 018: Binding to the checked elements in a CheckboxTableViewer. |
60 */ | 62 */ |
61 public class Snippet018CheckboxTableViewerCheckedSelection { | 63 public class Snippet018CheckboxTableViewerCheckedSelection { |
62 public static void main(String[] args) { | 64 public static void main(String[] args) { |
63 // The SWT event loop | 65 // The SWT event loop |
64 final Display display = Display.getDefault(); | 66 final Display display = Display.getDefault(); |
65 Realm.runWithDefault(SWTObservables.getRealm(display), new Runnable() { | 67 Realm.runWithDefault(SWTObservables.getRealm(display), new Runnable() { |
66 public void run() { | 68 public void run() { |
67 ViewModel viewModel = createSampleModel(); | 69 ViewModel viewModel = createSampleModel(); |
68 | 70 |
69 Shell shell = new View(viewModel).createShell(); | 71 Shell shell = new View(viewModel).createShell(); |
70 shell.open(); | 72 shell.open(); |
71 while (!shell.isDisposed()) | 73 while (!shell.isDisposed()) |
72 if (!display.readAndDispatch()) | 74 if (!display.readAndDispatch()) |
73 display.sleep(); | 75 display.sleep(); |
74 } | 76 } |
75 }); | 77 }); |
76 display.dispose(); | 78 display.dispose(); |
77 } | 79 } |
78 | 80 |
79 private static ViewModel createSampleModel() { | 81 private static ViewModel createSampleModel() { |
80 ViewModel viewModel = new ViewModel(); | 82 ViewModel viewModel = new ViewModel(); |
81 | 83 |
82 Person stan = createPerson("Stan"); | 84 Person stan = createPerson("Stan"); |
83 Person kyle = createPerson("Kyle"); | 85 Person kyle = createPerson("Kyle"); |
84 Person eric = createPerson("Eric"); | 86 Person eric = createPerson("Eric"); |
85 Person kenny = createPerson("Kenny"); | 87 Person kenny = createPerson("Kenny"); |
86 Person wendy = createPerson("Wendy"); | 88 Person wendy = createPerson("Wendy"); |
87 Person butters = createPerson("Butters"); | 89 Person butters = createPerson("Butters"); |
88 | 90 |
89 setFriends(stan, new Person[] { kyle, eric, kenny, wendy }); | 91 setFriends(stan, new Person[] { kyle, eric, kenny, wendy }); |
90 setFriends(kyle, new Person[] { stan, eric, kenny }); | 92 setFriends(kyle, new Person[] { stan, eric, kenny }); |
91 setFriends(eric, new Person[] { eric }); | 93 setFriends(eric, new Person[] { eric }); |
92 setFriends(kenny, new Person[] { stan, kyle, eric }); | 94 setFriends(kenny, new Person[] { stan, kyle, eric }); |
93 setFriends(wendy, new Person[] { stan }); | 95 setFriends(wendy, new Person[] { stan }); |
94 setFriends(butters, new Person[0]); | 96 setFriends(butters, new Person[0]); |
95 | 97 |
96 Person[] people = new Person[] { stan, kyle, eric, kenny, wendy, | 98 Person[] people = new Person[] { stan, kyle, eric, kenny, wendy, |
97 butters }; | 99 butters }; |
98 viewModel.setPeople(Arrays.asList(people)); | 100 viewModel.setPeople(Arrays.asList(people)); |
99 return viewModel; | 101 return viewModel; |
100 } | 102 } |
101 | 103 |
102 private static Person createPerson(String name) { | 104 private static Person createPerson(String name) { |
103 Person person = new Person(); | 105 Person person = new Person(); |
104 person.setName(name); | 106 person.setName(name); |
105 return person; | 107 return person; |
106 } | 108 } |
107 | 109 |
108 private static void setFriends(Person person, Person[] friends) { | 110 private static void setFriends(Person person, Person[] friends) { |
109 person.setFriends(new HashSet(Arrays.asList(friends))); | 111 person.setFriends(new HashSet(Arrays.asList(friends))); |
110 } | 112 } |
111 | 113 |
112 // Minimal JavaBeans support | 114 // Minimal JavaBeans support |
113 public static abstract class AbstractModelObject { | 115 public static abstract class AbstractModelObject { |
114 private PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport( | 116 private PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport( |
115 this); | 117 this); |
116 | 118 |
117 public void addPropertyChangeListener(PropertyChangeListener listener) { | 119 public void addPropertyChangeListener(PropertyChangeListener listener) { |
118 propertyChangeSupport.addPropertyChangeListener(listener); | 120 propertyChangeSupport.addPropertyChangeListener(listener); |
119 } | 121 } |
120 | 122 |
121 public void addPropertyChangeListener(String propertyName, | 123 public void addPropertyChangeListener(String propertyName, |
122 PropertyChangeListener listener) { | 124 PropertyChangeListener listener) { |
123 propertyChangeSupport.addPropertyChangeListener(propertyName, | 125 propertyChangeSupport.addPropertyChangeListener(propertyName, |
124 listener); | 126 listener); |
125 } | 127 } |
126 | 128 |
127 public void removePropertyChangeListener(PropertyChangeListener listener) { | 129 public void removePropertyChangeListener(PropertyChangeListener listener) { |
128 propertyChangeSupport.removePropertyChangeListener(listener); | 130 propertyChangeSupport.removePropertyChangeListener(listener); |
129 } | 131 } |
130 | 132 |
131 public void removePropertyChangeListener(String propertyName, | 133 public void removePropertyChangeListener(String propertyName, |
132 PropertyChangeListener listener) { | 134 PropertyChangeListener listener) { |
133 propertyChangeSupport.removePropertyChangeListener(propertyName, | 135 propertyChangeSupport.removePropertyChangeListener(propertyName, |
134 listener); | 136 listener); |
135 } | 137 } |
136 | 138 |
137 protected void firePropertyChange(String propertyName, Object oldValue, | 139 protected void firePropertyChange(String propertyName, Object oldValue, |
138 Object newValue) { | 140 Object newValue) { |
139 propertyChangeSupport.firePropertyChange(propertyName, oldValue, | 141 propertyChangeSupport.firePropertyChange(propertyName, oldValue, |
140 newValue); | 142 newValue); |
141 } | 143 } |
142 } | 144 } |
143 | 145 |
144 // The data model class. | 146 // The data model class. |
145 static class Person extends AbstractModelObject { | 147 static class Person extends AbstractModelObject { |
146 private String name; | 148 private String name; |
147 private Set friends = new HashSet(); | 149 private Set friends = new HashSet(); |
148 | 150 |
149 public String getName() { | 151 public String getName() { |
150 return name; | 152 return name; |
151 } | 153 } |
152 | 154 |
153 public void setName(String name) { | 155 public void setName(String name) { |
154 firePropertyChange("name", this.name, this.name = name); | 156 firePropertyChange("name", this.name, this.name = name); |
155 } | 157 } |
156 | 158 |
157 public Set getFriends() { | 159 public Set getFriends() { |
158 return new HashSet(friends); | 160 return new HashSet(friends); |
159 } | 161 } |
160 | 162 |
161 public void setFriends(Set friends) { | 163 public void setFriends(Set friends) { |
162 firePropertyChange("friends", this.friends, | 164 firePropertyChange("friends", this.friends, |
163 this.friends = new HashSet(friends)); | 165 this.friends = new HashSet(friends)); |
164 } | 166 } |
165 | 167 |
166 public String toString() { | 168 public String toString() { |
167 return name; | 169 return name; |
168 } | 170 } |
169 } | 171 } |
170 | 172 |
171 // The View's model--the root of our Model graph for this particular GUI. | 173 // The View's model--the root of our Model graph for this particular GUI. |
172 // | 174 // |
173 // Typically each View class has a corresponding ViewModel class. | 175 // Typically each View class has a corresponding ViewModel class. |
174 // | 176 // |
175 // The ViewModel is responsible for getting the objects to edit from the | 177 // The ViewModel is responsible for getting the objects to edit from the |
176 // data access tier. Since this snippet doesn't have any persistent objects | 178 // data access tier. Since this snippet doesn't have any persistent objects |
177 // to retrieve, this ViewModel just instantiates a model object to edit. | 179 // to retrieve, this ViewModel just instantiates a model object to edit. |
178 static class ViewModel extends AbstractModelObject { | 180 static class ViewModel extends AbstractModelObject { |
179 private List people = new ArrayList(); | 181 private List people = new ArrayList(); |
180 | 182 |
181 public List getPeople() { | 183 public List getPeople() { |
182 return new ArrayList(people); | 184 return new ArrayList(people); |
183 } | 185 } |
184 | 186 |
185 public void setPeople(List people) { | 187 public void setPeople(List people) { |
186 firePropertyChange("people", this.people, | 188 firePropertyChange("people", this.people, |
187 this.people = new ArrayList(people)); | 189 this.people = new ArrayList(people)); |
188 } | 190 } |
189 } | 191 } |
190 | 192 |
191 // The GUI view | 193 // The GUI view |
192 static class View { | 194 static class View { |
193 private ViewModel viewModel; | 195 private ViewModel viewModel; |
194 | 196 |
195 private Shell shell; | 197 private Shell shell; |
196 | 198 |
197 private Button addPersonButton; | 199 private Button addPersonButton; |
198 private Button removePersonButton; | 200 private Button removePersonButton; |
199 private TableViewer peopleViewer; | 201 private TableViewer peopleViewer; |
200 private Text personName; | 202 private Text personName; |
201 private CheckboxTableViewer friendsViewer; | 203 private CheckboxTableViewer friendsViewer; |
202 | 204 |
203 public View(ViewModel viewModel) { | 205 public View(ViewModel viewModel) { |
204 this.viewModel = viewModel; | 206 this.viewModel = viewModel; |
205 } | 207 } |
206 | 208 |
207 public Shell createShell() { | 209 public Shell createShell() { |
208 // Build a UI | 210 // Build a UI |
209 final Display display = Display.getCurrent(); | 211 final Display display = Display.getCurrent(); |
210 shell = new Shell(display); | 212 shell = new Shell(display); |
211 | 213 |
212 createUI(shell); | 214 createUI(shell); |
213 | 215 |
214 // Bind UI | 216 // Bind UI |
215 bindUI(); | 217 bindUI(); |
216 | 218 |
217 // Open and return the Shell | 219 // Open and return the Shell |
218 shell.setSize(shell.computeSize(400, SWT.DEFAULT)); | 220 shell.setSize(shell.computeSize(400, SWT.DEFAULT)); |
219 shell.open(); | 221 shell.open(); |
220 return shell; | 222 return shell; |
221 } | 223 } |
222 | 224 |
223 private void createUI(Shell shell) { | 225 private void createUI(Shell shell) { |
224 shell.setText("Binding checked elements in CheckboxTableViewer"); | 226 shell.setText("Binding checked elements in CheckboxTableViewer"); |
225 shell.setLayout(new GridLayout(2, false)); | 227 shell.setLayout(new GridLayout(2, false)); |
226 | 228 |
227 new Label(shell, SWT.NONE).setText("People"); | 229 new Label(shell, SWT.NONE).setText("People"); |
228 | 230 |
229 Composite buttons = new Composite(shell, SWT.NONE); | 231 Composite buttons = new Composite(shell, SWT.NONE); |
230 GridDataFactory.swtDefaults().align(SWT.RIGHT, SWT.CENTER).applyTo( | 232 GridDataFactory.swtDefaults().align(SWT.RIGHT, SWT.CENTER).applyTo( |
231 buttons); | 233 buttons); |
232 GridLayoutFactory.fillDefaults().numColumns(2).equalWidth(true) | 234 GridLayoutFactory.fillDefaults().numColumns(2).equalWidth(true) |
233 .applyTo(buttons); | 235 .applyTo(buttons); |
234 addPersonButton = new Button(buttons, SWT.PUSH); | 236 addPersonButton = new Button(buttons, SWT.PUSH); |
235 addPersonButton.setText("Add"); | 237 addPersonButton.setText("Add"); |
236 GridDataFactory.fillDefaults().applyTo(addPersonButton); | 238 GridDataFactory.fillDefaults().applyTo(addPersonButton); |
237 removePersonButton = new Button(buttons, SWT.PUSH); | 239 removePersonButton = new Button(buttons, SWT.PUSH); |
238 removePersonButton.setText("Remove"); | 240 removePersonButton.setText("Remove"); |
239 GridDataFactory.fillDefaults().applyTo(removePersonButton); | 241 GridDataFactory.fillDefaults().applyTo(removePersonButton); |
240 | 242 |
241 Composite peopleComposite = new Composite(shell, SWT.NONE); | 243 Composite peopleComposite = new Composite(shell, SWT.NONE); |
242 GridDataFactory.fillDefaults().grab(true, true).span(2, 1).applyTo( | 244 GridDataFactory.fillDefaults().grab(true, true).span(2, 1).applyTo( |
243 peopleComposite); | 245 peopleComposite); |
244 TableColumnLayout peopleColumnLayout = new TableColumnLayout(); | 246 TableColumnLayout peopleColumnLayout = new TableColumnLayout(); |
245 peopleComposite.setLayout(peopleColumnLayout); | 247 peopleComposite.setLayout(peopleColumnLayout); |
246 | 248 |
247 peopleViewer = new TableViewer(peopleComposite, SWT.SINGLE | 249 peopleViewer = new TableViewer(peopleComposite, SWT.SINGLE |
248 | SWT.BORDER | SWT.FULL_SELECTION); | 250 | SWT.BORDER | SWT.FULL_SELECTION); |
249 | 251 |
250 Table peopleTable = peopleViewer.getTable(); | 252 Table peopleTable = peopleViewer.getTable(); |
251 peopleTable.setHeaderVisible(true); | 253 peopleTable.setHeaderVisible(true); |
252 peopleTable.setLinesVisible(true); | 254 peopleTable.setLinesVisible(true); |
253 | 255 |
254 TableColumn nameColumn = new TableColumn(peopleTable, SWT.NONE); | 256 TableColumn nameColumn = new TableColumn(peopleTable, SWT.NONE); |
255 nameColumn.setText("Name"); | 257 nameColumn.setText("Name"); |
256 peopleColumnLayout.setColumnData(nameColumn, | 258 peopleColumnLayout.setColumnData(nameColumn, |
257 new ColumnWeightData(1)); | 259 new ColumnWeightData(1)); |
258 | 260 |
259 TableColumn friendsColumn = new TableColumn(peopleTable, SWT.NONE); | 261 TableColumn friendsColumn = new TableColumn(peopleTable, SWT.NONE); |
260 friendsColumn.setText("Friends"); | 262 friendsColumn.setText("Friends"); |
261 peopleColumnLayout.setColumnData(friendsColumn, | 263 peopleColumnLayout.setColumnData(friendsColumn, |
262 new ColumnWeightData(3)); | 264 new ColumnWeightData(3)); |
263 | 265 |
264 new Label(shell, SWT.NONE).setText("Name"); | 266 new Label(shell, SWT.NONE).setText("Name"); |
265 | 267 |
266 personName = new Text(shell, SWT.BORDER); | 268 personName = new Text(shell, SWT.BORDER); |
267 GridDataFactory.fillDefaults().grab(true, false) | 269 GridDataFactory.fillDefaults().grab(true, false) |
268 .applyTo(personName); | 270 .applyTo(personName); |
269 | 271 |
270 new Label(shell, SWT.NONE).setText("Friends"); | 272 new Label(shell, SWT.NONE).setText("Friends"); |
271 | 273 |
272 Composite friendsComposite = new Composite(shell, SWT.NONE); | 274 Composite friendsComposite = new Composite(shell, SWT.NONE); |
273 GridDataFactory.fillDefaults().grab(true, true).applyTo( | 275 GridDataFactory.fillDefaults().grab(true, true).applyTo( |
274 friendsComposite); | 276 friendsComposite); |
275 TableColumnLayout friendsColumnLayout = new TableColumnLayout(); | 277 TableColumnLayout friendsColumnLayout = new TableColumnLayout(); |
276 friendsComposite.setLayout(friendsColumnLayout); | 278 friendsComposite.setLayout(friendsColumnLayout); |
277 | 279 |
278 friendsViewer = CheckboxTableViewer.newCheckList(friendsComposite, | 280 friendsViewer = CheckboxTableViewer.newCheckList(friendsComposite, |
279 SWT.SINGLE | SWT.BORDER | SWT.FULL_SELECTION); | 281 SWT.SINGLE | SWT.BORDER | SWT.FULL_SELECTION); |
280 | 282 |
281 Table friendsTable = friendsViewer.getTable(); | 283 Table friendsTable = friendsViewer.getTable(); |
282 friendsTable.setHeaderVisible(true); | 284 friendsTable.setHeaderVisible(true); |
283 friendsTable.setLinesVisible(true); | 285 friendsTable.setLinesVisible(true); |
284 TableColumn friendNameColumn = new TableColumn(friendsTable, | 286 TableColumn friendNameColumn = new TableColumn(friendsTable, |
285 SWT.NONE); | 287 SWT.NONE); |
286 friendNameColumn.setText("Name"); | 288 friendNameColumn.setText("Name"); |
287 friendsColumnLayout.setColumnData(friendNameColumn, | 289 friendsColumnLayout.setColumnData(friendNameColumn, |
288 new ColumnWeightData(1)); | 290 new ColumnWeightData(1)); |
289 | 291 |
290 GridDataFactory.fillDefaults().grab(true, true).applyTo( | 292 GridDataFactory.fillDefaults().grab(true, true).applyTo( |
291 friendsViewer.getTable()); | 293 friendsViewer.getTable()); |
292 } | 294 } |
293 | 295 |
294 private void bindUI() { | 296 private void bindUI() { |
295 DataBindingContext dbc = new DataBindingContext(); | 297 DataBindingContext dbc = new DataBindingContext(); |
296 | 298 |
297 final IObservableList people = BeansObservables.observeList(Realm | 299 final IObservableList people = BeansObservables.observeList(Realm |
298 .getDefault(), viewModel, "people"); | 300 .getDefault(), viewModel, "people"); |
299 | 301 |
300 addPersonButton.addListener(SWT.Selection, new Listener() { | 302 addPersonButton.addListener(SWT.Selection, new Listener() { |
301 public void handleEvent(Event event) { | 303 public void handleEvent(Event event) { |
302 InputDialog dlg = new InputDialog(shell, "Add Person", | 304 InputDialog dlg = new InputDialog(shell, "Add Person", |
303 "Enter name:", "<Name>", new IInputValidator() { | 305 "Enter name:", "<Name>", new IInputValidator() { |
304 public String isValid(String newText) { | 306 public String isValid(String newText) { |
305 if (newText == null | 307 if (newText == null |
306 || newText.length() == 0) | 308 || newText.length() == 0) |
307 return "Name cannot be empty"; | 309 return "Name cannot be empty"; |
308 return null; | 310 return null; |
309 } | 311 } |
310 }); | 312 }); |
311 if (dlg.open() == Window.OK) { | 313 if (dlg.open() == Window.OK) { |
312 Person person = new Person(); | 314 Person person = new Person(); |
313 person.setName(dlg.getValue()); | 315 person.setName(dlg.getValue()); |
314 people.add(person); | 316 people.add(person); |
315 peopleViewer.setSelection(new StructuredSelection( | 317 peopleViewer.setSelection(new StructuredSelection( |
316 person)); | 318 person)); |
317 } | 319 } |
318 } | 320 } |
319 }); | 321 }); |
320 | 322 |
321 removePersonButton.addListener(SWT.Selection, new Listener() { | 323 removePersonButton.addListener(SWT.Selection, new Listener() { |
322 public void handleEvent(Event event) { | 324 public void handleEvent(Event event) { |
323 IStructuredSelection selected = (IStructuredSelection) peopleViewer | 325 IStructuredSelection selected = (IStructuredSelection) peopleViewer |
324 .getSelection(); | 326 .getSelection(); |
325 if (selected.isEmpty()) | 327 if (selected.isEmpty()) |
326 return; | 328 return; |
327 Person person = (Person) selected.getFirstElement(); | 329 Person person = (Person) selected.getFirstElement(); |
328 if (MessageDialog.openConfirm(shell, "Remove person", | 330 if (MessageDialog.openConfirm(shell, "Remove person", |
329 "Remove " + person.getName() + "?")) | 331 "Remove " + person.getName() + "?")) |
330 people.remove(person); | 332 people.remove(person); |
331 } | 333 } |
332 }); | 334 }); |
333 | 335 |
334 ViewerSupport.bind(peopleViewer, people, BeanProperties.values( | 336 ViewerSupport.bind(peopleViewer, people, BeanProperties.values( |
335 Person.class, new String[] { "name", "friends" })); | 337 Person.class, new String[] { "name", "friends" })); |
336 | 338 |
337 final IObservableValue selectedPerson = ViewersObservables | 339 final IObservableValue selectedPerson = ViewersObservables |
338 .observeSingleSelection(peopleViewer); | 340 .observeSingleSelection(peopleViewer); |
339 | 341 |
340 IObservableValue personSelected = new ComputedValue(Boolean.TYPE) { | 342 IObservableValue personSelected = new ComputedValue(bool.TYPE) { |
341 protected Object calculate() { | 343 protected Object calculate() { |
342 return Boolean.valueOf(selectedPerson.getValue() != null); | 344 return bool.valueOf(selectedPerson.getValue() != null); |
343 } | 345 } |
344 }; | 346 }; |
345 dbc.bindValue(SWTObservables.observeEnabled(removePersonButton), | 347 dbc.bindValue(SWTObservables.observeEnabled(removePersonButton), |
346 personSelected); | 348 personSelected); |
347 dbc.bindValue(SWTObservables.observeEnabled(friendsViewer | 349 dbc.bindValue(SWTObservables.observeEnabled(friendsViewer |
348 .getTable()), personSelected); | 350 .getTable()), personSelected); |
349 | 351 |
350 dbc.bindValue(SWTObservables.observeText(personName, SWT.Modify), | 352 dbc.bindValue(SWTObservables.observeText(personName, SWT.Modify), |
351 BeansObservables.observeDetailValue(selectedPerson, "name", | 353 BeansObservables.observeDetailValue(selectedPerson, "name", |
352 String.class)); | 354 String.class)); |
353 | 355 |
354 ViewerSupport.bind(friendsViewer, people, BeanProperties.value( | 356 ViewerSupport.bind(friendsViewer, people, BeanProperties.value( |
355 Person.class, "name")); | 357 Person.class, "name")); |
356 | 358 |
357 dbc.bindSet(ViewersObservables.observeCheckedElements( | 359 dbc.bindSet(ViewersObservables.observeCheckedElements( |
358 friendsViewer, Person.class), BeansObservables | 360 friendsViewer, Person.class), BeansObservables |
359 .observeDetailSet(selectedPerson, "friends", Person.class)); | 361 .observeDetailSet(selectedPerson, "friends", Person.class)); |
360 } | 362 } |
361 } | 363 } |
362 } | 364 } |
365 void main( String[] args ){ | |
366 Snippet018CheckboxTableViewerCheckedSelection.main(args); | |
367 } |