1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.argeo.people.ui.dialogs;
17
18 import org.eclipse.jface.dialogs.TrayDialog;
19 import org.eclipse.jface.viewers.ColumnLabelProvider;
20 import org.eclipse.jface.viewers.DoubleClickEvent;
21 import org.eclipse.jface.viewers.IDoubleClickListener;
22 import org.eclipse.jface.viewers.ISelectionChangedListener;
23 import org.eclipse.jface.viewers.IStructuredContentProvider;
24 import org.eclipse.jface.viewers.IStructuredSelection;
25 import org.eclipse.jface.viewers.SelectionChangedEvent;
26 import org.eclipse.jface.viewers.TableViewer;
27 import org.eclipse.jface.viewers.TableViewerColumn;
28 import org.eclipse.jface.viewers.Viewer;
29 import org.eclipse.jface.viewers.ViewerFilter;
30 import org.eclipse.swt.SWT;
31 import org.eclipse.swt.events.ModifyEvent;
32 import org.eclipse.swt.events.ModifyListener;
33 import org.eclipse.swt.graphics.Point;
34 import org.eclipse.swt.layout.GridData;
35 import org.eclipse.swt.layout.GridLayout;
36 import org.eclipse.swt.widgets.Composite;
37 import org.eclipse.swt.widgets.Control;
38 import org.eclipse.swt.widgets.Shell;
39 import org.eclipse.swt.widgets.TableColumn;
40 import org.eclipse.swt.widgets.Text;
41
42
43 public class PickUpFromListDialog extends TrayDialog {
44 private static final long serialVersionUID = 1L;
45
46
47 private TableViewer viewer;
48 private final MyFilter viewerFilter;
49 private final String title;
50
51
52 private final String[] elements;
53
54 private String selectedValue;
55
56 public PickUpFromListDialog(Shell parentShell, String title,
57 String[] elements) {
58 super(parentShell);
59 this.title = title;
60 this.elements = elements;
61 viewerFilter = new MyFilter();
62 }
63
64 protected Point getInitialSize() {
65 return new Point(250, 400);
66 }
67
68 protected Control createDialogArea(Composite parent) {
69 Composite dialogArea = (Composite) super.createDialogArea(parent);
70 dialogArea.setLayout(new GridLayout());
71
72 Text txtFilter = new Text(dialogArea, SWT.BORDER | SWT.SEARCH
73 | SWT.ICON_SEARCH | SWT.ICON_CANCEL);
74 txtFilter
75 .setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
76 txtFilter.addModifyListener(new ModifyListener() {
77 private static final long serialVersionUID = 1L;
78
79 public void modifyText(ModifyEvent event) {
80 Text text = (Text) event.widget;
81 viewerFilter.setText(text.getText());
82 viewer.refresh();
83 }
84 });
85
86 createViewer(dialogArea);
87
88 viewer.setInput("init");
89
90
91 viewer.addDoubleClickListener(new MyDoubleClickListener());
92 viewer.addSelectionChangedListener(new MySelectionChangedListener());
93
94 parent.pack();
95 return dialogArea;
96 }
97
98 private void createViewer(Composite parent) {
99 int style = SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL;
100 viewer = new TableViewer(parent, style);
101 viewer.setContentProvider(new MyProvider());
102 createColumn();
103 viewer.addFilter(viewerFilter);
104 viewer.getTable().setHeaderVisible(false);
105 GridData tableData = new GridData(SWT.FILL, SWT.FILL, true, true);
106 viewer.getTable().setLayoutData(tableData);
107 }
108
109 private TableViewerColumn createColumn() {
110 TableViewerColumn result = new TableViewerColumn(viewer, SWT.NONE);
111 result.setLabelProvider(new ColumnLabelProvider());
112 TableColumn column = result.getColumn();
113 column.setWidth(170);
114 column.setMoveable(true);
115 return result;
116 }
117
118 private class MyProvider implements IStructuredContentProvider {
119 private static final long serialVersionUID = 1L;
120
121 public Object[] getElements(Object inputElement) {
122 return PickUpFromListDialog.this.elements;
123 }
124
125 public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
126 }
127
128 public void dispose() {
129
130 }
131 }
132
133 public String getSelected() {
134 return selectedValue;
135 }
136
137 protected void configureShell(Shell shell) {
138 super.configureShell(shell);
139 shell.setText(title);
140 }
141
142 private static final class MyFilter extends ViewerFilter {
143 private static final long serialVersionUID = 1L;
144 private String text;
145
146 public void setText(final String string) {
147 text = string;
148 }
149
150 @Override
151 public boolean select(Viewer viewer, Object parentElement,
152 Object element) {
153 boolean result = true;
154 String person = (String) element;
155 if (text != null && text.length() > 0) {
156 String personText = person.toLowerCase();
157 result = personText.indexOf(text.toLowerCase()) != -1;
158 }
159 return result;
160 }
161
162 @Override
163 public boolean isFilterProperty(Object element, String prop) {
164 return true;
165 }
166 }
167
168 class MySelectionChangedListener implements ISelectionChangedListener {
169 @Override
170 public void selectionChanged(SelectionChangedEvent event) {
171 if (event.getSelection().isEmpty()) {
172 selectedValue = "";
173 return;
174 }
175
176 Object obj = ((IStructuredSelection) event.getSelection())
177 .getFirstElement();
178 if (obj instanceof String) {
179 selectedValue = (String) obj;
180 }
181 }
182 }
183
184 class MyDoubleClickListener implements IDoubleClickListener {
185 public void doubleClick(DoubleClickEvent evt) {
186 if (evt.getSelection().isEmpty()) {
187 selectedValue = "";
188 return;
189 }
190
191 Object obj = ((IStructuredSelection) evt.getSelection())
192 .getFirstElement();
193 if (obj instanceof String) {
194 selectedValue = (String) obj;
195 }
196 okPressed();
197 }
198 }
199 }