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