0

すべてのビューに動的なポップアップ メニューを提供する必要があります。動的なポップアップ メニュー コントリビューションを作成できますが、URI を設定して特定のビューに登録する必要があります。ユーザーが別のビューを選択したときに、メニューを動的に登録しようとしています。

public class GlobalSelectionListener implements ISelectionListener {
    HashSet<IWorkbenchPart> extended = new HashSet<IWorkbenchPart>();

    @Override
    public void selectionChanged(IWorkbenchPart part, ISelection selection) {
        if (!extended.contains(part)) {
            IWorkbenchPartSite wps = part.getSite();
            if (wps == null)
                return;
            //creates popup menu for this part
            MenuManager mgr = new MenuManager();
            mgr.add(new DynamicMenu()); //DynamicMenu extends ContributionItem
            wps.registerContextMenu("identifier." + mgr.hashCode(), mgr, wps.getSelectionProvider());
            extended.add(part);
            System.out.println(part + " menu extended");
        }
    }
}

しかし、これはうまくいきません。ポップアップ メニューに 1 つのメニュー項目が表示されません。この方法でそれが可能かどうかはわかりません。任意のビューのポップアップ メニューを動的に追加する方法はありますか? registerContextMenu()メソッドが何か他のことをしているようです。

4

1 に答える 1

0

問題は解決されませんでしたが、回避策があります。plugin.xml必要なすべてのビューとエディターのポップアップ メニューをファイルに登録することができます。通常、プラグインのユースケースの数は限られています。プラグインを作成している場合は、そのプラグインが何のために必要かを知っています。Spy プラグイン(ALT+SHIFT+F1) を使用して、アクティブなメニュー コントリビューション ID を表示し、必要なすべてのビューとエディターのポップアップ メニューにコントリビューションを登録します。

于 2012-07-09T07:57:54.143 に答える