Mercurial > projects > dwt2
comparison org.eclipse.jface.snippets/EclipseJfaceSnippets/org/eclipse/jface/snippets/viewers/Snippet040TableViewerSorting.d @ 31:5d87d4191adf
Added JFace Snippets sources
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Mon, 23 Mar 2009 11:16:06 +0100 |
parents | |
children | c4b36186a9bc |
comparison
equal
deleted
inserted
replaced
30:93b0e7382fd5 | 31:5d87d4191adf |
---|---|
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 snippets.viewers.Snippet040TableViewerSorting; | |
14 | |
15 // http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jface.snippets/Eclipse%20JFace%20Snippets/org/eclipse/jface/snippets/viewers/Snippet040TableViewerSorting.java?view=markup | |
16 | |
17 import dwtx.jface.viewers.CellEditor; | |
18 import dwtx.jface.viewers.ColumnLabelProvider; | |
19 import dwtx.jface.viewers.ColumnViewer; | |
20 import dwtx.jface.viewers.EditingSupport; | |
21 import dwtx.jface.viewers.IStructuredContentProvider; | |
22 import dwtx.jface.viewers.TableViewer; | |
23 import dwtx.jface.viewers.TableViewerColumn; | |
24 import dwtx.jface.viewers.TextCellEditor; | |
25 import dwtx.jface.viewers.Viewer; | |
26 import dwtx.jface.viewers.ViewerComparator; | |
27 import dwt.DWT; | |
28 import dwt.events.SelectionAdapter; | |
29 import dwt.events.SelectionEvent; | |
30 import dwt.layout.FillLayout; | |
31 import dwt.widgets.Display; | |
32 import dwt.widgets.Shell; | |
33 import dwt.dwthelper.utils; | |
34 | |
35 version(JIVE) import jive.stacktrace; | |
36 | |
37 /** | |
38 * Example usage of ViewerComparator in tables to allow sorting | |
39 * | |
40 * @author Tom Schindl <tom.schindl@bestsolution.at> | |
41 * | |
42 */ | |
43 | |
44 void main(String[] args) { | |
45 Snippet040TableViewerSorting.main(args); | |
46 } | |
47 | |
48 private class MyContentProvider : IStructuredContentProvider { | |
49 | |
50 public Object[] getElements(Object inputElement) { | |
51 return (cast(ArrayWrapperT!(Person)) inputElement).array; | |
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 private abstract class ColumnViewerSorter : ViewerComparator { | |
100 public static final int ASC = 1; | |
101 | |
102 public static final int NONE = 0; | |
103 | |
104 public static final int DESC = -1; | |
105 | |
106 private int direction = 0; | |
107 | |
108 private TableViewerColumn column; | |
109 | |
110 private ColumnViewer viewer; | |
111 | |
112 public this(ColumnViewer viewer_, TableViewerColumn column_) { | |
113 this.column = column_; | |
114 this.viewer = viewer_; | |
115 this.column.getColumn().addSelectionListener(new class() SelectionAdapter { | |
116 public void widgetSelected(SelectionEvent e) { | |
117 this.outer.widgetSelected(e); | |
118 } | |
119 }); | |
120 } | |
121 | |
122 private void widgetSelected(SelectionEvent e){ | |
123 if( viewer.getComparator() !is null ) { | |
124 if( viewer.getComparator() is this ) { | |
125 int tdirection = direction; | |
126 | |
127 if( tdirection is ASC ) { | |
128 setSorter(this, DESC); | |
129 } else if( tdirection is DESC ) { | |
130 setSorter(this, NONE); | |
131 } | |
132 } else { | |
133 setSorter(this, ASC); | |
134 } | |
135 } else { | |
136 setSorter(this, ASC); | |
137 } | |
138 } | |
139 public void setSorter(ColumnViewerSorter sorter, int direction) { | |
140 if( direction is NONE ) { | |
141 column.getColumn().getParent().setSortColumn(null); | |
142 column.getColumn().getParent().setSortDirection(DWT.NONE); | |
143 viewer.setComparator(null); | |
144 } else { | |
145 column.getColumn().getParent().setSortColumn(column.getColumn()); | |
146 sorter.direction = direction; | |
147 | |
148 if( direction is ASC ) { | |
149 column.getColumn().getParent().setSortDirection(DWT.DOWN); | |
150 } else { | |
151 column.getColumn().getParent().setSortDirection(DWT.UP); | |
152 } | |
153 | |
154 if( viewer.getComparator() is sorter ) { | |
155 viewer.refresh(); | |
156 } else { | |
157 viewer.setComparator(sorter); | |
158 } | |
159 | |
160 } | |
161 } | |
162 | |
163 public int compare(Viewer viewer, Object e1, Object e2) { | |
164 return direction * doCompare(viewer, e1, e2); | |
165 } | |
166 | |
167 protected abstract int doCompare(Viewer viewer, Object e1, Object e2); | |
168 } | |
169 | |
170 public class Snippet040TableViewerSorting { | |
171 | |
172 | |
173 public this(Shell shell) { | |
174 TableViewer v = new TableViewer(shell, DWT.BORDER | DWT.FULL_SELECTION); | |
175 v.setContentProvider(new MyContentProvider()); | |
176 | |
177 TableViewerColumn column = new TableViewerColumn(v, DWT.NONE); | |
178 column.getColumn().setWidth(200); | |
179 column.getColumn().setText("Givenname"); | |
180 column.getColumn().setMoveable(true); | |
181 column.setLabelProvider(new class() ColumnLabelProvider { | |
182 public String getText(Object element) { | |
183 return (cast(Person) element).givenname; | |
184 } | |
185 }); | |
186 | |
187 column.setEditingSupport(new class(v) AbstractEditingSupport { | |
188 public this(TableViewer t ){ | |
189 super(t); | |
190 } | |
191 protected Object getValue(Object element) { | |
192 return new ArrayWrapperString((cast(Person) element).givenname); | |
193 } | |
194 protected void doSetValue(Object element, Object value) { | |
195 (cast(Person) element).givenname = stringcast(value); | |
196 } | |
197 }); | |
198 | |
199 ColumnViewerSorter cSorter = new class(v,column) ColumnViewerSorter { | |
200 this(TableViewer t, TableViewerColumn c ){ | |
201 super(t,c); | |
202 } | |
203 protected int doCompare(Viewer viewer, Object e1, Object e2) { | |
204 Person p1 = cast(Person) e1; | |
205 Person p2 = cast(Person) e2; | |
206 return p1.givenname.compareToIgnoreCase(p2.givenname); | |
207 } | |
208 }; | |
209 | |
210 column = new TableViewerColumn(v, DWT.NONE); | |
211 column.getColumn().setWidth(200); | |
212 column.getColumn().setText("Surname"); | |
213 column.getColumn().setMoveable(true); | |
214 column.setLabelProvider(new class() ColumnLabelProvider { | |
215 public String getText(Object element) { | |
216 return (cast(Person) element).surname; | |
217 } | |
218 }); | |
219 | |
220 column.setEditingSupport(new class(v) AbstractEditingSupport { | |
221 this(TableViewer t ){ | |
222 super(t); | |
223 } | |
224 protected Object getValue(Object element) { | |
225 return stringcast((cast(Person) element).surname); | |
226 } | |
227 protected void doSetValue(Object element, Object value) { | |
228 (cast(Person) element).surname = stringcast(value); | |
229 } | |
230 }); | |
231 | |
232 new class(v,column) ColumnViewerSorter { | |
233 this(TableViewer t, TableViewerColumn c ){ | |
234 super(t,c); | |
235 } | |
236 protected int doCompare(Viewer viewer, Object e1, Object e2) { | |
237 Person p1 = cast(Person) e1; | |
238 Person p2 = cast(Person) e2; | |
239 return p1.surname.compareToIgnoreCase(p2.surname); | |
240 } | |
241 }; | |
242 | |
243 column = new TableViewerColumn(v, DWT.NONE); | |
244 column.getColumn().setWidth(200); | |
245 column.getColumn().setText("E-Mail"); | |
246 column.getColumn().setMoveable(true); | |
247 column.setLabelProvider(new class() ColumnLabelProvider { | |
248 public String getText(Object element) { | |
249 return (cast(Person) element).email; | |
250 } | |
251 }); | |
252 | |
253 column.setEditingSupport(new class(v) AbstractEditingSupport { | |
254 this(TableViewer t ){ | |
255 super(t); | |
256 } | |
257 protected Object getValue(Object element) { | |
258 return stringcast((cast(Person) element).email); | |
259 } | |
260 protected void doSetValue(Object element, Object value) { | |
261 (cast(Person) element).email = stringcast(value); | |
262 } | |
263 }); | |
264 new class(v,column) ColumnViewerSorter { | |
265 this(TableViewer t, TableViewerColumn c ){ | |
266 super(t,c); | |
267 } | |
268 protected int doCompare(Viewer viewer, Object e1, Object e2) { | |
269 Person p1 = cast(Person) e1; | |
270 Person p2 = cast(Person) e2; | |
271 return p1.email.compareToIgnoreCase(p2.email); | |
272 } | |
273 }; | |
274 | |
275 Person[] model = createModel(); | |
276 v.setInput( new ArrayWrapperT!(Person)(model)); | |
277 v.getTable().setLinesVisible(true); | |
278 v.getTable().setHeaderVisible(true); | |
279 cSorter.setSorter(cSorter, ColumnViewerSorter.ASC); | |
280 } | |
281 | |
282 private Person[] createModel() { | |
283 Person[] elements = new Person[4]; | |
284 elements[0] = new Person("Tom", "Schindl", | |
285 "tom.schindl@bestsolution.at"); | |
286 elements[1] = new Person("Boris", "Bokowski", | |
287 "Boris_Bokowski@ca.ibm.com"); | |
288 elements[2] = new Person("Tod", "Creasey", "Tod_Creasey@ca.ibm.com"); | |
289 elements[3] = new Person("Wayne", "Beaton", "wayne@eclipse.org"); | |
290 | |
291 return elements; | |
292 } | |
293 | |
294 /** | |
295 * @param args | |
296 */ | |
297 public static void main(String[] args) { | |
298 Display display = new Display(); | |
299 | |
300 Shell shell = new Shell(display); | |
301 shell.setLayout(new FillLayout()); | |
302 new Snippet040TableViewerSorting(shell); | |
303 shell.open(); | |
304 | |
305 while (!shell.isDisposed()) { | |
306 if (!display.readAndDispatch()) | |
307 display.sleep(); | |
308 } | |
309 display.dispose(); | |
310 } | |
311 | |
312 } |