1
2
3
4
5
6
7
8
9
10
11 package de.jaret.util.ui.infoprovider;
12
13 import java.util.ArrayList;
14 import java.util.HashMap;
15 import java.util.Map;
16
17 import org.eclipse.jface.viewers.ILabelProviderListener;
18 import org.eclipse.jface.viewers.ISelectionChangedListener;
19 import org.eclipse.jface.viewers.IStructuredContentProvider;
20 import org.eclipse.jface.viewers.IStructuredSelection;
21 import org.eclipse.jface.viewers.ITableLabelProvider;
22 import org.eclipse.jface.viewers.ITreeContentProvider;
23 import org.eclipse.jface.viewers.LabelProvider;
24 import org.eclipse.jface.viewers.SelectionChangedEvent;
25 import org.eclipse.jface.viewers.TableViewer;
26 import org.eclipse.jface.viewers.TreeViewer;
27 import org.eclipse.jface.viewers.Viewer;
28 import org.eclipse.swt.SWT;
29 import org.eclipse.swt.custom.SashForm;
30 import org.eclipse.swt.events.SelectionEvent;
31 import org.eclipse.swt.events.SelectionListener;
32 import org.eclipse.swt.graphics.Image;
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.layout.RowData;
37 import org.eclipse.swt.layout.RowLayout;
38 import org.eclipse.swt.widgets.Button;
39 import org.eclipse.swt.widgets.Composite;
40 import org.eclipse.swt.widgets.Display;
41 import org.eclipse.swt.widgets.Shell;
42 import org.eclipse.swt.widgets.TableColumn;
43
44 import de.jaret.util.infoprovider.JaretInfoProvider;
45 import de.jaret.util.infoprovider.SysInfoEntry;
46 import de.jaret.util.ui.TableExtension;
47
48
49
50
51
52
53
54 public class InfoProviderView implements ISelectionChangedListener, SelectionListener {
55 static final int BUTTON_WIDTH = 50;
56 Shell _shell;
57
58 private TableViewer _tviewer;
59
60 private Button _closeButton;
61 private Button _refreshButton;
62
63 private TreeViewer _treeViewer;
64 private JaretInfoProvider _rootProvider;
65 private int _accessLevel;
66
67
68
69
70
71
72
73
74 public InfoProviderView(JaretInfoProvider rootInfoProvider, String title, int accessLevel) {
75 _accessLevel = accessLevel;
76 _shell = new Shell(Display.getCurrent());
77 _rootProvider = rootInfoProvider;
78 _shell.setText(title != null ? title : "Info");
79
80 _shell.setSize(700, 400);
81
82 createControls();
83 _shell.open();
84 }
85
86 public Shell getShell() {
87 return _shell;
88 }
89
90 protected void createControls() {
91 Composite composite = _shell;
92 GridLayout gridLayout = new GridLayout();
93 gridLayout.numColumns = 1;
94 composite.setLayout(gridLayout);
95
96 GridData gd = new GridData(GridData.FILL_BOTH);
97
98 SashForm sash = new SashForm(composite, SWT.HORIZONTAL);
99 sash.setLayoutData(gd);
100
101 _treeViewer = new TreeViewer(sash);
102 _treeViewer.setContentProvider(new IPTreeContentProvider(_rootProvider));
103 _treeViewer.setInput("");
104 _treeViewer.setLabelProvider(new IPTreeLabelProvider());
105 _treeViewer.addSelectionChangedListener(this);
106
107 _tviewer = new TableViewer(sash, SWT.SINGLE | SWT.FULL_SELECTION | SWT.BORDER);
108 _tviewer.setContentProvider(new IPTableContentProvider());
109 _tviewer.setLabelProvider(new IPTableLabelProvider());
110
111 TableColumn column = new TableColumn(_tviewer.getTable(), SWT.LEFT);
112 column.setText("Name");
113 column.setWidth(100);
114 column = new TableColumn(_tviewer.getTable(), SWT.LEFT);
115 column.setText("Value");
116 column.setWidth(100);
117
118 _tviewer.getTable().setHeaderVisible(true);
119
120 TableExtension te = new TableExtension(_tviewer);
121
122
123
124 Composite buttonbar = new Composite(composite, SWT.NULL);
125 gd = new GridData(GridData.HORIZONTAL_ALIGN_END);
126 buttonbar.setLayoutData(gd);
127
128 buttonbar.setLayout(new RowLayout());
129
130 _refreshButton = new Button(buttonbar, SWT.PUSH);
131 _refreshButton.setText("Refresh");
132 Point size = _refreshButton.computeSize(SWT.DEFAULT, SWT.DEFAULT);
133 RowData rd = new RowData(BUTTON_WIDTH, size.y);
134 _refreshButton.setLayoutData(rd);
135 _refreshButton.addSelectionListener(this);
136
137 _closeButton = new Button(buttonbar, SWT.PUSH);
138 _closeButton.setText("Close");
139 size = _closeButton.computeSize(SWT.DEFAULT, SWT.DEFAULT);
140 rd = new RowData(BUTTON_WIDTH, size.y);
141 _closeButton.setLayoutData(rd);
142 _shell.setDefaultButton(_closeButton);
143 _closeButton.addSelectionListener(this);
144
145 }
146
147 public class IPTreeContentProvider implements ITreeContentProvider {
148 Map _parentMap = new HashMap();
149 JaretInfoProvider _root;
150
151 public IPTreeContentProvider(JaretInfoProvider root) {
152 _root = root;
153 }
154
155
156
157
158
159
160 public Object[] getChildren(Object arg0) {
161 java.util.List l = ((JaretInfoProvider) arg0).getSubInfoProviders();
162 if (l == null) {
163 return new Object[0];
164 }
165 return l.toArray();
166 }
167
168
169
170
171
172
173 public Object getParent(Object arg0) {
174 Object parent = _parentMap.get(arg0);
175 if (parent == null) {
176 parent = findParent(_root, (JaretInfoProvider) arg0);
177 _parentMap.put(arg0, parent);
178 }
179 System.out.println("PARENT " + parent);
180 return parent;
181 }
182
183
184
185
186
187 private JaretInfoProvider findParent(JaretInfoProvider base, JaretInfoProvider child) {
188 java.util.List l = base.getSubInfoProviders();
189 if (l == null) {
190 return null;
191 }
192
193 for (int i = 0; i < l.size(); i++) {
194 JaretInfoProvider ip = (JaretInfoProvider) l.get(i);
195 if (ip.equals(child)) {
196 return base;
197 } else {
198 JaretInfoProvider ipNext = findParent(ip, child);
199 if (ipNext != null) {
200 return ipNext;
201 }
202 }
203 }
204 return null;
205 }
206
207
208
209
210
211
212 public boolean hasChildren(Object arg0) {
213 if (arg0 instanceof String)
214 return true;
215 return getChildren(arg0).length > 0 ? true : false;
216 }
217
218
219
220
221
222
223 public Object[] getElements(Object arg0) {
224
225 if (arg0 instanceof String)
226 return new Object[] {_root};
227 return getChildren(arg0);
228 }
229
230
231
232
233
234
235 public void dispose() {
236 }
237
238
239
240
241
242
243
244 public void inputChanged(Viewer arg0, Object arg1, Object arg2) {
245 }
246 }
247
248 class IPTreeLabelProvider extends LabelProvider {
249 public String getText(Object o) {
250 JaretInfoProvider ip = (JaretInfoProvider) o;
251 String text = ip.getInfoProviderName();
252 return text;
253 }
254 }
255
256 class IPTableContentProvider implements IStructuredContentProvider {
257 public Object[] getElements(Object element) {
258 JaretInfoProvider ip = (JaretInfoProvider) element;
259 Object[] kids = null;
260 java.util.List<SysInfoEntry> l = ip.getSysInfoEntries();
261
262 java.util.List<SysInfoEntry> lout = new ArrayList<SysInfoEntry>();
263 for (SysInfoEntry entry : l) {
264 if (entry.access <= _accessLevel) {
265 lout.add(entry);
266 }
267 }
268 kids = lout.toArray();
269 return kids;
270 }
271
272 public void dispose() {
273 }
274
275 public void inputChanged(Viewer viewer, Object old_object, Object new_object) {
276 }
277 }
278
279 class IPTableLabelProvider implements ITableLabelProvider {
280 public String getColumnText(Object obj, int i) {
281 String result;
282 SysInfoEntry entry = (SysInfoEntry) obj;
283 switch (i) {
284 case 0:
285 result = entry.name;
286 break;
287 case 1:
288 result = entry.value;
289 break;
290 default:
291 result = "error - unknow column";
292 break;
293 }
294 return result;
295 }
296
297 public void addListener(ILabelProviderListener ilabelproviderlistener) {
298 }
299
300 public void dispose() {
301 }
302
303 public boolean isLabelProperty(Object obj, String s) {
304 return false;
305 }
306
307 public void removeListener(ILabelProviderListener ilabelproviderlistener) {
308 }
309
310 public Image getColumnImage(Object arg0, int arg1) {
311 return null;
312 }
313 }
314
315
316
317
318
319
320 public void selectionChanged(SelectionChangedEvent event) {
321 IStructuredSelection selection = (IStructuredSelection) event.getSelection();
322 Object selected = selection.getFirstElement();
323 _tviewer.setInput(selected);
324 }
325
326
327
328
329
330
331 public void widgetSelected(SelectionEvent event) {
332 if (event.getSource().equals(_closeButton)) {
333 _shell.close();
334 } else if (event.getSource().equals(_refreshButton)) {
335 _treeViewer.refresh();
336 _tviewer.refresh();
337 }
338 }
339
340
341
342
343
344
345 public void widgetDefaultSelected(SelectionEvent event) {
346 }
347
348 }