ctf: Handle traces with unknown event attributes
[deliverable/tracecompass.git] / org.eclipse.linuxtools.tmf.ui / src / org / eclipse / linuxtools / tmf / ui / views / filter / FilterViewer.java
CommitLineData
90e2b925
FC
1/*******************************************************************************\r
2 * Copyright (c) 2010 Ericsson\r
3 * \r
4 * All rights reserved. This program and the accompanying materials are\r
5 * made available under the terms of the Eclipse Public License v1.0 which\r
6 * accompanies this distribution, and is available at\r
7 * http://www.eclipse.org/legal/epl-v10.html\r
8 * \r
9 * Contributors:\r
10 * Patrick Tasse - Initial API and implementation\r
11 *******************************************************************************/\r
12\r
13package org.eclipse.linuxtools.tmf.ui.views.filter;\r
14\r
15import java.util.ArrayList;\r
16import java.util.LinkedHashMap;\r
17import java.util.Map;\r
18import java.util.Map.Entry;\r
19\r
4bf17f4a 20import org.eclipse.core.runtime.CoreException;\r
21import org.eclipse.core.runtime.IConfigurationElement;\r
90e2b925
FC
22import org.eclipse.jface.action.Action;\r
23import org.eclipse.jface.action.IMenuListener;\r
24import org.eclipse.jface.action.IMenuManager;\r
25import org.eclipse.jface.action.MenuManager;\r
26import org.eclipse.jface.action.Separator;\r
27import org.eclipse.jface.viewers.ISelection;\r
28import org.eclipse.jface.viewers.ISelectionChangedListener;\r
29import org.eclipse.jface.viewers.IStructuredSelection;\r
30import org.eclipse.jface.viewers.SelectionChangedEvent;\r
31import org.eclipse.jface.viewers.StructuredSelection;\r
32import org.eclipse.jface.viewers.TreeViewer;\r
d34665f9 33import org.eclipse.linuxtools.internal.tmf.ui.Messages;\r
7600ba7d 34import org.eclipse.linuxtools.internal.tmf.ui.parsers.custom.CustomTraceDefinition.OutputColumn;\r
d34665f9
FC
35import org.eclipse.linuxtools.internal.tmf.ui.parsers.custom.CustomTxtEvent;\r
36import org.eclipse.linuxtools.internal.tmf.ui.parsers.custom.CustomTxtTraceDefinition;\r
37import org.eclipse.linuxtools.internal.tmf.ui.parsers.custom.CustomXmlEvent;\r
38import org.eclipse.linuxtools.internal.tmf.ui.parsers.custom.CustomXmlTraceDefinition;\r
d7dbf09a 39import org.eclipse.linuxtools.tmf.core.event.ITmfEvent;\r
5d3e8747 40import org.eclipse.linuxtools.tmf.core.event.ITmfEventType;\r
6c13869b
FC
41import org.eclipse.linuxtools.tmf.core.filter.model.ITmfFilterTreeNode;\r
42import org.eclipse.linuxtools.tmf.core.filter.model.TmfFilterAndNode;\r
43import org.eclipse.linuxtools.tmf.core.filter.model.TmfFilterCompareNode;\r
cbbcc354 44import org.eclipse.linuxtools.tmf.core.filter.model.TmfFilterCompareNode.Type;\r
6c13869b
FC
45import org.eclipse.linuxtools.tmf.core.filter.model.TmfFilterContainsNode;\r
46import org.eclipse.linuxtools.tmf.core.filter.model.TmfFilterEqualsNode;\r
47import org.eclipse.linuxtools.tmf.core.filter.model.TmfFilterEventTypeNode;\r
48import org.eclipse.linuxtools.tmf.core.filter.model.TmfFilterMatchesNode;\r
49import org.eclipse.linuxtools.tmf.core.filter.model.TmfFilterNode;\r
50import org.eclipse.linuxtools.tmf.core.filter.model.TmfFilterOrNode;\r
51import org.eclipse.linuxtools.tmf.core.filter.model.TmfFilterRootNode;\r
8e4a4ad8 52import org.eclipse.linuxtools.tmf.core.filter.model.TmfFilterTreeNode;\r
bfc779a0 53import org.eclipse.linuxtools.tmf.ui.project.model.TmfTraceType;\r
90e2b925
FC
54import org.eclipse.swt.SWT;\r
55import org.eclipse.swt.custom.SashForm;\r
56import org.eclipse.swt.events.FocusEvent;\r
57import org.eclipse.swt.events.FocusListener;\r
58import org.eclipse.swt.events.ModifyEvent;\r
59import org.eclipse.swt.events.ModifyListener;\r
8e4a4ad8
PT
60import org.eclipse.swt.events.PaintEvent;\r
61import org.eclipse.swt.events.PaintListener;\r
90e2b925
FC
62import org.eclipse.swt.events.SelectionAdapter;\r
63import org.eclipse.swt.events.SelectionEvent;\r
64import org.eclipse.swt.layout.FillLayout;\r
65import org.eclipse.swt.layout.GridData;\r
66import org.eclipse.swt.layout.GridLayout;\r
67import org.eclipse.swt.widgets.Button;\r
68import org.eclipse.swt.widgets.Combo;\r
69import org.eclipse.swt.widgets.Composite;\r
70import org.eclipse.swt.widgets.Control;\r
71import org.eclipse.swt.widgets.Display;\r
72import org.eclipse.swt.widgets.Label;\r
73import org.eclipse.swt.widgets.Menu;\r
74import org.eclipse.swt.widgets.Text;\r
75import org.eclipse.swt.widgets.TreeItem;\r
76\r
77class FilterViewer extends Composite {\r
78\r
4bf17f4a 79 private static final String CUSTOM_TXT_CATEGORY = "Custom Text"; //$NON-NLS-1$\r
80 private static final String CUSTOM_XML_CATEGORY = "Custom XML"; //$NON-NLS-1$\r
81\r
90e2b925
FC
82 private TreeViewer fViewer;\r
83 private Composite fComposite;\r
84 \r
4bf17f4a 85 public FilterViewer(Composite parent, int style) {\r
86 super(parent, style);\r
90e2b925 87\r
4bf17f4a 88 setLayout(new FillLayout());\r
89 GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true);\r
90 setLayoutData(gd);\r
91 \r
90e2b925
FC
92 final SashForm sash = new SashForm(this, SWT.HORIZONTAL);\r
93\r
4bf17f4a 94 // Create the tree viewer to display the filter tree\r
95 fViewer = new TreeViewer(sash, SWT.NONE);\r
96 fViewer.setContentProvider(new FilterTreeContentProvider());\r
97 fViewer.setLabelProvider(new FilterTreeLabelProvider());\r
98 fViewer.setInput(new TmfFilterRootNode());\r
99 \r
100 // Create the empty filter node properties panel\r
101 fComposite = new Composite(sash, SWT.NONE);\r
102 GridLayout gl = new GridLayout();\r
103 gl.marginHeight = 0;\r
104 gl.marginWidth = 0;\r
105 fComposite.setLayout(gl);\r
90e2b925 106\r
4bf17f4a 107 createContextMenu();\r
108 \r
109 fViewer.addSelectionChangedListener(new ISelectionChangedListener() {\r
110 @Override\r
90e2b925 111 public void selectionChanged(SelectionChangedEvent event) {\r
4bf17f4a 112 if (!(event.getSelection().isEmpty()) && event.getSelection() instanceof IStructuredSelection) {\r
113 // Update the filter node properties panel to the selection\r
114 IStructuredSelection selection = (IStructuredSelection) event.getSelection();\r
115 ITmfFilterTreeNode node = (ITmfFilterTreeNode) selection.getFirstElement();\r
116 updateFilterNodeComposite(node);\r
117 // Highlight the selection's children\r
118 highlightTreeItems(fViewer.getTree().getSelection()[0].getItems());\r
119 } else {\r
120 updateFilterNodeComposite(null);\r
121 }\r
122 }\r
123 });\r
8e4a4ad8
PT
124\r
125 fViewer.getTree().addPaintListener(new PaintListener() {\r
126 @Override\r
127 public void paintControl(PaintEvent e) {\r
128 TmfFilterTreeNode root = (TmfFilterTreeNode) fViewer.getInput();\r
129 if (root == null || root.getChildrenCount() == 0) {\r
130 e.gc.setForeground(Display.getDefault().getSystemColor(SWT.COLOR_BLACK));\r
131 e.gc.drawText(Messages.FilterViewer_EmptyTreeHintText, 5, 0);\r
132 }\r
133 }\r
134 });\r
4bf17f4a 135 }\r
136 \r
137 /**\r
138 * Create the context menu for the tree viewer\r
139 */\r
140 private void createContextMenu() {\r
141 // Adds root context menu\r
142 MenuManager menuManager = new MenuManager();\r
143 menuManager.setRemoveAllWhenShown(true);\r
144 menuManager.addMenuListener(new IMenuListener() {\r
145 @Override\r
90e2b925 146 public void menuAboutToShow(IMenuManager manager) {\r
4bf17f4a 147 fillContextMenu(manager);\r
148 }\r
149 });\r
90e2b925 150\r
4bf17f4a 151 // Context\r
152 Menu contextMenu = menuManager.createContextMenu(fViewer.getTree());\r
90e2b925 153\r
4bf17f4a 154 // Publish it\r
155 fViewer.getTree().setMenu(contextMenu);\r
156 }\r
157 \r
158 /**\r
159 * Fill the context menu for the tree viewer\r
160 */\r
161 protected void fillContextMenu(IMenuManager manager) {\r
162 final ISelection selection = fViewer.getSelection();\r
163 ITmfFilterTreeNode filterTreeNode = null;\r
164 if (selection instanceof StructuredSelection) {\r
165 Object element = ((StructuredSelection) selection).getFirstElement();\r
166 if (element instanceof ITmfFilterTreeNode) {\r
167 filterTreeNode = (ITmfFilterTreeNode) element;\r
168 }\r
169 }\r
90e2b925 170\r
4bf17f4a 171 final ITmfFilterTreeNode selectedNode = filterTreeNode;\r
172 \r
173 if (selectedNode != null) {\r
174 \r
175 fillContextMenuForNode(selectedNode, manager);\r
176 \r
177 if (selectedNode.getValidChildren().size() > 0) {\r
178 manager.add(new Separator());\r
179 }\r
90e2b925 180\r
4bf17f4a 181 Action deleteAction = new Action() {\r
182 @Override\r
183 public void run() {\r
184 selectedNode.remove();\r
185 fViewer.refresh();\r
186 }\r
187 };\r
188 deleteAction.setText(Messages.FilterViewer_DeleteActionText);\r
189 manager.add(deleteAction);\r
190 \r
191 manager.add(new Separator());\r
192 }\r
90e2b925 193\r
4bf17f4a 194 if (fViewer.getInput() instanceof TmfFilterRootNode || selectedNode == null) {\r
195 final ITmfFilterTreeNode root = (ITmfFilterTreeNode) fViewer.getInput();\r
196 \r
197 fillContextMenuForNode(root, manager);\r
198 }\r
199 }\r
200 \r
201 /**\r
202 * Fill the context menu with the valid children of the provided node\r
203 */\r
204 protected void fillContextMenuForNode(final ITmfFilterTreeNode node, IMenuManager manager) {\r
205 for (final String child : node.getValidChildren()) {\r
206 final Action action = new Action() {\r
207 @Override\r
208 public void run() {\r
209 ITmfFilterTreeNode newNode = null;\r
210 if (TmfFilterNode.NODE_NAME.equals(child)) {\r
211 newNode = new TmfFilterNode(node, ""); //$NON-NLS-1$\r
212 } else if (TmfFilterEventTypeNode.NODE_NAME.equals(child)) {\r
213 newNode = new TmfFilterEventTypeNode(node);\r
214 } else if (TmfFilterAndNode.NODE_NAME.equals(child)) {\r
215 newNode = new TmfFilterAndNode(node);\r
216 } else if (TmfFilterOrNode.NODE_NAME.equals(child)) {\r
217 newNode = new TmfFilterOrNode(node);\r
218 } else if (TmfFilterContainsNode.NODE_NAME.equals(child)) {\r
219 newNode = new TmfFilterContainsNode(node);\r
220 } else if (TmfFilterEqualsNode.NODE_NAME.equals(child)) {\r
221 newNode = new TmfFilterEqualsNode(node);\r
222 } else if (TmfFilterMatchesNode.NODE_NAME.equals(child)) {\r
223 newNode = new TmfFilterMatchesNode(node);\r
224 } else if (TmfFilterCompareNode.NODE_NAME.equals(child)) {\r
225 newNode = new TmfFilterCompareNode(node);\r
226 }\r
227 if (newNode != null) {\r
228 fViewer.refresh();\r
229 fViewer.setSelection(new StructuredSelection(newNode), true);\r
230 }\r
231 }\r
232 };\r
233 if (TmfFilterNode.NODE_NAME.equals(child)) {\r
234 action.setText(Messages.FilterViewer_NewPrefix + " " + child); //$NON-NLS-1$\r
235 } else {\r
236 action.setText(child);\r
237 }\r
238 manager.add(action);\r
239 }\r
240 }\r
241 \r
242 /**\r
243 * Create the appropriate filter node properties composite\r
244 */\r
245 private void updateFilterNodeComposite(ITmfFilterTreeNode node) {\r
246 for (Control control : fComposite.getChildren()) {\r
247 control.dispose();\r
248 }\r
249 \r
250 if (node instanceof TmfFilterNode) {\r
251 new FilterNodeComposite(fComposite, (TmfFilterNode) node);\r
252 } else if (node instanceof TmfFilterEventTypeNode) {\r
253 new FilterEventTypeNodeComposite(fComposite, (TmfFilterEventTypeNode) node);\r
254 } else if (node instanceof TmfFilterAndNode) {\r
255 new FilterAndNodeComposite(fComposite, (TmfFilterAndNode) node);\r
256 } else if (node instanceof TmfFilterOrNode) {\r
257 new FilterOrNodeComposite(fComposite, (TmfFilterOrNode) node);\r
258 } else if (node instanceof TmfFilterContainsNode) {\r
259 new FilterContainsNodeComposite(fComposite, (TmfFilterContainsNode) node);\r
260 } else if (node instanceof TmfFilterEqualsNode) {\r
261 new FilterEqualsNodeComposite(fComposite, (TmfFilterEqualsNode) node);\r
262 } else if (node instanceof TmfFilterMatchesNode) {\r
263 new FilterMatchesNodeComposite(fComposite, (TmfFilterMatchesNode) node);\r
264 } else if (node instanceof TmfFilterCompareNode) {\r
265 new FilterCompareNodeComposite(fComposite, (TmfFilterCompareNode) node);\r
266 } else {\r
267 new FilterBaseNodeComposite(fComposite);\r
268 }\r
269 fComposite.layout();\r
270 }\r
271 \r
272 /**\r
273 * Highlight the provided tree items\r
274 */\r
275 private void highlightTreeItems(TreeItem[] items) {\r
276 resetTreeItems(fViewer.getTree().getItems());\r
277 for (TreeItem item : items) {\r
278 item.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_BLUE));\r
279 }\r
90e2b925 280\r
4bf17f4a 281 }\r
282 \r
283 /**\r
284 * Reset the provided tree items (remove highlight)\r
285 */\r
286 private void resetTreeItems(TreeItem[] items) {\r
287 for (TreeItem item : items) {\r
288 item.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_BLACK));\r
289 resetTreeItems(item.getItems());\r
290 }\r
291 }\r
292 \r
293 public void setInput(ITmfFilterTreeNode root) {\r
294 fViewer.setInput(root);\r
295 fViewer.expandAll();\r
296 \r
297 updateFilterNodeComposite(null);\r
298 }\r
299 \r
300 public ITmfFilterTreeNode getInput() {\r
301 return (ITmfFilterTreeNode) fViewer.getInput();\r
302 }\r
303 \r
304 public void refresh() {\r
305 fViewer.refresh();\r
306 }\r
90e2b925 307\r
4bf17f4a 308 public void setSelection(ITmfFilterTreeNode node, boolean reveal) {\r
309 fViewer.setSelection(new StructuredSelection(node), reveal);\r
310 }\r
90e2b925 311\r
4bf17f4a 312 public void setSelection(ITmfFilterTreeNode node) {\r
313 fViewer.setSelection(new StructuredSelection(node));\r
314 }\r
315 \r
316 public ITmfFilterTreeNode getSelection() {\r
317 final ISelection selection = fViewer.getSelection();\r
318 ITmfFilterTreeNode filterTreeNode = null;\r
319 if (selection instanceof StructuredSelection) {\r
320 Object element = ((StructuredSelection) selection).getFirstElement();\r
321 if (element instanceof ITmfFilterTreeNode) {\r
322 filterTreeNode = (ITmfFilterTreeNode) element;\r
323 }\r
324 }\r
90e2b925 325\r
4bf17f4a 326 final ITmfFilterTreeNode selectedNode = filterTreeNode;\r
327 return selectedNode;\r
328 }\r
329 \r
330 public void addSelectionChangedListener(ISelectionChangedListener listener) {\r
331 fViewer.addSelectionChangedListener(listener);\r
332 }\r
333 \r
334 public void removeSelectionChangedListener(ISelectionChangedListener listener) {\r
335 fViewer.removeSelectionChangedListener(listener);\r
336 }\r
337 \r
338 private class FilterBaseNodeComposite extends Composite {\r
339 \r
340 FilterBaseNodeComposite(Composite parent) {\r
341 super(parent, SWT.NONE);\r
342 setLayout(new GridLayout(2, false));\r
343 setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));\r
344 setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
345 }\r
346 \r
347 protected String[] getFieldsList(ITmfFilterTreeNode node) {\r
348 ArrayList<String> fieldsList = new ArrayList<String>();\r
349 while (node != null) {\r
350 if (node instanceof TmfFilterEventTypeNode) {\r
351 TmfFilterEventTypeNode eventTypeNode = (TmfFilterEventTypeNode) node;\r
352 for (IConfigurationElement ce : TmfTraceType.getTypeElements()) {\r
353 if (ce.getAttribute(TmfTraceType.EVENT_TYPE_ATTR).equals(eventTypeNode.getEventType())) {\r
354 try {\r
2785a4cb 355 ITmfEvent event = (ITmfEvent) ce.createExecutableExtension(TmfTraceType.EVENT_TYPE_ATTR);\r
5d3e8747 356 ITmfEventType eventType = event.getType();\r
4bf17f4a 357 if (eventType != null) {\r
4c564a2d 358 for (String field : eventType.getRootField().getFieldNames()) {\r
4bf17f4a 359 fieldsList.add(field);\r
360 }\r
361 }\r
362 } catch (CoreException e) {\r
363 }\r
8e4a4ad8
PT
364 if (fieldsList.size() == 0) {\r
365 fieldsList.add(ITmfEvent.EVENT_FIELD_TIMESTAMP);\r
366 fieldsList.add(ITmfEvent.EVENT_FIELD_SOURCE);\r
367 fieldsList.add(ITmfEvent.EVENT_FIELD_TYPE);\r
368 fieldsList.add(ITmfEvent.EVENT_FIELD_REFERENCE);\r
369 fieldsList.add(ITmfEvent.EVENT_FIELD_CONTENT);\r
370 }\r
4bf17f4a 371 return fieldsList.toArray(new String[0]);\r
372 }\r
373 }\r
8e4a4ad8 374 if (eventTypeNode.getEventType() != null && eventTypeNode.getEventType().startsWith(CustomTxtEvent.class.getCanonicalName())) {\r
4bf17f4a 375 for (CustomTxtTraceDefinition def : CustomTxtTraceDefinition.loadAll()) {\r
376 if (eventTypeNode.getEventType().equals(CustomTxtEvent.class.getCanonicalName() + ":" + def.definitionName)) { //$NON-NLS-1$\r
377 for (OutputColumn output : def.outputs) {\r
378 fieldsList.add(output.name);\r
379 }\r
380 return fieldsList.toArray(new String[0]);\r
381 }\r
382 }\r
383 }\r
8e4a4ad8 384 if (eventTypeNode.getEventType() != null && eventTypeNode.getEventType().startsWith(CustomXmlEvent.class.getCanonicalName())) {\r
4bf17f4a 385 for (CustomXmlTraceDefinition def : CustomXmlTraceDefinition.loadAll()) {\r
386 if (eventTypeNode.getEventType().equals(CustomXmlEvent.class.getCanonicalName() + ":" + def.definitionName)) { //$NON-NLS-1$\r
387 for (OutputColumn output : def.outputs) {\r
388 fieldsList.add(output.name);\r
389 }\r
390 return fieldsList.toArray(new String[0]);\r
391 }\r
392 }\r
393 }\r
394 }\r
395 node = node.getParent();\r
396 }\r
8e4a4ad8
PT
397\r
398 fieldsList.add(Messages.FilterViewer_CommonCategory);\r
399 fieldsList.add(ITmfEvent.EVENT_FIELD_TIMESTAMP);\r
400 fieldsList.add(ITmfEvent.EVENT_FIELD_SOURCE);\r
401 fieldsList.add(ITmfEvent.EVENT_FIELD_TYPE);\r
402 fieldsList.add(ITmfEvent.EVENT_FIELD_REFERENCE);\r
403 fieldsList.add(ITmfEvent.EVENT_FIELD_CONTENT);\r
404 fieldsList.add(""); //$NON-NLS-1$\r
405\r
4bf17f4a 406 for (IConfigurationElement ce : TmfTraceType.getTypeElements()) {\r
407 try {\r
2785a4cb 408 ITmfEvent event = (ITmfEvent) ce.createExecutableExtension(TmfTraceType.EVENT_TYPE_ATTR);\r
5d3e8747 409 ITmfEventType eventType = event.getType();\r
8e4a4ad8 410 if (eventType != null && eventType.getFieldNames().length > 0) {\r
4bf17f4a 411 fieldsList.add("[" + TmfTraceType.getCategoryName(ce.getAttribute(TmfTraceType.CATEGORY_ATTR)) + //$NON-NLS-1$\r
412 " : " + ce.getAttribute(TmfTraceType.NAME_ATTR) + "]"); //$NON-NLS-1$ //$NON-NLS-2$\r
4c564a2d 413 for (String field : eventType.getFieldNames()) {\r
4bf17f4a 414 fieldsList.add(field);\r
415 }\r
416 fieldsList.add(""); //$NON-NLS-1$\r
417 }\r
418 } catch (CoreException e) {\r
419 }\r
420 }\r
421 for (CustomTxtTraceDefinition def : CustomTxtTraceDefinition.loadAll()) {\r
8e4a4ad8
PT
422 if (def.outputs.size() > 0) {\r
423 fieldsList.add("[" + CUSTOM_TXT_CATEGORY + //$NON-NLS-1$\r
424 " : " + def.definitionName + "]"); //$NON-NLS-1$ //$NON-NLS-2$\r
425 for (OutputColumn output : def.outputs) {\r
426 fieldsList.add(output.name);\r
427 }\r
428 fieldsList.add(""); //$NON-NLS-1$\r
4bf17f4a 429 }\r
4bf17f4a 430 }\r
431 for (CustomXmlTraceDefinition def : CustomXmlTraceDefinition.loadAll()) {\r
8e4a4ad8
PT
432 if (def.outputs.size() > 0) {\r
433 fieldsList.add("[" + CUSTOM_XML_CATEGORY + //$NON-NLS-1$\r
434 " : " + def.definitionName + "]"); //$NON-NLS-1$ //$NON-NLS-2$\r
435 for (OutputColumn output : def.outputs) {\r
436 fieldsList.add(output.name);\r
437 }\r
438 fieldsList.add(""); //$NON-NLS-1$\r
4bf17f4a 439 }\r
4bf17f4a 440 }\r
441 return fieldsList.toArray(new String[0]);\r
442 }\r
443 }\r
90e2b925 444\r
4bf17f4a 445 private class FilterNodeComposite extends FilterBaseNodeComposite {\r
446 TmfFilterNode fNode;\r
447 Text fNameText;\r
448 \r
449 FilterNodeComposite(Composite parent, TmfFilterNode node) {\r
450 super(parent);\r
451 fNode = node;\r
452 \r
453 Label label = new Label(this, SWT.NONE);\r
454 label.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
455 label.setText(Messages.FilterViewer_NameLabel);\r
456 \r
457 fNameText = new Text(this, SWT.BORDER);\r
458 fNameText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));\r
459 if (node.getFilterName() != null && node.getFilterName().length() > 0) {\r
460 fNameText.setText(node.getFilterName());\r
461 } else {\r
462 fNameText.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_GRAY));\r
463 fNameText.setText(Messages.FilterViewer_FilterNameHint);\r
464 }\r
465 fNameText.addFocusListener(new FocusListener() {\r
466 @Override\r
90e2b925 467 public void focusLost(FocusEvent e) {\r
4bf17f4a 468 if (fNode.getFilterName() == null || fNode.getFilterName().length() == 0) {\r
469 fNameText.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_GRAY));\r
470 fNameText.setText(Messages.FilterViewer_FilterNameHint);\r
471 }\r
472 }\r
473 @Override\r
90e2b925 474 public void focusGained(FocusEvent e) {\r
4bf17f4a 475 if (fNameText.getForeground().equals(Display.getCurrent().getSystemColor(SWT.COLOR_GRAY))) {\r
476 fNameText.setText(""); //$NON-NLS-1$\r
477 }\r
478 fNameText.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_BLACK));\r
479 }\r
480 });\r
481 fNameText.addModifyListener(new ModifyListener() {\r
482 @Override\r
90e2b925 483 public void modifyText(ModifyEvent e) {\r
4bf17f4a 484 if (! fNameText.getForeground().equals(Display.getCurrent().getSystemColor(SWT.COLOR_GRAY))) {\r
485 fNode.setFilterName(fNameText.getText());\r
486 fViewer.refresh(fNode);\r
487 }\r
488 }\r
489 });\r
490 }\r
491 }\r
90e2b925 492\r
4bf17f4a 493 private class FilterEventTypeNodeComposite extends FilterBaseNodeComposite {\r
494 TmfFilterEventTypeNode fNode;\r
495 Combo fTypeCombo;\r
496 Map<String, Object> fEventsTypeMap;\r
497 \r
498 FilterEventTypeNodeComposite(Composite parent, TmfFilterEventTypeNode node) {\r
499 super(parent);\r
500 fNode = node;\r
501 fEventsTypeMap = getEventsTypeMap();\r
90e2b925 502\r
4bf17f4a 503 Label label = new Label(this, SWT.NONE);\r
504 label.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
505 label.setText(Messages.FilterViewer_TypeLabel);\r
506 \r
507 fTypeCombo = new Combo(this, SWT.DROP_DOWN | SWT.READ_ONLY);\r
508 fTypeCombo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));\r
509 fTypeCombo.setItems(fEventsTypeMap.keySet().toArray(new String[0]));\r
510 if (fNode.getEventType() != null) {\r
511 for (Entry <String, Object> eventTypeEntry : fEventsTypeMap.entrySet()) {\r
512 Object value = eventTypeEntry.getValue();\r
513 if (value instanceof IConfigurationElement) {\r
514 IConfigurationElement ce = (IConfigurationElement) value;\r
515 if (ce.getAttribute(TmfTraceType.EVENT_TYPE_ATTR).equals(fNode.getEventType())) {\r
516 fTypeCombo.setText(eventTypeEntry.getKey());\r
517 }\r
518 } else if (value instanceof CustomTxtTraceDefinition) {\r
519 CustomTxtTraceDefinition def = (CustomTxtTraceDefinition) value;\r
520 String eventType = CustomTxtEvent.class.getCanonicalName() + ":" + def.definitionName; //$NON-NLS-1$\r
521 if (eventType.equals(fNode.getEventType())) {\r
522 fTypeCombo.setText(eventTypeEntry.getKey());\r
523 }\r
524 } else if (value instanceof CustomXmlTraceDefinition) {\r
525 CustomXmlTraceDefinition def = (CustomXmlTraceDefinition) value;\r
526 String eventType = CustomXmlEvent.class.getCanonicalName() + ":" + def.definitionName; //$NON-NLS-1$\r
527 if (eventType.equals(fNode.getEventType())) {\r
528 fTypeCombo.setText(eventTypeEntry.getKey());\r
529 }\r
530 }\r
531 }\r
532 }\r
533 fTypeCombo.addModifyListener(new ModifyListener() {\r
534 @Override\r
90e2b925 535 public void modifyText(ModifyEvent e) {\r
4bf17f4a 536 for (Entry <String, Object> eventTypeEntry : fEventsTypeMap.entrySet()) {\r
537 if (eventTypeEntry.getKey().equals(fTypeCombo.getText())) {\r
538 Object value = eventTypeEntry.getValue();\r
539 if (value instanceof IConfigurationElement) {\r
540 IConfigurationElement ce = (IConfigurationElement) value;\r
541 fNode.setEventType(ce.getAttribute(TmfTraceType.EVENT_TYPE_ATTR));\r
542 fNode.setName(ce.getAttribute(TmfTraceType.NAME_ATTR));\r
543 } else if (value instanceof CustomTxtTraceDefinition) {\r
544 CustomTxtTraceDefinition def = (CustomTxtTraceDefinition) value;\r
545 fNode.setEventType(CustomTxtEvent.class.getCanonicalName() + ":" + def.definitionName); //$NON-NLS-1$\r
546 fNode.setName(def.definitionName);\r
547 } else if (value instanceof CustomXmlTraceDefinition) {\r
548 CustomXmlTraceDefinition def = (CustomXmlTraceDefinition) value;\r
549 fNode.setEventType(CustomXmlEvent.class.getCanonicalName() + ":" + def.definitionName); //$NON-NLS-1$\r
550 fNode.setName(def.definitionName);\r
551 }\r
552 fViewer.refresh(fNode);\r
553 break;\r
554 }\r
555 }\r
556 }\r
557 });\r
558 }\r
559\r
560 protected Map<String, Object> getEventsTypeMap() {\r
561 Map<String, Object> eventsTypeMap = new LinkedHashMap<String, Object>();\r
562 for (IConfigurationElement ce : TmfTraceType.getTypeElements()) {\r
563 String categoryName = TmfTraceType.getCategoryName(ce.getAttribute(TmfTraceType.CATEGORY_ATTR));\r
564 String text = categoryName + " : " + ce.getAttribute(TmfTraceType.NAME_ATTR); //$NON-NLS-1$\r
565 eventsTypeMap.put(text, ce);\r
566 }\r
567 for (CustomTxtTraceDefinition def : CustomTxtTraceDefinition.loadAll()) {\r
568 String text = CUSTOM_TXT_CATEGORY + " : " + def.definitionName; //$NON-NLS-1$\r
569 eventsTypeMap.put(text, def);\r
570 }\r
571 for (CustomXmlTraceDefinition def : CustomXmlTraceDefinition.loadAll()) {\r
572 String text = CUSTOM_XML_CATEGORY + " : " + def.definitionName; //$NON-NLS-1$\r
573 eventsTypeMap.put(text, def);\r
574 }\r
575 return eventsTypeMap;\r
576 }\r
577 }\r
578 \r
579 private class FilterAndNodeComposite extends FilterBaseNodeComposite {\r
580 TmfFilterAndNode fNode;\r
581 Button fNotButton;\r
582 \r
583 FilterAndNodeComposite(Composite parent, TmfFilterAndNode node) {\r
584 super(parent);\r
585 fNode = node;\r
586 \r
587 Label label = new Label(this, SWT.NONE);\r
588 label.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
589 label.setText(Messages.FilterViewer_NotLabel);\r
590 \r
591 fNotButton = new Button(this, SWT.CHECK);\r
592 fNotButton.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
593 fNotButton.setSelection(fNode.isNot());\r
594 fNotButton.addSelectionListener(new SelectionAdapter() {\r
595 @Override\r
596 public void widgetSelected(SelectionEvent e) {\r
597 fNode.setNot(fNotButton.getSelection());\r
598 fViewer.refresh(fNode);\r
599 }\r
600 });\r
601 }\r
602 }\r
90e2b925 603\r
4bf17f4a 604 private class FilterOrNodeComposite extends FilterBaseNodeComposite {\r
605 TmfFilterOrNode fNode;\r
606 Button fNotButton;\r
607 \r
608 FilterOrNodeComposite(Composite parent, TmfFilterOrNode node) {\r
609 super(parent);\r
610 fNode = node;\r
611 \r
612 Label label = new Label(this, SWT.NONE);\r
613 label.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
614 label.setText(Messages.FilterViewer_NotLabel);\r
615 \r
616 fNotButton = new Button(this, SWT.CHECK);\r
617 fNotButton.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
618 fNotButton.setSelection(fNode.isNot());\r
619 fNotButton.addSelectionListener(new SelectionAdapter() {\r
620 @Override\r
621 public void widgetSelected(SelectionEvent e) {\r
622 fNode.setNot(fNotButton.getSelection());\r
623 fViewer.refresh(fNode);\r
624 }\r
625 });\r
626 }\r
627 }\r
628 \r
629 private class FilterContainsNodeComposite extends FilterBaseNodeComposite {\r
630 TmfFilterContainsNode fNode;\r
631 Button fNotButton;\r
632 Combo fFieldCombo;\r
633 Text fValueText;\r
634 Button fIgnoreCaseButton;\r
635 \r
636 FilterContainsNodeComposite(Composite parent, TmfFilterContainsNode node) {\r
637 super(parent);\r
638 fNode = node;\r
639 \r
640 Label label = new Label(this, SWT.NONE);\r
641 label.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
642 label.setText(Messages.FilterViewer_NotLabel);\r
643 \r
644 fNotButton = new Button(this, SWT.CHECK);\r
645 fNotButton.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
646 fNotButton.setSelection(fNode.isNot());\r
647 fNotButton.addSelectionListener(new SelectionAdapter() {\r
648 @Override\r
649 public void widgetSelected(SelectionEvent e) {\r
650 fNode.setNot(fNotButton.getSelection());\r
651 fViewer.refresh(fNode);\r
652 }\r
653 });\r
654 \r
655 label = new Label(this, SWT.NONE);\r
656 label.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
657 label.setText(Messages.FilterViewer_FieldLabel);\r
658 \r
659 fFieldCombo = new Combo(this, SWT.DROP_DOWN);\r
660 fFieldCombo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));\r
661 fFieldCombo.setItems(getFieldsList(fNode));\r
662 if (fNode.getField() != null) {\r
663 fFieldCombo.setText(fNode.getField());\r
664 }\r
665 fFieldCombo.addModifyListener(new ModifyListener() {\r
666 @Override\r
90e2b925 667 public void modifyText(ModifyEvent e) {\r
4bf17f4a 668 fNode.setField(fFieldCombo.getText());\r
669 fViewer.refresh(fNode);\r
670 }\r
671 });\r
672 \r
673 label = new Label(this, SWT.NONE);\r
674 label.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
675 label.setText(Messages.FilterViewer_ValueLabel);\r
676 \r
677 fValueText = new Text(this, SWT.BORDER);\r
678 fValueText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));\r
679 if (node.getValue() != null && node.getValue().length() > 0) {\r
680 fValueText.setText(node.getValue());\r
681 } else {\r
682 fValueText.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_GRAY));\r
683 fValueText.setText(Messages.FilterViewer_ValueHint);\r
684 }\r
685 fValueText.addFocusListener(new FocusListener() {\r
686 @Override\r
90e2b925 687 public void focusLost(FocusEvent e) {\r
4bf17f4a 688 if (fNode.getValue() == null || fNode.getValue().length() == 0) {\r
689 fValueText.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_GRAY));\r
690 fValueText.setText(Messages.FilterViewer_ValueHint);\r
691 }\r
692 }\r
693 @Override\r
90e2b925 694 public void focusGained(FocusEvent e) {\r
4bf17f4a 695 if (fValueText.getForeground().equals(Display.getCurrent().getSystemColor(SWT.COLOR_GRAY))) {\r
696 fValueText.setText(""); //$NON-NLS-1$\r
697 }\r
698 fValueText.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_BLACK));\r
699 }\r
700 });\r
701 fValueText.addModifyListener(new ModifyListener() {\r
702 @Override\r
90e2b925 703 public void modifyText(ModifyEvent e) {\r
4bf17f4a 704 if (! fValueText.getForeground().equals(Display.getCurrent().getSystemColor(SWT.COLOR_GRAY))) {\r
705 fNode.setValue(fValueText.getText());\r
706 fViewer.refresh(fNode);\r
707 }\r
708 }\r
709 });\r
710 \r
711 label = new Label(this, SWT.NONE);\r
712 label.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
713 \r
714 fIgnoreCaseButton = new Button(this, SWT.CHECK);\r
715 fIgnoreCaseButton.setSelection(fNode.isIgnoreCase());\r
716 fIgnoreCaseButton.setText(Messages.FilterViewer_IgnoreCaseButtonText);\r
717 fIgnoreCaseButton.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
718 fIgnoreCaseButton.addSelectionListener(new SelectionAdapter() {\r
719 @Override\r
720 public void widgetSelected(SelectionEvent e) {\r
721 fNode.setIgnoreCase(fIgnoreCaseButton.getSelection());\r
722 fViewer.refresh(fNode);\r
723 }\r
724 });\r
725 }\r
726 }\r
90e2b925 727\r
4bf17f4a 728 private class FilterEqualsNodeComposite extends FilterBaseNodeComposite {\r
729 TmfFilterEqualsNode fNode;\r
730 Button fNotButton;\r
731 Combo fFieldCombo;\r
732 Text fValueText;\r
733 Button fIgnoreCaseButton;\r
734 \r
735 FilterEqualsNodeComposite(Composite parent, TmfFilterEqualsNode node) {\r
736 super(parent);\r
737 fNode = node;\r
738 \r
739 Label label = new Label(this, SWT.NONE);\r
740 label.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
741 label.setText(Messages.FilterViewer_NotLabel);\r
742 \r
743 fNotButton = new Button(this, SWT.CHECK);\r
744 fNotButton.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
745 fNotButton.setSelection(fNode.isNot());\r
746 fNotButton.addSelectionListener(new SelectionAdapter() {\r
747 @Override\r
748 public void widgetSelected(SelectionEvent e) {\r
749 fNode.setNot(fNotButton.getSelection());\r
750 fViewer.refresh(fNode);\r
751 }\r
752 });\r
753 \r
754 label = new Label(this, SWT.NONE);\r
755 label.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
756 label.setText(Messages.FilterViewer_FieldLabel);\r
757 \r
758 fFieldCombo = new Combo(this, SWT.DROP_DOWN);\r
759 fFieldCombo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));\r
760 fFieldCombo.setItems(getFieldsList(fNode));\r
761 if (fNode.getField() != null) {\r
762 fFieldCombo.setText(fNode.getField());\r
763 }\r
764 fFieldCombo.addModifyListener(new ModifyListener() {\r
765 @Override\r
90e2b925 766 public void modifyText(ModifyEvent e) {\r
4bf17f4a 767 fNode.setField(fFieldCombo.getText());\r
768 fViewer.refresh(fNode);\r
769 }\r
770 });\r
771 \r
772 label = new Label(this, SWT.NONE);\r
773 label.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
774 label.setText(Messages.FilterViewer_ValueLabel);\r
775 \r
776 fValueText = new Text(this, SWT.BORDER);\r
777 fValueText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));\r
778 if (node.getValue() != null && node.getValue().length() > 0) {\r
779 fValueText.setText(node.getValue());\r
780 } else {\r
781 fValueText.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_GRAY));\r
782 fValueText.setText(Messages.FilterViewer_ValueHint);\r
783 }\r
784 fValueText.addFocusListener(new FocusListener() {\r
785 @Override\r
90e2b925 786 public void focusLost(FocusEvent e) {\r
4bf17f4a 787 if (fNode.getValue() == null || fNode.getValue().length() == 0) {\r
788 fValueText.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_GRAY));\r
789 fValueText.setText(Messages.FilterViewer_ValueHint);\r
790 }\r
791 }\r
792 @Override\r
90e2b925 793 public void focusGained(FocusEvent e) {\r
4bf17f4a 794 if (fValueText.getForeground().equals(Display.getCurrent().getSystemColor(SWT.COLOR_GRAY))) {\r
795 fValueText.setText(""); //$NON-NLS-1$\r
796 }\r
797 fValueText.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_BLACK));\r
798 }\r
799 });\r
800 fValueText.addModifyListener(new ModifyListener() {\r
801 @Override\r
90e2b925 802 public void modifyText(ModifyEvent e) {\r
4bf17f4a 803 if (! fValueText.getForeground().equals(Display.getCurrent().getSystemColor(SWT.COLOR_GRAY))) {\r
804 fNode.setValue(fValueText.getText());\r
805 fViewer.refresh(fNode);\r
806 }\r
807 }\r
808 });\r
809 \r
810 label = new Label(this, SWT.NONE);\r
811 label.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
812 \r
813 fIgnoreCaseButton = new Button(this, SWT.CHECK);\r
814 fIgnoreCaseButton.setSelection(fNode.isIgnoreCase());\r
815 fIgnoreCaseButton.setText(Messages.FilterViewer_IgnoreCaseButtonText);\r
816 fIgnoreCaseButton.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
817 fIgnoreCaseButton.addSelectionListener(new SelectionAdapter() {\r
818 @Override\r
819 public void widgetSelected(SelectionEvent e) {\r
820 fNode.setIgnoreCase(fIgnoreCaseButton.getSelection());\r
821 fViewer.refresh(fNode);\r
822 }\r
823 });\r
824 }\r
825 }\r
90e2b925 826\r
4bf17f4a 827 private class FilterMatchesNodeComposite extends FilterBaseNodeComposite {\r
828 TmfFilterMatchesNode fNode;\r
829 Button fNotButton;\r
830 Combo fFieldCombo;\r
831 Text fRegexText;\r
832 \r
833 FilterMatchesNodeComposite(Composite parent, TmfFilterMatchesNode node) {\r
834 super(parent);\r
835 fNode = node;\r
836 \r
837 Label label = new Label(this, SWT.NONE);\r
838 label.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
839 label.setText(Messages.FilterViewer_NotLabel);\r
840 \r
841 fNotButton = new Button(this, SWT.CHECK);\r
842 fNotButton.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
843 fNotButton.setSelection(fNode.isNot());\r
844 fNotButton.addSelectionListener(new SelectionAdapter() {\r
845 @Override\r
846 public void widgetSelected(SelectionEvent e) {\r
847 fNode.setNot(fNotButton.getSelection());\r
848 fViewer.refresh(fNode);\r
849 }\r
850 });\r
851 \r
852 label = new Label(this, SWT.NONE);\r
853 label.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
854 label.setText(Messages.FilterViewer_FieldLabel);\r
855 \r
856 fFieldCombo = new Combo(this, SWT.DROP_DOWN);\r
857 fFieldCombo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));\r
858 fFieldCombo.setItems(getFieldsList(fNode));\r
859 if (fNode.getField() != null) {\r
860 fFieldCombo.setText(fNode.getField());\r
861 }\r
862 fFieldCombo.addModifyListener(new ModifyListener() {\r
863 @Override\r
90e2b925 864 public void modifyText(ModifyEvent e) {\r
4bf17f4a 865 fNode.setField(fFieldCombo.getText());\r
866 fViewer.refresh(fNode);\r
867 }\r
868 });\r
869 \r
870 label = new Label(this, SWT.NONE);\r
871 label.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
872 label.setText(Messages.FilterViewer_RegexLabel);\r
873 \r
874 fRegexText = new Text(this, SWT.BORDER);\r
875 fRegexText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));\r
876 if (node.getRegex() != null && node.getRegex().length() > 0) {\r
877 fRegexText.setText(node.getRegex());\r
878 } else {\r
879 fRegexText.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_GRAY));\r
880 fRegexText.setText(Messages.FilterViewer_RegexHint);\r
881 }\r
882 fRegexText.addFocusListener(new FocusListener() {\r
883 @Override\r
90e2b925 884 public void focusLost(FocusEvent e) {\r
4bf17f4a 885 if (fNode.getRegex() == null || fNode.getRegex().length() == 0) {\r
886 fRegexText.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_GRAY));\r
887 fRegexText.setText(Messages.FilterViewer_RegexHint);\r
888 }\r
889 }\r
890 @Override\r
90e2b925 891 public void focusGained(FocusEvent e) {\r
4bf17f4a 892 if (fRegexText.getForeground().equals(Display.getCurrent().getSystemColor(SWT.COLOR_GRAY))) {\r
893 fRegexText.setText(""); //$NON-NLS-1$\r
894 }\r
895 fRegexText.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_BLACK));\r
896 }\r
897 });\r
898 fRegexText.addModifyListener(new ModifyListener() {\r
899 @Override\r
90e2b925 900 public void modifyText(ModifyEvent e) {\r
4bf17f4a 901 if (! fRegexText.getForeground().equals(Display.getCurrent().getSystemColor(SWT.COLOR_GRAY))) {\r
902 fNode.setRegex(fRegexText.getText());\r
903 fViewer.refresh(fNode);\r
904 }\r
905 }\r
906 });\r
907 }\r
908 }\r
90e2b925 909\r
4bf17f4a 910 private class FilterCompareNodeComposite extends FilterBaseNodeComposite {\r
911 TmfFilterCompareNode fNode;\r
912 Button fNotButton;\r
913 Combo fFieldCombo;\r
914 Text fValueText;\r
915 Button fLTButton;\r
916 Button fEQButton;\r
917 Button fGTButton;\r
918 Button fNumButton;\r
919 Button fAlphaButton;\r
920 Button fTimestampButton;\r
921 \r
922 FilterCompareNodeComposite(Composite parent, TmfFilterCompareNode node) {\r
923 super(parent);\r
924 fNode = node;\r
925 \r
926 Label label = new Label(this, SWT.NONE);\r
927 label.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
928 label.setText(Messages.FilterViewer_NotLabel);\r
929 \r
930 fNotButton = new Button(this, SWT.CHECK);\r
931 fNotButton.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
932 fNotButton.setSelection(fNode.isNot());\r
933 fNotButton.addSelectionListener(new SelectionAdapter() {\r
934 @Override\r
935 public void widgetSelected(SelectionEvent e) {\r
936 fNode.setNot(fNotButton.getSelection());\r
937 fViewer.refresh(fNode);\r
938 }\r
939 });\r
940 \r
941 label = new Label(this, SWT.NONE);\r
942 label.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
943 label.setText(Messages.FilterViewer_FieldLabel);\r
944 \r
945 fFieldCombo = new Combo(this, SWT.DROP_DOWN);\r
946 fFieldCombo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));\r
947 fFieldCombo.setItems(getFieldsList(fNode));\r
948 if (fNode.getField() != null) {\r
949 fFieldCombo.setText(fNode.getField());\r
950 }\r
951 fFieldCombo.addModifyListener(new ModifyListener() {\r
952 @Override\r
90e2b925 953 public void modifyText(ModifyEvent e) {\r
4bf17f4a 954 fNode.setField(fFieldCombo.getText());\r
955 fViewer.refresh(fNode);\r
956 }\r
957 });\r
958 \r
959 label = new Label(this, SWT.NONE);\r
960 label.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
961 label.setText(Messages.FilterViewer_ResultLabel);\r
962 \r
963 Composite resultGroup = new Composite(this, SWT.NONE);\r
964 GridLayout rggl = new GridLayout(3, true);\r
965 rggl.marginHeight = 0;\r
966 rggl.marginWidth = 0;\r
967 resultGroup.setLayout(rggl);\r
968 resultGroup.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
969 \r
970 fLTButton = new Button(resultGroup, SWT.RADIO);\r
971 fLTButton.setSelection(fNode.getResult() < 0);\r
972 fLTButton.setText("<"); //$NON-NLS-1$\r
973 fLTButton.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
974 fLTButton.addSelectionListener(new SelectionAdapter() {\r
975 @Override\r
976 public void widgetSelected(SelectionEvent e) {\r
977 if (fLTButton.getSelection()) {\r
978 fNode.setResult(-1);\r
979 }\r
980 fViewer.refresh(fNode);\r
981 }\r
982 });\r
983 \r
984 fEQButton = new Button(resultGroup, SWT.RADIO);\r
985 fEQButton.setSelection(fNode.getResult() == 0);\r
986 fEQButton.setText("="); //$NON-NLS-1$\r
987 fEQButton.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
988 fEQButton.addSelectionListener(new SelectionAdapter() {\r
989 @Override\r
990 public void widgetSelected(SelectionEvent e) {\r
991 if (fEQButton.getSelection()) {\r
992 fNode.setResult(0);\r
993 }\r
994 fViewer.refresh(fNode);\r
995 }\r
996 });\r
997 \r
998 fGTButton = new Button(resultGroup, SWT.RADIO);\r
999 fGTButton.setSelection(fNode.getResult() > 0);\r
1000 fGTButton.setText(">"); //$NON-NLS-1$\r
1001 fGTButton.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
1002 fGTButton.addSelectionListener(new SelectionAdapter() {\r
1003 @Override\r
1004 public void widgetSelected(SelectionEvent e) {\r
1005 if (fGTButton.getSelection()) {\r
1006 fNode.setResult(1);\r
1007 }\r
1008 fViewer.refresh(fNode);\r
1009 }\r
1010 });\r
1011 \r
1012 label = new Label(this, SWT.NONE);\r
1013 label.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
1014 label.setText(Messages.FilterViewer_TypeLabel);\r
1015 \r
1016 Composite typeGroup = new Composite(this, SWT.NONE);\r
1017 GridLayout tggl = new GridLayout(3, false);\r
1018 tggl.marginHeight = 0;\r
1019 tggl.marginWidth = 0;\r
1020 typeGroup.setLayout(tggl);\r
1021 typeGroup.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
1022 \r
1023 fNumButton = new Button(typeGroup, SWT.RADIO);\r
1024 fNumButton.setSelection(fNode.getType() == Type.NUM);\r
1025 fNumButton.setText(Messages.FilterViewer_NumButtonText);\r
1026 fNumButton.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
1027 fNumButton.addSelectionListener(new SelectionAdapter() {\r
1028 @Override\r
1029 public void widgetSelected(SelectionEvent e) {\r
1030 if (fNumButton.getSelection()) {\r
1031 fNode.setType(Type.NUM);\r
1032 }\r
1033 fViewer.refresh(fNode);\r
1034 }\r
1035 });\r
1036 \r
1037 fAlphaButton = new Button(typeGroup, SWT.RADIO);\r
1038 fAlphaButton.setSelection(fNode.getType() == Type.ALPHA);\r
1039 fAlphaButton.setText(Messages.FilterViewer_AlphaButtonText);\r
1040 fAlphaButton.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
1041 fAlphaButton.addSelectionListener(new SelectionAdapter() {\r
1042 @Override\r
1043 public void widgetSelected(SelectionEvent e) {\r
1044 if (fAlphaButton.getSelection()) {\r
1045 fNode.setType(Type.ALPHA);\r
1046 }\r
1047 fViewer.refresh(fNode);\r
1048 }\r
1049 });\r
1050 \r
1051 fTimestampButton = new Button(typeGroup, SWT.RADIO);\r
1052 fTimestampButton.setSelection(fNode.getType() == Type.TIMESTAMP);\r
1053 fTimestampButton.setText(Messages.FilterViewer_TimestampButtonText);\r
1054 fTimestampButton.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
1055 fTimestampButton.addSelectionListener(new SelectionAdapter() {\r
1056 @Override\r
1057 public void widgetSelected(SelectionEvent e) {\r
1058 if (fTimestampButton.getSelection()) {\r
1059 fNode.setType(Type.TIMESTAMP);\r
1060 }\r
1061 fViewer.refresh(fNode);\r
1062 }\r
1063 });\r
1064 \r
1065 label = new Label(this, SWT.NONE);\r
1066 label.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
1067 label.setText(Messages.FilterViewer_ValueLabel);\r
1068 \r
1069 fValueText = new Text(this, SWT.BORDER);\r
1070 fValueText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));\r
1071 if (node.getValue() != null && node.getValue().length() > 0) {\r
1072 fValueText.setText(node.getValue());\r
1073 } else {\r
1074 fValueText.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_GRAY));\r
1075 fValueText.setText(Messages.FilterViewer_ValueHint);\r
1076 }\r
1077 fValueText.addFocusListener(new FocusListener() {\r
1078 @Override\r
90e2b925 1079 public void focusLost(FocusEvent e) {\r
4bf17f4a 1080 if (fNode.getValue() == null || fNode.getValue().length() == 0) {\r
1081 fValueText.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_GRAY));\r
1082 fValueText.setText(Messages.FilterViewer_ValueHint);\r
1083 }\r
1084 }\r
1085 @Override\r
90e2b925 1086 public void focusGained(FocusEvent e) {\r
4bf17f4a 1087 if (fValueText.getForeground().equals(Display.getCurrent().getSystemColor(SWT.COLOR_GRAY))) {\r
1088 fValueText.setText(""); //$NON-NLS-1$\r
1089 }\r
1090 fValueText.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_BLACK));\r
1091 }\r
1092 });\r
1093 fValueText.addModifyListener(new ModifyListener() {\r
1094 @Override\r
90e2b925 1095 public void modifyText(ModifyEvent e) {\r
4bf17f4a 1096 if (! fValueText.getForeground().equals(Display.getCurrent().getSystemColor(SWT.COLOR_GRAY))) {\r
1097 fNode.setValue(fValueText.getText());\r
1098 fViewer.refresh(fNode);\r
1099 }\r
1100 }\r
1101 });\r
1102 }\r
1103 }\r
90e2b925
FC
1104\r
1105}\r
This page took 0.104915 seconds and 5 git commands to generate.