Как программно вызвать пункт контекстного меню для выбранного элемента представления Part? - PullRequest
0 голосов
/ 17 октября 2019

Я пытаюсь проверить действия контекстного меню для выбранного элемента (ITreeSelection) в части представления. Эта часть представления на самом деле является средством просмотра дерева.

Мне нужно программно открыть контекстное меню для выбранного элемента, а затем вызвать элемент из контекстного меню.

В моем коде я зарегистрировалслушатель меню с видом (древовидный).

protected void createContextMenu(TreeViewer viewer) {
    MenuManager contextMenu = new MenuManager("#ContextMenu"); 
    contextMenu.setRemoveAllWhenShown(true);
    contextMenu.addMenuListener(new IMenuListener() {
        @Override
        public void menuAboutToShow(IMenuManager mgr) {

            mgr.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
            ITreeSelection selection = (ITreeSelection)viewer.getSelection();
            Object element = selection.getFirstElement();
            if(element instanceof IProject )
            {
                mgr.add(new Action("New Course") {

                    @Override
                    public void run() {
                    IHandlerService handlerService = (IHandlerService) getSite().getService(IHandlerService.class);
                          handlerService.executeCommand("command.newCourse", null);
                            ITreeSelection selection = (ITreeSelection) treeViewer.getSelection();
                            }
                });

            }

        Menu menu = contextMenu.createContextMenu(viewer.getControl());
    viewer.getControl().setMenu(menu);
    }

//Method of the TreeViewer
@Override
public void createPartControl(Composite parent) {
    treeViewer = new TreeViewer(parent);
    treeViewer.setContentProvider(new ContentProvider());
    treeViewer.setLabelProvider(new LabelProvider());
    treeViewer.setInput(initializeExplorer());
    getSite().setSelectionProvider(treeViewer);
    createContextMenu(treeViewer);  

}

Что я могу сделать с пользовательским интерфейсом прямо сейчас.

enter image description here

Iхочу программно вызвать это действие «Новый курс», когда выбранный элемент «Project1» типа IProject.

1) Как получить контекстное меню для данного выбранного элемента, т.е. Project1.

2) Как вызвать действие «Новый курс».

3) Или мне нужно смоделировать щелчок правой кнопкой мыши по выбранному элементу. (ITreeSelection)

...