Modifier les éléments de menu par programme à partir du plug-in Eclipse
-
05-07-2019 - |
Question
Je souhaite pouvoir supprimer complètement les éléments de menu au démarrage de mon application de plug-in eclipse. Ce que je veux faire, c'est pouvoir ajouter ces éléments de menu ultérieurement en fonction de la logique métier en fonction des actions de l'utilisateur. Y a-t-il un moyen de faire cela? J'ai envisagé d'utiliser des contributions, mais je sens que cela ne sera pas exactement ce que je veux.
S'il peut faire ce dont j'ai besoin, comment puis-je les utiliser? Merci d’avance pour toute aide.
La solution
Vous pouvez obtenir le menu à partir du MenuManager, puis modifier les contributions. Cet extrait montre comment accéder au gestionnaire de menus et supprimer un élément nommé.
Vous devrez garder une trace des éléments supprimés et des index d’éléments pour les restaurer. Le seul problème est que la méthode indexOf n'est pas visible. Ajouter cet extrait à un type du même package que MenuManager et à un fragment est un moyen de contourner cela.
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();
}
}
Autres conseils
Il existe plusieurs façons de contrôler la visibilité des éléments de menu ou de barre d'outils dans une application RCP.
Si vous avez le contrôle sur le plug-in qui fournit le ou les éléments en question, le moyen le plus simple consiste à utiliser l'expression visibleWhen
associée aux menus point d'extension. Si vous souhaitez vérifier un état interne, vous pouvez utiliser l'élément
test
de l'expression avec un propertyTester
.
Une alternative consiste à utiliser des activités. Ceux-ci peuvent contrôler de nombreux autres éléments de votre application, mais vous devrez peut-être réimplémenter certaines des boîtes de dialogue intégrées. Voir cette entrée de blog " Utilisation des activités pour la gestion des utilisateurs " pour certains détails.