在TreeViewer上如何最好地使用ViewerFilter? [英] How best to use ViewerFilter on a TreeViewer?

查看:234
本文介绍了在TreeViewer上如何最好地使用ViewerFilter?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在将一个 ViewerFilter 应用到几个分支的树中,但大多数是叶子。过滤器真的适用于叶子,使用叶子内的属性。所有分支都保持不变,以便他们的叶可以出现。

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.

然而,我想过滤掉没有选定叶子的分支,我可以看到 ViewerFilter 允许这个。

However I would like to filter out branches that contain no selected leaves, and I can see no mechanism within ViewerFilter that allows this.

这是可能吗?

例如,给定下面的名义树(其中 b 是一个分支,一个 L 是一个叶子) / p>

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

我想申请一个 ViewerFilter 只能选择甚至包含叶子的叶子和树枝。结果树将是..

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

..哪里分支 b2 不显示,因为它不包含所选的孩子,而是分支 b0 b1 do。

.. where branch b2 does not display as it contains no selected children, but branches b0 and b1 do.

推荐答案

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;
    }
  }
}

这篇关于在TreeViewer上如何最好地使用ViewerFilter?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆