Necesito crear un menú contextual para un TreeViewer en un proyecto de plugin de Eclipse. Sin embargo, el menú no debe contener elementos constantes, sino que deben variar según el tipo de nodo que se seleccione. Por ejemplo, mi treeViewer tiene la siguiente jerarquía:Menú contextual para TreeViewer basado en el nodo seleccionado - SWT
Node A
|
--Node B
|
--Node C
para el nodo A - Quiero mostrar un menú con una acción, pero para los nodos B y C no quiero demostrar nada (sin menú). Logré crear el menú para el nodo A, pero luego no puedo deshacerme de él cuando se selecciona otro tipo de nodo. Mi código es el siguiente:
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 ?
}
}
}
}
);
En la rama más que trataron de llamar dispose()
, removeAll()
en el MenuManager ... nada funciona!
Se agradece cualquier ayuda, gracias.
gracias por las sugerencias, ahora estoy creando el menú una vez y luego, en caso de una selección, llamo action.setEnabled (false). Esto funciona bien, pero no encontré un método setVisible para Action. Me gustaría ocultarlo cuando se selecciona otro nodo en lugar de volverlo gris. Gracias – AndaP
Si agrega 'ActionContributionItems' que contienen sus acciones, tienen un método' setVisible (boolean) '. Pero debe elegir 'setRemoveAllWhenShown (*)' o actualizar la visibilidad de 'ActionContributionItems' ya que son enfoques diferentes. –