analysis: Move plugins to their own sub-directory
[deliverable/tracecompass.git] / org.eclipse.tracecompass.tmf.ui / src / org / eclipse / tracecompass / tmf / ui / widgets / timegraph / dialogs / TreePatternFilter.java
CommitLineData
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 13package org.eclipse.tracecompass.tmf.ui.widgets.timegraph.dialogs;
40b7b614
GP
14
15import org.eclipse.jface.viewers.AbstractTreeViewer;
16import org.eclipse.jface.viewers.ITreeContentProvider;
17import org.eclipse.jface.viewers.Viewer;
18import 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 */
29public 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}
This page took 0.049463 seconds and 5 git commands to generate.