Mercurial > projects > dwt-samples
comparison jface/snippets/Snippet040TableViewerSorting.d @ 87:604fa1feb76a
Added jface snippet040, thanks to yidabu. It still has compile problems, that need further examination.
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Mon, 19 May 2008 13:56:25 +0200 |
parents | |
children | 9ed020f0c2a5 |
comparison
equal
deleted
inserted
replaced
86:4095b64d16f5 | 87:604fa1feb76a |
---|---|
1 /******************************************************************************* | |
2 * Copyright (c) 2006 Tom Schindl and others. | |
3 * All rights reserved. This program and the accompanying materials | |
4 * are made available under the terms of the Eclipse Public License v1.0 | |
5 * which accompanies this distribution, and is available at | |
6 * http://www.eclipse.org/legal/epl-v10.html | |
7 * | |
8 * Contributors: | |
9 * Tom Schindl - initial API and implementation | |
10 * Port to the D programming language: | |
11 * yidabu at gmail dot com ( D China http://www.d-programming-language-china.org/ ) | |
12 *******************************************************************************/ | |
13 module jface.snippets.Snippet040TableViewerSorting; | |
14 | |
15 | |
16 // http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jface.snippets/Eclipse%20JFace%20Snippets/org/eclipse/jface/snippets/viewers/Snippet040TableViewerSorting.java?view=markup | |
17 | |
18 import dwtx.jface.viewers.CellEditor; | |
19 import dwtx.jface.viewers.ColumnLabelProvider; | |
20 import dwtx.jface.viewers.ColumnViewer; | |
21 import dwtx.jface.viewers.EditingSupport; | |
22 import dwtx.jface.viewers.IStructuredContentProvider; | |
23 import dwtx.jface.viewers.TableViewer; | |
24 import dwtx.jface.viewers.TableViewerColumn; | |
25 import dwtx.jface.viewers.TextCellEditor; | |
26 import dwtx.jface.viewers.Viewer; | |
27 import dwtx.jface.viewers.ViewerComparator; | |
28 import dwt.DWT; | |
29 import dwt.events.SelectionAdapter; | |
30 import dwt.events.SelectionEvent; | |
31 import dwt.layout.FillLayout; | |
32 import dwt.widgets.Display; | |
33 import dwt.widgets.Shell; | |
34 import dwt.dwthelper.utils; | |
35 /** | |
36 * Example usage of ViewerComparator in tables to allow sorting | |
37 * | |
38 * @author Tom Schindl <tom.schindl@bestsolution.at> | |
39 * | |
40 */ | |
41 | |
42 void main(String[] args) { | |
43 Snippet040TableViewerSorting.main(args); | |
44 } | |
45 | |
46 public class Snippet040TableViewerSorting { | |
47 | |
48 private class MyContentProvider : IStructuredContentProvider { | |
49 | |
50 public Object[] getElements(Object inputElement) { | |
51 return cast (Person[]) inputElement; | |
52 } | |
53 | |
54 public void dispose() { | |
55 } | |
56 | |
57 public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { | |
58 } | |
59 | |
60 } | |
61 | |
62 public class Person { | |
63 public String givenname; | |
64 public String surname; | |
65 public String email; | |
66 | |
67 public this(String givenname, String surname, String email) { | |
68 this.givenname = givenname; | |
69 this.surname = surname; | |
70 this.email = email; | |
71 } | |
72 | |
73 } | |
74 | |
75 protected abstract class AbstractEditingSupport : EditingSupport { | |
76 private TextCellEditor editor; | |
77 | |
78 public this(TableViewer viewer) { | |
79 super(viewer); | |
80 this.editor = new TextCellEditor(viewer.getTable()); | |
81 } | |
82 | |
83 protected bool canEdit(Object element) { | |
84 return true; | |
85 } | |
86 | |
87 protected CellEditor getCellEditor(Object element) { | |
88 return editor; | |
89 } | |
90 | |
91 protected void setValue(Object element, Object value) { | |
92 doSetValue(element, value); | |
93 getViewer().update(element, null); | |
94 } | |
95 | |
96 protected abstract void doSetValue(Object element, Object value); | |
97 } | |
98 | |
99 public this(Shell shell) { | |
100 TableViewer v = new TableViewer(shell, DWT.BORDER | DWT.FULL_SELECTION); | |
101 v.setContentProvider(new MyContentProvider()); | |
102 | |
103 TableViewerColumn column = new TableViewerColumn(v, DWT.NONE); | |
104 column.getColumn().setWidth(200); | |
105 column.getColumn().setText("Givenname"); | |
106 column.getColumn().setMoveable(true); | |
107 column.setLabelProvider(new class() ColumnLabelProvider { | |
108 public String getText(Object element) { | |
109 return (cast(Person) element).givenname; | |
110 } | |
111 }); | |
112 | |
113 column.setEditingSupport(new class(v) AbstractEditingSupport { | |
114 public this(TableViewer t ){ | |
115 super(t); | |
116 } | |
117 protected Object getValue(Object element) { | |
118 return (cast(Person) element).givenname; | |
119 } | |
120 protected void doSetValue(Object element, Object value) { | |
121 (cast(Person) element).givenname = value.toString(); | |
122 } | |
123 }); | |
124 | |
125 ColumnViewerSorter cSorter = new class(v,column) ColumnViewerSorter { | |
126 this(TableViewer t, TableViewerColumn c ){ | |
127 super(t,c); | |
128 } | |
129 protected int doCompare(Viewer viewer, Object e1, Object e2) { | |
130 Person p1 = cast(Person) e1; | |
131 Person p2 = cast(Person) e2; | |
132 return p1.givenname.compareToIgnoreCase(p2.givenname); | |
133 } | |
134 }; | |
135 | |
136 column = new TableViewerColumn(v, DWT.NONE); | |
137 column.getColumn().setWidth(200); | |
138 column.getColumn().setText("Surname"); | |
139 column.getColumn().setMoveable(true); | |
140 column.setLabelProvider(new class() ColumnLabelProvider { | |
141 public String getText(Object element) { | |
142 return (cast(Person) element).surname; | |
143 } | |
144 }); | |
145 | |
146 column.setEditingSupport(new class(v) AbstractEditingSupport { | |
147 this(TableViewer t ){ | |
148 super(t); | |
149 } | |
150 protected Object getValue(Object element) { | |
151 return (cast(Person) element).surname; | |
152 } | |
153 protected void doSetValue(Object element, Object value) { | |
154 (cast(Person) element).surname = value.toString(); | |
155 } | |
156 }); | |
157 | |
158 new class(v,column) ColumnViewerSorter { | |
159 this(TableViewer t, TableViewerColumn c ){ | |
160 super(t,c); | |
161 } | |
162 protected int doCompare(Viewer viewer, Object e1, Object e2) { | |
163 Person p1 = cast(Person) e1; | |
164 Person p2 = cast(Person) e2; | |
165 return p1.surname.compareToIgnoreCase(p2.surname); | |
166 } | |
167 }; | |
168 | |
169 column = new TableViewerColumn(v, DWT.NONE); | |
170 column.getColumn().setWidth(200); | |
171 column.getColumn().setText("E-Mail"); | |
172 column.getColumn().setMoveable(true); | |
173 column.setLabelProvider(new class() ColumnLabelProvider { | |
174 public String getText(Object element) { | |
175 return (cast(Person) element).email; | |
176 } | |
177 }); | |
178 | |
179 column.setEditingSupport(new class(v) AbstractEditingSupport { | |
180 this(TableViewer t ){ | |
181 super(t); | |
182 } | |
183 protected Object getValue(Object element) { | |
184 return (cast(Person) element).email; | |
185 } | |
186 protected void doSetValue(Object element, Object value) { | |
187 (cast(Person) element).email = value.toString(); | |
188 } | |
189 }); | |
190 new class(v,column) ColumnViewerSorter { | |
191 this(TableViewer t, TableViewerColumn c ){ | |
192 super(t,c); | |
193 } | |
194 protected int doCompare(Viewer viewer, Object e1, Object e2) { | |
195 Person p1 = cast(Person) e1; | |
196 Person p2 = cast(Person) e2; | |
197 return p1.email.compareToIgnoreCase(p2.email); | |
198 } | |
199 }; | |
200 | |
201 Person[] model = createModel(); | |
202 v.setInput(model); | |
203 v.getTable().setLinesVisible(true); | |
204 v.getTable().setHeaderVisible(true); | |
205 cSorter.setSorter(cSorter, ColumnViewerSorter.ASC); | |
206 } | |
207 | |
208 private Person[] createModel() { | |
209 Person[] elements = new Person[4]; | |
210 elements[0] = new Person("Tom", "Schindl", | |
211 "tom.schindl@bestsolution.at"); | |
212 elements[1] = new Person("Boris", "Bokowski", | |
213 "Boris_Bokowski@ca.ibm.com"); | |
214 elements[2] = new Person("Tod", "Creasey", "Tod_Creasey@ca.ibm.com"); | |
215 elements[3] = new Person("Wayne", "Beaton", "wayne@eclipse.org"); | |
216 | |
217 return elements; | |
218 } | |
219 | |
220 private static abstract class ColumnViewerSorter : ViewerComparator { | |
221 public static final int ASC = 1; | |
222 | |
223 public static final int NONE = 0; | |
224 | |
225 public static final int DESC = -1; | |
226 | |
227 private int direction = 0; | |
228 | |
229 private TableViewerColumn column; | |
230 | |
231 private ColumnViewer viewer; | |
232 | |
233 public this(ColumnViewer viewer_, TableViewerColumn column_) { | |
234 this.column = column_; | |
235 this.viewer = viewer_; | |
236 this.column.getColumn().addSelectionListener(new class() SelectionAdapter { | |
237 | |
238 public void widgetSelected(SelectionEvent e) { | |
239 if( this.viewer.getComparator() !is null ) { | |
240 if( this.viewer.getComparator() == this ) { | |
241 int tdirection = this.direction; | |
242 | |
243 if( tdirection == ASC ) { | |
244 setSorter(this, DESC); | |
245 } else if( tdirection == DESC ) { | |
246 setSorter(this, NONE); | |
247 } | |
248 } else { | |
249 setSorter(this, ASC); | |
250 } | |
251 } else { | |
252 setSorter(this, ASC); | |
253 } | |
254 } | |
255 }); | |
256 } | |
257 | |
258 public void setSorter(ColumnViewerSorter sorter, int direction) { | |
259 if( direction == NONE ) { | |
260 column.getColumn().getParent().setSortColumn(null); | |
261 column.getColumn().getParent().setSortDirection(DWT.NONE); | |
262 viewer.setComparator(null); | |
263 } else { | |
264 column.getColumn().getParent().setSortColumn(column.getColumn()); | |
265 sorter.direction = direction; | |
266 | |
267 if( direction == ASC ) { | |
268 column.getColumn().getParent().setSortDirection(DWT.DOWN); | |
269 } else { | |
270 column.getColumn().getParent().setSortDirection(DWT.UP); | |
271 } | |
272 | |
273 if( viewer.getComparator() == sorter ) { | |
274 viewer.refresh(); | |
275 } else { | |
276 viewer.setComparator(sorter); | |
277 } | |
278 | |
279 } | |
280 } | |
281 | |
282 public int compare(Viewer viewer, Object e1, Object e2) { | |
283 return direction * doCompare(viewer, e1, e2); | |
284 } | |
285 | |
286 protected abstract int doCompare(Viewer viewer, Object e1, Object e2); | |
287 } | |
288 | |
289 /** | |
290 * @param args | |
291 */ | |
292 public static void main(String[] args) { | |
293 Display display = new Display(); | |
294 | |
295 Shell shell = new Shell(display); | |
296 shell.setLayout(new FillLayout()); | |
297 new Snippet040TableViewerSorting(shell); | |
298 shell.open(); | |
299 | |
300 while (!shell.isDisposed()) { | |
301 if (!display.readAndDispatch()) | |
302 display.sleep(); | |
303 } | |
304 display.dispose(); | |
305 } | |
306 | |
307 } |