How best to use ViewerFilter on a TreeViewer?
eclipse-plugin, jface, swt, treeviewer
Solution
class MyFilter extends ViewerFilter{
private boolean isLeaf(Object element){
// implement this
}
private boolean isEvenLeaf(Object leaf){
// implement this
}
@Override
public boolean select(Viewer viewer, Object parentElement, Object element){
if (isLeaf(element))
return isEventLeaf(element);
else {
StructuredViewer sviewer = (StructuredViewer) viewer;
ITreeContentProvider provider = (ITreeContentProvider) sviewer.getContentProvider();
for (Object child: provider.getChildren(element)){
if (select(viewer, element, child))
return true;
}
return false;
}
}
}
Problem
I am applying a `ViewerFilter` to a tree of a few branches, but mostly leaves. The filter really applies to the leaves, using properties within the leaf. All branches are left untouched so that their leaves can appear. However I would like to filter out branches that contain no selected leaves, and I can see no mechanism within `ViewerFilter` that allows this. Is this possible at all? For example, given the notional tree below (where `b` is a branch, a `L` is a leaf) ``` b0 b1 L2 L4 L8 b2 L1 L3 L5 ``` I would like to apply a `ViewerFilter` that only selects even leaves and branches that contain even leaves. The resulting tree would be .. ``` b0 b1 L2 L4 L8 ``` .. where branch `b2` does not display as it contains no selected children, but branches `b0` and `b1` do.