Eclipse PDE - 如何在Standard Propeties视图中对Properties进行排序

时间:2013-08-08 14:06:23

标签: java eclipse eclipse-plugin eclipse-rcp


我正在开发一个Eclipse 3.6插件,并且有一个包含TreeViewer的视图。 选择此TreeViewer中的项目后,其属性将显示在标准“属性”视图中。默认情况下,属性按字母顺序排序。
我想以不同的方式订购这些属性

似乎其他人也有这个问题:
http://www.eclipse.org/forums/index.php/m/393029/

  

默认生成的编辑器的“属性”视图中的属性   按字母顺序排序。我想问一下如何修改   并以不同的顺序安排他们。

建议的解决方案是:

  

您的编辑需要提供PropertySheetPage   getAdapter(Class)方法。如果它没有提供一个属性表   将使用默认的PropertySheetPage,它使用标准   collat​​or生成排序顺序。你的getAdapter()方法需要   提供PropertySheetPage的专门子类,为您设置   而是分拣机。

所以我需要继承PropertySheetPage,覆盖setSorter方法,一切都应该没问题。

出现两个问题:

  1. 为什么在文档中写道:
      

    这个类可以实例化;它不打算被子类化。

  2. 我在哪里建立标准属性视图和PropertySheetPage的子类之间的链接?
    在我的情况下,我没有使用编辑器,但只有一个TreeViewer,当选择一个项目时,它会提供属性。

    感谢任何支持!

1 个答案:

答案 0 :(得分:3)

我遇到了同样的事情并找到了解决方案。

我所做的是在我所贡献的属性页面的id中添加一个排序序列前缀(基本上是一个3位数字)并创建一个ContributionComparator,它取得了id的前3位数并执行了基本操作排序

代码看起来像这样:

@Override
public int compare(IComparableContribution c1,
        IComparableContribution c2) {

    int result = super.compare(c1, c2);

    IPluginContribution pc1 = (IPluginContribution)c1;
    IPluginContribution pc2 = (IPluginContribution)c2;

    String id1 = pc1.getLocalId().substring(0,3);
    String id2 = pc2.getLocalId().substring(0,3);

    result = id1.compareTo(id2);

    return result;
}

然后,在我的WorkbenchAdvisor中,我覆盖getComparitorFor方法以实例化我创建的ContributionComparator,如果contribType是属性:

@Override
public ContributionComparator getComparatorFor(String contributionType) {
    ContributionComparator cc;

    if (contributionType.equals(IContributionService.TYPE_PROPERTY)) {
        cc = new MyContributionComparator();
    } else {
        cc = super.getComparatorFor(contributionType);
    }

    return cc;
}

现在,属性页按我希望的顺序显示。