Bonjour,
Je suis confronté à une difficulté et les nombreuses pistes que j'ai emprunté me semblent être des cul-de-sac.
Dans une application RCP, une vue contient plusieurs actions dans la barre d'outils de la vue (des org.eclipse.ui.viewActions). Ces actions sont initialisées lorsqu'on les exécute (en cliquant sur le bouton correspondant). Je souhaiterais pouvoir initialiser ces actions à la création de la vue. Cela me permettrait d'activer ou de désactiver l'action en fonction d'un paramètre de mon application.
J'ai testé plusieurs choses :
- D'abord, dans le fichier MANIFEST, la commande Bundle-ActivationPolicy: lazy, permet de spécifier (include:="package1","package2" ou exclude:="package1","package2") des packages qui utiliseront ou pas le mode d'activation lazy.
- Dans le plugin.xml, je peux rajouter :
Monaction implémente alors la méthode earlyStartup() de l'interface IStartup ce qui permet d'exécuter du code dès le lancement de l'application. Mais à ce moment là je ne peux pas initialiser l'action comme je veux, puisque rien n'est encore instancié.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 <extension point="org.eclipse.ui.startup"> <startup class="monpackage.Monaction"/> </extension>
- Dans la déclaration de l'action dans le plugin.xml, je peux ajouter un élément enablement qui justement permet de définir l'état de l'action (enable, disable) avant son initialisation :
Cet élément enablement peut contenir des éléments objectClass, objectState, pluginState et systemProperty (voir org.eclipse.ui.viewActions). Aucun de ces sous éléments ne me permet de définir ma condition.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 <action [...]> <enablement> <objectState name="" value=""> </objectState> </enablement> </action>
- Enfin, l'action peut utiliser plusieurs méthodes d'initialisation (init(IViewPart part) et init(IAction action)). Mais il ne semble pas que init(IViewPart part) permette d'initialiser l'action en meme temps que la vue contenant l'action.
Aucun de ces essais ne m'a permis d'activer ou de désactiver l'action selon mon critère avant d'avoir lancer une première fois l'action en cliquant dessus (puisque c'est à ce moment là que l'action est initialisée). Une de ces méthodes permet-elle cela ? Ou il y a-t-il tout autre chose que je n'ai pas trouvé ?
Merci d'avance pour vos futures contributions,
Sly
Partager