mercredi, novembre 25, 2009

Introduction à la construction de Commandes avec la plateforme Eclipse

Un support de cours concernant la construction de commandes est disponible sur le site de Developpez.com. Il fait partie de la série des supports de cours liée au Workbench et il fait suite au support de cours relatif aux vues.

Les aspects suivants sont étudiés :
  • Avant les commandes il y avait les actions
  • Construction par déclaration et programmation des commandes
  • Elément menuContribution par déclaration
  • Raccourcis clavier
  • Restrictions (visibleWhen, enabledWhen et activeWhen)
  • Paramétrer les commandes
  • Restrictions par programmation
  • Réutilisation (Plugin Spy et activation des traces)
Le lien du support de cours et les exemples peuvent être trouvés ici.

18 commentaires:

  1. Héhé voila un cours qui fait plaisir et qui va aider toute la communauté.

    Je ne l'ai pas encore lu mais si il est d'aussi bonne facture que les précédents c'est réellement nickel. Encore merci pour tout ce que tu fais :)

    Penses à mettre à jour la partie sur la gauche du site ("supports en cours de préparation").

    Sinon que réserve l'avenir ? Tu penses te lancer dans les éditors ou les forms ? Ou peut être te reposer un peu ?

    Une fois de plus 1000 merci pour ton travail !

    RépondreSupprimer
  2. Repos, c'est quoi ça ;-)

    Le prochain sera les editors. Je suis en train de récupérer toutes les ressources qui en parlent. Ensuite je ferai le support sur les forms (pratiquement terminé, il manque juste une partie concernant l'éditor). Enfin, je cloturerai cette série par la partie RCP.

    J'ai hate de terminer pour débuter sur EMF.

    RépondreSupprimer
  3. Et moi donc, il me tarde réellement de voir ces deux cours :-). On peut espérer voir l'un d'entre eux avant noel ?

    Pour EMF ca peut faire une bonne transition vers eclipse 4 ...

    Que du bonheur en perspective ^^

    RépondreSupprimer
  4. Malheureusement je ne pense pas qu'ils arrivent avant les fêtes. Tu peux voir le support sur les commandes comme mon cadeau de noël ;-)

    RépondreSupprimer
  5. Je ne sais pas si on peut poser des questions techniques sur ton blog mais dans le doute je me lance :

    Tu conseilles de ne pas utiliser les actions. Mon problème est que je n'arrive pas à rajouter de manière programmatique une commande dans la barre d'action d'une vue.
    Quand on fait getViewSite().getActionsBar() on ne peut rajouter qu'une action ou une IContributionItem. Or j'aimerais rajouter une commande. Je suppose qu'il y a un moyen mais mes recherches ne mènes à rien :(.

    Une idée ?

    Merci pour tout ;)

    RépondreSupprimer
  6. Ok autant pour moi j'avais pas pensé aux CommandContributionItem. C'est quand même une grosse galère les commandes en mode programatique :/.

    RépondreSupprimer
  7. Salut Martial,

    Très bonne question. Tu peux poster ce genre de question technique.

    Regarde dans mes exemples du côté de l'ajout dynamique de commande (restriction visibleWhen). Je crois qu'il y a des choses sur la classe CommandContributionItem qui doit implémenter IContributionItem (il faut dire que cette interface a de nombreuses implémentations)

    Mickael

    RépondreSupprimer
  8. Désolé j'avais pas vu ta réponse.

    RépondreSupprimer
  9. Ok super. Donc j'ai une petite dernière question et après promis je me débrouille avec la doc :).

    J'essaye de gérer toujours de manière programmatique les commandes et les icônes associées. Quand je récupère le CommandImageService avec la ligne suivante "CommandImageService cis = (CommandImageService) PlatformUI.getWorkbench().getService(ICommandImageService.class);" j'ai plein de warning me disant :

    - Discouraged access: The type CommandImageService is not accessible due to restriction on required library /usr/lib/eclipse/plugins/org.eclipse.ui.workbench_3.5.1.M20090826-0800a.jar

    Je suppose à la vue de ces warnings que je n'utilise pas la bonne méthode. Qu'est ce que tu en penses ?

    Autre question (que je n'avais pas encore osé poser car la réponse doit être simpliste ^^), dans tes cours tu utilises la vue property et notament la classe IPropertySource. Quand j'essaye de l'importer eclipse ne la trouve pas. Il faut télécharger un paquet spécial ?

    Merci beaucoup !

    Martial

    RépondreSupprimer
  10. Salut Martial,

    Pour les messages Discouraged access c'est normal puisqu'il s'agit d'une implémentation interne et ne doit normalement pas être utilisée. Ces implémentations peuvent changées au fil des versions. Alors que les API passent par la case Deprecated avant changement.

    Mais bon, parfois il faut passer outre les recommandations pour espérer faire quelque chose de correct.

    Essaye d'ajouter dans les dépendances le bundle org.eclipse.ui. ça devrait résoudre ton problème de IPropertySource que tu ne trouves pas.

    Mickael

    RépondreSupprimer
  11. Bonjour,

    Deux questions me trottent dans la tête :
    - Peut on (et si oui comment) avoir du multimédia (vidéo, son, radio ...) dans une application eclipse RCP. SWT et JFace ont l'air très pauvres de ce coté la je me trompe ?
    - Ayant finis une grosse partie de mon application j'aimerais que d'autres personnes la teste et je voudrais donc l'exporter. J'ai utiliser la méthode décrite dans l'introduction aux plugin mais j'obtiens juste un jar que je n'arrive pas à exécuter. Je souhaiterais avoir un répertoire avec dedans un lanceur, les binaires icones ... Tu as une idée de comment faire ?

    Merci beaucoup

    Martial

    RépondreSupprimer
  12. Pour la première question : en fait il n'y a aucun soucis. Il suffit juste d'intégrer un composant Browser qui sera un conteneur Web. Par conséquent, pose toi la question de comment avoir du multimédia dans une page Web -> Flash, ActiveX, ...

    Pour la seconde solution il faut passer par un product. Regarde du côté des tutoriels de Lars Vogel.

    Mickael

    RépondreSupprimer
  13. Pour la seconde question, j'ai bien trouvé ma réponse sur vogella.de. En revanche, je trouve très bizarre de passer par un conteneur web pour regarder une vidéo que j'ai en local :O. Enfin je vais essayer d'approfondir.

    Merci pour tes réponses.

    RépondreSupprimer
  14. Le souci en général avec le multimédia en Java c'est l'absence d'API. J'ai bien une autre solution qui me vient à l'esprit c'est d'utiliser JavaFX dans Eclipse. Les démos que j'ai vu trainer montrer les possibilités de lire des vidéos.

    Par ailleurs, le pont entre SWT et AWT/Swing est possible.

    Il faut juste chercher comment faire du JavaFX dans du Eclipse

    RépondreSupprimer
  15. Bonjour,

    J'ai une petite question à propos des commandes. On ne peut pas définir deux handlers pour une seule commande ?
    Je voudrais créer une commande "Copier" (et plus tard Supprimer, Coller, Couper ...) est des handlers qui feraient les opérations souhaitées en fonction de la vue active.

    J'ai bien lu la partie sur les paramètres mais ça ne semble pas convenir. Il faudrait que je puisse passer en paramètre l'id de la vue active.

    De plus si je crée deux handlers, la commande est automatiquement désactivée :'(

    Merci

    Martial

    ps : tu connaitrais de bons articles traitant de la persistance en eclipse RCP ?

    RépondreSupprimer
  16. Un handler qui fait des choses particulière en fonction de la valeur d'un paramètre, ça fonctionne très bien.

    La vue active, tu peux la récupérer à partir du handler directement. Tu peux accéder au contenu d'une variable.

    Pour la persistence en Eclipse RCP, les frameworks classiques utilisés dans le monde Java fonctionnent très bien. Du Hibernate à XStream ...

    Mickael

    RépondreSupprimer
  17. En fait je pige pas bien le principe. Tous ces frameworks sont fournis sous forme de jar. Or il faut transformer ces jars en plugins pour pouvoir les utiliser dans une application RCP ce que j'essaye de faire. Mais dès que je lance l'application, je mange des ClassNotFoundException. Tu vois à coté de quoi je passe ?

    Merci

    Martial

    RépondreSupprimer
  18. Il faut intégrer les Jar dans le plugin. Dans mon support de cours sur l'introduction à la conception de plug-ins j'en parle. Regarde à partir du transparent 53.

    Mickael

    RépondreSupprimer