4



私は Eclipse 3.6 プラグインを開発しており、TreeViewer. ここからアイテムをTreeViewer選択すると、そのプロパティが標準のプロパティ ビューに表示されます。現在、プロパティはデフォルトでアルファベット順に並べられています。 これらのプロパティを別
の順序で並べたいと思います。

他の誰かもこの問題を抱えているようです:
http://www.eclipse.org/forums/index.php/m/393029/

デフォルトで生成されたエディターの「プロパティー」ビューのプロパティーは、アルファベット順にソートされています。順番を変えて並べる方法を教えてください。

推奨される解決策は次のとおりです。

エディターは getAdapter(Class) メソッドから PropertySheetPage を提供する必要があります。プロパティ シートが提供されない場合、プロパティ シートは既定の PropertySheetPage を使用し、標準のコレーターを使用して並べ替え順序を生成します。getAdapter() メソッドは、代わりにソーターを設定する PropertySheetPage の特殊なサブクラスを提供する必要があります。

したがって、 PropertySheetPageをサブクラス化し、メソッドをオーバーライドする必要setSorterがあり、すべてがうまくいくはずです。

次の 2 つの疑問が生じます。

  1. ドキュメントに次のように書かれているのはなぜですか:

    このクラスはインスタンス化できます。サブクラス化することは意図されていません。

  2. 標準プロパティ ビューと のサブクラスの間のリンクはどこで作成しますPropertySheetPageか?
    私の場合はエディターを使用していませんがTreeViewer、アイテムが選択されたときにプロパティを提供するだけです。

    どんなサポートでも大歓迎です!
4

1 に答える 1

3

私は同じことに遭遇し、解決策を見つけました。

私がしたことは、私が貢献していたプロパティ ページの ID (基本的には 3 桁の数字) に並べ替え順序のプレフィックスを追加し、ID の最初の 3 桁を取得して基本的な並べ替えを行うContributionComparatorを作成することです。

コードは次のようになります。

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

次に、WorkbenchAdvisorgetComparitorForメソッドをオーバーライドして、contributionType がプロパティの場合に作成した ContributionComparator をインスタンス化します。

@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 に答える