Commit | Line | Data |
---|---|---|
40b7b614 GP |
1 | /******************************************************************************* |
2 | * Copyright (c) 2014 Inria | |
3 | * | |
4 | * All rights reserved. This program and the accompanying materials are | |
5 | * made available under the terms of the Eclipse Public License v1.0 which | |
6 | * accompanies this distribution, and is available at | |
7 | * http://www.eclipse.org/legal/epl-v10.html | |
8 | * | |
9 | * Contributors: | |
10 | * Generoso Pagano, Inria - Initial API and implementation | |
11 | *******************************************************************************/ | |
12 | ||
2bdf0193 | 13 | package org.eclipse.tracecompass.tmf.ui.widgets.timegraph.dialogs; |
40b7b614 GP |
14 | |
15 | import org.eclipse.jface.viewers.AbstractTreeViewer; | |
16 | import org.eclipse.jface.viewers.ITreeContentProvider; | |
17 | import org.eclipse.jface.viewers.Viewer; | |
18 | import org.eclipse.ui.dialogs.PatternFilter; | |
19 | ||
20 | /** | |
21 | * A filter extending the <code>org.eclipse.ui.dialogs.PatternFilter<code>. | |
22 | * | |
23 | * It redefines the {@link #isElementVisible(Viewer, Object)}} method in order | |
24 | * to have a match on a node if: the node matches or one of the children matches | |
25 | * or one of the parents matches. | |
26 | * | |
27 | * @author "Generoso Pagano <generoso.pagano@inria.fr>" | |
40b7b614 GP |
28 | */ |
29 | public class TreePatternFilter extends PatternFilter { | |
30 | ||
31 | @Override | |
32 | public boolean isElementVisible(Viewer viewer, Object element) { | |
33 | return super.isElementVisible(viewer, element) || isChildMatch(viewer, element); | |
34 | } | |
35 | ||
36 | /** | |
37 | * Check if at least one of the parents of this element is a match with the | |
38 | * filter text. | |
39 | * | |
40 | * @param viewer | |
41 | * the viewer that contains the element | |
42 | * @param element | |
43 | * the tree element to check | |
44 | * @return true if the given element has a parent that matches the filter | |
45 | * text | |
46 | */ | |
47 | private boolean isChildMatch(Viewer viewer, Object element) { | |
48 | Object parent = ((ITreeContentProvider) ((AbstractTreeViewer) viewer).getContentProvider()) | |
49 | .getParent(element); | |
50 | while (parent != null) { | |
51 | if (isLeafMatch(viewer, parent)) { | |
52 | return true; | |
53 | } | |
54 | parent = ((ITreeContentProvider) ((AbstractTreeViewer) viewer).getContentProvider()) | |
55 | .getParent(parent); | |
56 | } | |
57 | return false; | |
58 | } | |
59 | ||
60 | } |