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 }