Контекстное меню для TreeViewer на основе выбранного узла - SWT

Мне нужно создать контекстное меню для TreeViewer в проекте плагина Eclipse. Но в меню не должно быть постоянных пунктов, они должны различаться в зависимости от типа выбранного узла. Например, мой treeViewer имеет следующую иерархию:

Node A
 |
 --Node B
  |
   --Node C

Для узла A - я хочу показать меню с действием, но для узлов B и C я не хочу ничего показывать (нет меню).

Мне нужно создать контекстное меню для TreeViewer в проекте плагина Eclipse. Но в меню не должно быть постоянных пунктов, они должны различаться в зависимости от типа выбранного узла. Например, мой treeViewer имеет следующую иерархию:

Node A
 |
 --Node B
  |
   --Node C

Для узла A - я хочу показать меню с действием, но для узлов B и C я не хочу ничего показывать (нет меню).

Мне нужно создать контекстное меню для TreeViewer в проекте плагина Eclipse. Но в меню не должно быть постоянных пунктов, они должны различаться в зависимости от типа выбранного узла. Например, мой treeViewer имеет следующую иерархию:

Node A
 |
 --Node B
  |
   --Node C

Для узла A - я хочу показать меню с действием, но для узлов B и C я не хочу ничего показывать (нет меню). Мне удалось создать меню для узла A, но потом я не могу избавиться от него, когда выбран какой-либо другой тип узла. Мой код выглядит так:

treeViewer.addSelectionChangedListener(
            new ISelectionChangedListener(){
                public void selectionChanged(SelectionChangedEvent event) {
                    if(event.getSelection() instanceof IStructuredSelection) {
                        IStructuredSelection selection = (IStructuredSelection)event.getSelection();            
                        Object o = selection.getFirstElement();     

                        MenuManager menuMgr = new MenuManager();

                        if (o instanceof NodeA){

                            Menu menu = menuMgr.createContextMenu(treeViewer.getControl());
                            treeViewer.getControl().setMenu(menu);
                            getSite().registerContextMenu(menuMgr, treeViewer);

                            menuMgr.add(new SomeAction());

                        }else {
                            //what ?
                        }
                    }

                }
            }   
    );

В ветке else я пытался вызвать dispose () , removeAll () в MenuManager ... ничего не работает!

Любая помощь - это оценен, спасибо.

9
задан AndaP 1 June 2011 в 21:12
поделиться