4



我正在开发一个 Eclipse 3.6 插件,并且有一个包含TreeViewer. 当从中TreeViewer选择一个项目时,其属性将出现在标准属性视图中。目前,这些属性默认按字母顺序排列。
我想以不同的方式订购这些属性。

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

默认生成的编辑器的属性视图中的属性按字母顺序排序。我想问如何修改和排列它们以不同的顺序。

建议的解决方案是:

您的编辑器需要通过 getAdapter(Class) 方法提供 PropertySheetPage。如果它不提供一个,则属性表将使用默认的 PropertySheetPage,它使用标准整理器来生成排序顺序。您的 getAdapter() 方法需要提供一个专门的 PropertySheetPage 子类来设置您的排序器。

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

出现两个问题:

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

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

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

    任何支持表示赞赏!
4

1 回答 1

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 (如果 contributionType 是一个属性):

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

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

    return cc;
}

现在属性页按我想要的顺序显示。

于 2013-08-08T16:22:06.650 回答