3

私のアプリケーションには5つのプラグインがあります。各プラグインには独自のパースペクティブがあるため、各パースペクティブ拡張定義は個々のプラグインのplugin.xmlの下にあります。

ここで、これらのパースペクティブがアプリケーションに表示される順序を制御したいと思います。どうやってするの?

「ApplicationWorkBenchAdvisor.java」を保持するメインプラグインが1つあります。これにはinitialize()メソッドがあり、このメソッドを使用してパースペクティブレジストリを反復処理しています

PlatformUI.getWorkbench().getPerspectiveRegistry().getPerspectives();

次に、このように後で使用される文字列変数(pbar)にコンマ区切りでパースペクティブIDを追加します。

PlatformUI.getPreferenceStore().setDefault(IWorkbenchPreferenceConstants.PERSPECTIVE_BAR_EXTRAS, pbar);
PlatformUI.getPreferenceStore().setValue(IWorkbenchPreferenceConstants.PERSPECTIVE_BAR_EXTRAS, pbar);

パースペクティブレジストリを反復処理するとき、パースペクティブIDを比較し、(IDを比較して「pbar」に追加するときに)表示したい方法で並べ替えることができますが、ここではこの順序付けを行いたくありません。汚い方法。

パースペクティブが表示される順序を修正できる場所は他にありますか?(各パースペクティブは異なるプラグインにあります)。

追加した

1)パースペクティブスイッチャーで順序を制御することもできますか?

2)パースペクティブレジストリへのエントリを制御して、目的の順序を適用する方法はありますか。そうでない場合は、パースペクティブレジストリに書き戻すことができますか?

4

2 に答える 2

8

アプリケーションが日食製品としてカプセル化されている場合は、plugin.properties/plugin_customization.iniファイルを微調整できます。(製品拡張ポイントの' 'プロパティ
によって参照されるファイル。) このファイルは、java.io.Properties形式のファイルです。通常、このファイルは、プラグインのパブリックAPIの一部として公開されるプリファレンスの値を設定するために使用されます。 (そのようなファイルの例)preferenceCustomization

org.eclipse.platform

したがって、パースペクティブの順序を表す文字列をプロパティとして参照できる場合は、そこでデフォルトの順序を定義できます。言及
のソースコード以来:IWorkbenchPreferenceConstants

 /**
  * Lists the extra perspectives to show in the perspective bar.
  * The value is a comma-separated list of perspective ids.
  * The default is the empty string.
  *
  * @since 3.2
  */
 public static final String JavaDoc PERSPECTIVE_BAR_EXTRAS = "PERSPECTIVE_BAR_EXTRAS"; //$NON-NLS-1$

たぶんplugin_customization.iniファイルの行:

org.eclipse.ui/PERSPECTIVE_BAR_EXTRAS=perspectiveId1,perspectiveId2,perspectiveId3

ハードコーディングせずにその順序を指定できます。

その他の注意事項:

IPerspectiveRegistry(またはPerspectiveRegistry)は何も記述しません(特に拡張機能で定義されたパースペクティブの場合)

順序付けは、ワークベンチの状態で確認できます(ワークスペースに保存され、再度起動すると復元されます.metadata/.plugins/org.eclipse.ui.workbench/workbench.xml) 。

次のことを確認しますか?

IPerspectiveRegistry registry = PlatformUI.getWorkbench().getPerspectiveRegistry();
IPerspectiveDescriptor[] perspectives = registry.getPerspectives();

plugin_customization.iniがその順序を正しく定義している場合、正しい順序ではありませんか?

Liverpool 5-0 Aston Villaは、(コメントで)確認しますが、(順序付けられた)iniファイルエントリが内部で設定ストアに記録されることも示します。つまり、設定ストアAPIを介して取得できます。

PatformUI.getPreferenceStore().getDefault( 
    IWorkbenchPreferenceConstants.PERSPECTIVE_BAR_EXTRAS)

リバプール5-0アストンヴィラ次に追加:

パースペクティブレジストリ(最初の " PlatformUI.getWorkbench().getPerspectiveRegistry().getPerspectives();"ビット)は変更されません(そして順序付けられません)。
ただし、プリファレンスストアを介して「順序付けられたパースペクティブのリストに簡単にアクセス」することはできます。 したがって、他のタスクでは、パースペクティブレジストリ(まだ順序付けされていない)を反復処理する代わりに、順序付けられたパースペクティブIDのリストを格納する順序付けされた変数を使用できます。





注:別の可能性は、RCPアプリのパースペクティブスイッチャーを置き換えることです

代替テキスト =>から:代替テキスト

メニューまたはボタンで順序をより簡単に定義できます。


極端な解決策:パースペクティブスイッチャーを再実装します

http://www.richclient2.de/wp-content/uploads/2006/08/persp_header.png

于 2009-04-02T06:43:06.223 に答える
5

すべての観察と調査結果を要約すると、

1) パースペクティブ レジストリのエントリを変更することはできません。読み取り専用です。

2) パースペクティブ バーに必要な順序でパースペクティブを表示するには、以下に示すように、plugin_customization.ini (または Preferences.ini) にエントリを追加することで実現できます。

org.eclipse.ui/PERSPECTIVE_BAR_EXTRAS=perspectiveId1,perspectiveId2,perspectiveId3

3) この順序付きリストを取得したい場合、直接取得することはできません。ただし、この ini ファイルのエントリは内部的に PreferenceStore に記録されるため、以下に示すように、次の API を使用して PreferenceStore から同じ値を取得できます。

PlatformUI.getPreferenceStore().getDefault( 
    IWorkbenchPreferenceConstants.PERSPECTIVE_BAR_EXTRAS);

なぜ誰かが ini ファイルで定義されたエントリにアクセスする必要があるのでしょうか?

私の場合、すべてのパースペクティブへのリンクを表示する必要があるビューがありました。パースペクティブ バーが目的の順序で並べ替えられたので、パースペクティブへのリンクを表示している間もビューで同じ順序を維持したいと考えました。

4)デフォルトのパースペクティブ スイッチャーの表示で同じ並べ替え順序を適用する既知の方法はありません。新しいカスタム パースペクティブ スイッチャーを記述して、目的の効果を実現できます。

于 2009-04-08T06:47:40.257 に答える