Создание контекстного меню только для определенного элемента, выбранного в Tree Viewer - PullRequest
0 голосов
/ 03 января 2012

У меня есть TreeViewer, и я создал контекстное меню с некоторыми действиями.

С этим фрагментом кода ниже, я получаю контекстное меню для всех элементов дерева.

protected void createMasterPart(final IManagedForm managedForm, final Composite parent)
{
 Tree t = toolkit.createTree(client, SWT.NULL);
 GridData gd = new GridData(GridData.FILL_BOTH);
 gd.heightHint = 20;
 gd.widthHint = 100;
 t.setLayoutData(gd);
 toolkit.paintBordersFor(client);
 section.setClient(client);
 final SectionPart spart = new SectionPart(section);
 managedForm.addPart(spart);
 viewer = new TreeViewer(t);
 viewer.addSelectionChangedListener(new ISelectionChangedListener() 
 {
 public void selectionChanged(SelectionChangedEvent event) 
 {
    managedForm.fireSelectionChanged(spart, event.getSelection());
 }
 });
 viewer.setContentProvider(new MasterTreeContentProvider());
 viewer.setInput(page.getEditor().getEditorInput());

 m_newKeyAction = new AddNewKeyAction(viewer, parent.getShell());

 m_newValueAction = new AddNewValueAction(viewer, parent.getShell());

 hookContextMenu();
} 
private void hookContextMenu()
{
   MenuManager menuMgr = new MenuManager();
   menuMgr.setRemoveAllWhenShown(true);
   menuMgr.addMenuListener(new IMenuListener() {
   public void menuAboutToShow(IMenuManager manager) 
   {
   fillContextMenu(manager);
   }
   });
   Menu menu = menuMgr.createContextMenu(viewer.getControl());
   viewer.getControl().setMenu(menu);
}

protected void fillContextMenu( IMenuManager manager )
{   
    manager.add( m_newKeyAction );
    manager.add( m_newValueAction );
}

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

...