2

通常、エディターでは、次のようなコンテキストメニュー(org.eclipse.ui.menus拡張機能で宣言されている)を提供できます。

MenuManager menuManager = new MenuManager();
Control menuParent = ... ;//some Control in the editor
Menu contextMenu = menuManager.createContextMenu(menuParent);
menuParent.setMenu(contextMenu);
getEditorSite().registerContextMenu(CONTEXT_MENU_ID, menuManager, getMySelectionProvider(), false);

同様のことをダイアログで行いたいと思います。

どうやら、今日はグーグルのスキルが不足しているようです。DZoneで同じことを尋ねる人が1人しか見つからないためです。

ダイアログのコントロールに拡張ポイントを介してメニューを提供することも可能ですか?

4

3 に答える 3

8

IMenuServiceワークベンチウィンドウの使用:

IMenuService mSvc = (IMenuService) window.getService(IMenuService.class);
MenuManager mgr = new MenuManager();
mSvc.populateContributionManager(mgr, "popup:my.dialog.menu");
control.setMenu(mgr.createContextMenu(control));
于 2012-04-27T07:36:37.617 に答える
0

これが私がしたことViewPartです。で動作するかどうかはわかりませんDialog

protected void createContextMenu() {
    MenuManager menuMgr = new MenuManager("#PopupMenu");
    menuMgr.setRemoveAllWhenShown(true);
    menuMgr.addMenuListener(new IMenuListener() {
        public void menuAboutToShow(IMenuManager m) {
            WorkAssignmentView.this.fillContextMenu(m);
        }
    });
    Menu menu = menuMgr.createContextMenu(activeViewer.getControl());
    activeViewer.getControl().setMenu(menu);
    getSite().registerContextMenu(menuMgr, activeViewer);
}

ここで、は私のクラスWorkAssignmentViewの名前であり、はです。ViewPartactiveViewerTableViewer

を行うことができればcontrol.getControl().setMenu(menu);、これをモデルとして使用できるはずです。

コンテキストメニューを埋めるメソッドは次のとおりです。

protected void fillContextMenu(IMenuManager menuMgr) {

    WorkAssignmentViewRow[] row = this.getSelectedAssignments();

    menuMgr.add(addAction);

        if (status.equals(WorkAssignmentViewRow.ACTIVE)) {
            menuMgr.add(new Separator());
            menuMgr.add(modifyAction);
            menuMgr.add(changeAction);
            menuMgr.add(new Separator());
            menuMgr.add(deleteAction);
            menuMgr.add(new Separator());
            menuMgr.add(whoIsModifyingAction);
            menuMgr.add(new Separator());
            menuMgr.add(displayAction);
            menuMgr.add(displayFullAction);
            menuMgr.add(new Separator());
            menuMgr.add(updateAction);
            menuMgr.add(commitAction);
            menuMgr.add(new Separator());
            menuMgr.add(developmentMoveAction);
            menuMgr.add(new Separator());
            menuMgr.add(testMoveAction);
            menuMgr.add(new Separator());
            menuMgr.add(productionMoveAction);
            menuMgr.add(displayProductionAction);
            menuMgr.add(new Separator());
        } else if (status.equals(WorkAssignmentViewRow.INACTIVE)){
            menuMgr.add(new Separator());
            menuMgr.add(changeAction);
            menuMgr.add(new Separator());
            menuMgr.add(deleteAction);
            menuMgr.add(new Separator());
            menuMgr.add(displayAction);
            menuMgr.add(displayFullAction);
            menuMgr.add(new Separator());
        } else {
            menuMgr.add(new Separator());
            menuMgr.add(displayAction);
            menuMgr.add(displayFullAction);
            menuMgr.add(new Separator());
        }

    menuMgr.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
}
于 2012-04-26T18:48:00.227 に答える
0

[設定]ダイアログのカスタムテーブルコントロールにコンテキストメニュー(ビューでも使用)を表示することができました。

私のViewPartには、次のメソッドがあります。

public static MyView getView() {
    MyView myView = (MyView) 
    Activator.getDefault().getWorkbench().getActiveWorkbenchWindow().
    getActivePage().findView(MyView.ID);

    return myView;
}

私のRCPアプリケーションでは、ビューは常に表示されるため、メソッドがnullを返すことはありません。

次に、ダイアログで開く私の設定ページのctorで:

    m_viewPart = MyView.getView();

また、設定ページでコントロールを作成するときに、コンテキストメニューをViewPartに登録します。

    Control control = new ...
    MenuManager menuManager = new MenuManager();
    Menu menu = menuManager.createContextMenu(control);
    control.setMenu(menu);
    viewPart.getSite().registerContextMenu("si.test.myCtxMenu", 
                                           menuManager, 
                                           selectionProvider);

ダイアログ内のコンポーネントのコンテキストメニューをViewPartに登録するのは最善の方法ではないかもしれませんが、それは単純で機能します。

于 2014-02-25T12:11:06.213 に答える