Cambiar elementos de menú mediante programación desde el complemento Eclipse
-
05-07-2019 - |
Pregunta
Me gustaría poder eliminar completamente los elementos del menú al iniciar la aplicación del complemento Eclipse. Lo que quiero hacer es poder agregar estos elementos de menú más tarde, según la lógica empresarial basada en las acciones del usuario. ¿Hay alguna forma de hacer esto? He observado el uso de contribuciones, pero creo que no va a ser exactamente lo que quiero.
Si puede hacer lo que necesito que haga, ¿cómo hago para usarlos? Gracias de antemano por cualquier ayuda.
Solución
Puede obtener el Menú desde el MenuManager y luego modificar las contribuciones. Este fragmento muestra cómo acceder al administrador de menú y eliminar un elemento con nombre.
Deberá realizar un seguimiento de los elementos eliminados y los índices de elementos para restaurarlos. El único problema es que el método indexOf no es visible. Agregar este fragmento a un tipo en el mismo paquete que MenuManager y agregarlo a un fragmento es una forma de hacerlo.
IWorkbenchWindow window = Workbench.getInstance().getActiveWorkbenchWindow()
if(window instanceof WorkbenchWindow) {
MenuManager menuManager = ((WorkbenchWindow)window).getMenuManager();
//TODO you may need to remove items from the coolbar as well
ICoolBarManager coolBarManager = null;
if(((WorkbenchWindow) window).getCoolBarVisible()) {
coolBarManager = ((WorkbenchWindow)window).getCoolBarManager2();
}
Menu menu = menuManager.getMenu();
//you'll need to find the id for the item
String itemId = "menuId";
IContributionItem item = menuManager.find(itemId);
// remember position, TODO this is protected
int controlIdx = menu.indexOf(mySaveAction.getId());
if (item != null) {
// clean old one
menuManager.remove(item);
// refresh menu gui
menuManager.update();
}
}
Otros consejos
Hay varias formas de controlar la visibilidad de los elementos del menú o de la barra de herramientas en una aplicación RCP.
Si tiene el control sobre el complemento que aporta los elementos en cuestión, la forma más sencilla es usar la expresión visibleWhen
asociada con los menús
punto de extensión. Si tiene algún estado interno que quiera verificar, puede usar el elemento test
de la expresión junto con un propertyTester
.
Una alternativa es usar actividades. Estos pueden controlar muchas otras cosas de su aplicación, aunque podría necesitar volver a implementar algunos de los diálogos incorporados. Consulte esta entrada de blog " Uso de actividades para la gestión de usuarios " para algunos detalles.