Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Eclipse : développement de commandes

Eclipse : développement de commandes

Ce support de cours s'intéresse à détailler la construction de commandes avec la plateforme Eclipse. Il fait partie de la série des supports de cours liée au Workbench. Les aspects suivants sont étudiés : les actions, construction par déclaration et programmation de commandes et de handlers, éléments menuContribution par déclaration, raccourcis clavier, restrictions (visibleWhen, enabledWhen, activeWhen), paramétrer les commandes, restrictions par programmation et réutilisation (plug-in Spy et traces).

Mickael BARON

December 21, 2012
Tweet

More Decks by Mickael BARON

Other Decks in Programming

Transcript

  1. Développement de clients
    riches : Plateforme Eclipse
    Mickaël BARON - 2009
    mailto:[email protected] ou mailto:[email protected]
    mickael-baron.fr
    mickaelbaron
    Chapitre 3 : Conception de plug-ins
    Workbench : Commands

    View full-size slide

  2. 2
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Creative Commons
    Contrat Paternité
    Partage des Conditions Initiales à l'Identique
    2.0 France
    http://creativecommons.org/licenses/by-sa/2.0/fr
    Licence

    View full-size slide

  3. 3
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    †3
    À propos de l’auteur …
    † Mickaël BARON
    † Ingénieur de Recherche au LIAS
    † https://www.lias-lab.fr
    † Equipe : Ingénierie des Données et des Modèles
    † Responsable des plateformes logicielles, « coach » technique
    † Ancien responsable Java de Developpez.com (2011-2021)
    † Communauté Francophone dédiée au développement informatique
    † https://java.developpez.com
    † 4 millions de visiteurs uniques et 12 millions de pages vues par mois
    † 750 00 membres, 2000 forums et jusqu'à 5000 messages par jour
    mickael-baron.fr
    mickaelbaron

    View full-size slide

  4. 4
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    † Avant, il y avait les Actions …
    † Construction par déclaration et programmation
    † Eléments menuContribution par déclaration
    † Raccourcis clavier
    † Restrictions (visibleWhen, enabledWhen, activeWhen)
    † Paramétrer les commandes
    † Restrictions par programmation
    † Réutilisation
    Organisation du cours sur le Workbench : Commands
    Tous les exemples du cours
    sont disponibles directement à l’adresse
    mickael-baron.fr/eclipse/commands

    View full-size slide

  5. 5
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Déroulement du cours
    Ceci est une alerte
    Ceci est une astuce
    † Pédagogie du cours
    † Illustration avec de nombreux exemples qui sont disponibles à
    l’adresse mickael-baron.fr/eclipse/commands
    † Des bulles d’aide tout au long du cours
    † Logiciels utilisés
    † Eclipse 3.4.2 Ganymede
    † Pré-requis
    † Connaître la structure d’un plug-ins et savoir créer une extension
    † Structure du Workbench

    View full-size slide

  6. 6
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Ressources …
    † Des billets sur les généralités sur les commandes
    † blog.eclipse-tips.com/2009/01/commands-part-1-actions-vs-commands.html
    † blog.eclipse-tips.com/2009/01/commands-part-2-selection-and.html
    † blog.eclipse-tips.com/2008/12/commands-part-3-parameters-for-commands.html
    † blog.eclipse-tips.com/2009/01/commands-part-4-misc-items.html
    † blog.eclipse-tips.com/2009/02/commands-part-5-authentication-in-rcp.html
    † blog.eclipse-tips.com/2009/03/commands-part-6-toggle-radio-menu.html
    † blog.eclipse-tips.com/2009/05/commands-part-7-adding-standard.html
    † blog.eclipse-tips.com/2009/02/customizing-about-dialog.html
    † blog.eclipse-tips.com/2009/10/associating-command-with-job.html
    † blog.eclipse-tips.com/2009/06/keyboard-accessibility-thru-command.html
    † bugs.eclipse.org/bugs/show_bug.cgi?id=223445
    † hermanlintvelt.blogspot.com/2009/06/eclipse-rcp-commands-api-review-of-part.html
    † hermanlintvelt.blogspot.com/2009/05/eclipse-rcp-commands-api-part-one.html
    † hermanlintvelt.blogspot.com/2009/06/eclipse-rcp-commands-part-3-visiblewhen.html
    † konigsberg.blogspot.com/2008/06/screencast-using-property-testers-in.html
    † www.vogella.de/blog/?p=421
    † richclientplatform.blogspot.com/2007/07/new-menu-contribution-extension.html
    † www.vimeo.com/1217595?pg=embed&sec=1217595

    View full-size slide

  7. 7
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Ressources … (suite)
    † Des articles sur les généralités sur les commandes
    † wiki.eclipse.org/Platform_Command_Framework
    † wiki.eclipse.org/Menu_Contributions
    † wiki.eclipse.org/Menus_Extension_Mapping
    † wiki.eclipse.org/Command_Core_Expressions
    † www.eclipsecon.org/2008/?page=sub/&id=221
    † www.vogella.de/articles/RichClientPlatform/article.html#commands
    † www.vogella.de/articles/EclipseCommands/article.html
    † www.vogella.de/articles/EclipsePlugIn/ar01s04.html
    † www.ibm.com/developerworks/library/os-eclipse-3.3menu/index.html
    † svn2.assembla.com/svn/eclipsecommands/trunk/EclipseCommands/contents/article.html
    † Des livres
    † Eclipse – Building Commercial-Quality Plug-ins, 2004 - ISBN : 0-321-22847-2
    † Eclipse – Rich Client Platform, 2005 – ISBN : 0-321-33461-2
    † Eclipse Plug-ins, 3rd Edition, 2008 – ISBN : 0-321-55346-2

    View full-size slide

  8. 8
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    † Dans les parties Perspective, View et Editor nous avons
    abordé le concept d’actions permettant d’ajouter de nou-
    veaux éléments pour
    † un menu
    † une barre d’outils
    † un menu contextuel
    † Workbench fournit deux APIs pour ajouter des éléments
    † Actions (celle utilisée dans les précédents transparents)
    † Command (apparue depuis Eclipse 3.3)
    † L’API Actions est plus ancienne et doit être remplacée par
    l’API Commands
    Introduction

    View full-size slide

  9. 9
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Introduction
    † Les points d’extension concernant l’API Actions sont
    toujours utilisables
    † Du côté des vues, des éditeurs et des perspectives il existe
    toujours cette relation avec les actions
    † Pour vos prochains développements, préférer l’utilisation de
    la nouvelle API Commands
    † Dans la suite nous présentons rapidement l’API Actions en
    insistant sur ces désavantages puis nous nous orienterons
    vers l’API Commands

    View full-size slide

  10. 10
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Ancienne API Actions
    † Depuis le début de ce support de cours, nous avons abordé
    rapidement la notion d’Actions via l’interface IAction
    † La description de cette interface met en avant l’absence de
    flexibilité qui a conduit à définir la nouvelle API Command
    † Les aspects liés à la présentation (setText, setEnabled, …)
    sont fortement couplés avec le traitement de l’action (run)
    † Par conséquent il est difficile de fournir plusieurs textes,
    images, … raccourcis clavier pour une même action
    public interface IAction {
    void setText(String text);
    void setImageDescriptor(ImageDescriptor image);
    void setAccelerator(int keycode);
    void setEnabled(boolean enabled);
    void run();
    // ... more setters and getters
    }
    Caractéristiques liées
    à la présentation de
    l’action
    Caractéristique liée au
    traitement de l’action

    View full-size slide

  11. 11
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Ancienne API Actions
    † La plateforme Eclipse fournit différents points d’extension
    permettant d’ajouter des actions à différents éléments du
    Workbench
    † org.eclipse.ui.actionSets : ajouter des actions au menu et à la barre
    d’outils d’une application Eclipse
    † org.eclipse.ui.editorActions : ajouter des actions au menu et à la
    barre d’outils d’une application Eclipse pour un type d’éditeur donné
    † org.eclipse.ui.actionSetPartAssociations : permet d’associer une
    action à un ensemble de Parts (View et Editor)
    † org.eclipse.ui.viewActions : ajouter des actions au menu et à la
    barre d’outils d’une vue
    † org.eclipse.ui.popupMenus : ajouter des actions à un menu
    contextuel
    † Nous montrons dans la suite un exemple exploitant le point
    d’extension org.eclipse.ui.actionSets

    View full-size slide

  12. 12
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Ancienne API Actions
    † Exemple : ajouter une action au menu et à la barre d’outils
    d’une application Eclipse avec l’API Actions
    Ajout d’une action au menu
    Ajout d’une action à la barre d’outils
    Projet ActionsExamples

    View full-size slide

  13. 13
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Ancienne API Actions
    † Exemple (suite) : ajouter une action au menu et à la barre
    d’outils d’une application Eclipse avec l’API Actions
    Création d’extension à
    partir du point
    d’extension
    org.eclipse.ui.actionSets
    Template pour créer
    rapidement cette
    extension

    View full-size slide

  14. 14
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Ancienne API Actions
    † Exemple (suite) : ajouter une action au menu et à la barre
    d’outils d’une application Eclipse avec l’API Actions
    Création d’un élément actionSet
    Onglet Extensions
    plugin.xml du projet
    ActionsExamples

    View full-size slide

  15. 15
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Ancienne API Actions
    † Exemple (suite) : ajouter une action au menu et à la barre
    d’outils d’une application Eclipse avec l’API Actions
    Création d’un élément menu
    Onglet Extensions
    plugin.xml du projet
    ActionsExamples
    Texte affiché dans le
    menu de l’application
    Possibilité d’ajouter le nouveau
    menu à un menu existant

    View full-size slide

  16. 16
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Ancienne API Actions
    † Exemple (suite) : ajouter une action au menu et à la barre
    d’outils d’une application Eclipse avec l’API Actions
    Création d’un élément action
    Onglet Extensions
    plugin.xml du projet
    ActionsExamples

    View full-size slide

  17. 17
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Ancienne API Actions
    † Exemple (suite) : ajouter une action au menu et à la barre
    d’outils d’une application Eclipse avec l’API Actions
    Classe de type
    IWorkbenchWindowActionDelegage
    codant le traitement de l’action
    Précise où doit être affiché l’action
    dans la barre de menu
    Précise où doit être affiché l’action
    dans la barre d’outils

    View full-size slide

  18. 18
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    API Commands
    † La nouvelle API Commands permet de construire une
    Command, désignée commande dans la suite de ce cours
    † Le principal avantage d’une commande est la séparation
    stricte de l’IHM du comportement
    † Pour utiliser une commande, vous avez besoin
    † Donner une description déclarative de la commande
    † Définir le comportement via un Handler (activation, traitement, …)
    † Préciser à quel endroit de l’IHM la commande s’applique (menu,
    barre d’outils de l’application ou d’une vue, …)
    † Si vous commencez de nouveaux développements préférez
    l’utilisation de cette nouvelle API Commands

    View full-size slide

  19. 19
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Construction par déclaration
    † Une commande est déclarée par l’intermédiaire du point
    d’extension org.eclipse.ui.commands
    Point d’extension
    org.eclipse.ui.commands
    Un template « Hello,
    World » pour définir
    une commande

    View full-size slide

  20. 20
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Construction par déclaration
    Onglet Extensions
    plugin.xml du projet
    CommandsExamples
    † Définition des attributs d’une commande
    Un handler par défaut peut être
    défini, dans la suite on
    montrera qu’il est possible
    d’extraire cette relation

    View full-size slide

  21. 21
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Construction par déclaration
    package eclipse.workbench.commandsexamples.handler;
    public class FirstHandler extends AbstractHandler {
    @Override
    public Object execute(ExecutionEvent event) throws ExecutionException {
    MessageDialog.openInformation(Display.getDefault().getActiveShell(),
    "CommandsExamples Plug-in","Hello, Eclipse world with First Handler");
    return "";
    }
    }
    † Le comportement de la commande doit être défini par un
    objet de type IHandler
    † La classe AbstractHandler fournit une implémentation des
    différentes méthodes
    † Object execute(ExecutionEvent event) : traitement réalisé quand la
    commande est déclenchée
    Classe FirstHandler.java du
    projet CommandsExamples

    View full-size slide

  22. 22
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Associer une commande à un Handler
    † Le point d’extension org.eclipse.ui.handlers permet de
    définir explicitement un Handler à une commande
    † L’Handler n’est donc plus défini au niveau de la commande
    † L’intérêt est de pouvoir spécifier des contraintes différentes
    pour une même classe de comportement (objet IHandler)
    † Différentes contraintes
    † activeWhen : comportement actif ou pas
    † enabledWhen : comportement activé ou pas
    Contraintes seront
    étudiées à la fin
    de cette partie

    View full-size slide

  23. 23
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Associer une commande à un Handler
    † L’association commande / handler est déclarée par le point
    d’extension org.eclipse.ui.handlers
    Point d’extension
    org.eclipse.ui.handlers

    View full-size slide

  24. 24
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Associer une commande à un Handler
    Onglet Extensions
    plugin.xml du projet
    CommandsExamples
    † Définition du couple commande / handler
    Identifiant de la commande
    Classe de type IHandler
    correspondant au traitement de
    la commande

    View full-size slide

  25. 25
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Associer une commande à des images
    † Dans le même ordre d’idée, il est possible de découpler
    dans la définition de la commande les différentes images
    utilisées
    † Le point d’extension org.eclipse.ui.commandImages permet
    de définir pour une commande les images à afficher
    † l’image par défaut
    † l’image utilisée lorsque la commande est désactivée
    † l’image utilisée lorsque le curseur de la souris est au dessus de la
    représentation graphique de la commande
    † style : dans quel contexte ces images sont utilisées : barre de menu
    ou barre d’outils. Si aucune valeur, cela concerne la barre de menu,
    si toolbar cela concerne la barre d’outils

    View full-size slide

  26. 26
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Associer une commande à des images
    † L’association commande / image est déclarée par le point
    d’extension org.eclipse.ui.commandImages
    Point d’extension
    org.eclipse.ui.commandImages

    View full-size slide

  27. 27
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Associer une commande à des images
    † Définition du couple commande / images
    Onglet Extensions
    plugin.xml du projet
    CommandsExamples
    Identifiant de la commande
    Si aucune valeur, cela concerne la
    barre de menu, si la valeur vaut
    toolbar cela concerne la barre d’outils
    Les différentes
    images utilisées

    View full-size slide

  28. 28
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Construction par programmation
    † Précédemment nous avons montré comment créer déclara-
    tivement des commandes et des comportements (Handler)
    † La construction de commandes et de handlers de manière
    programmatique est obtenue via l’utilisation des interfaces
    † ICommandService : pour créer des commandes
    † IHandlerService : pour créer des handlers
    † L’accès aux instances des deux interfaces IHandlerService et
    ICommandService est obtenu via le Workbench
    † La destruction des commandes et handler sont à la charge
    du programmeur
    ICommandService cs = (ICommandService)PlatformUI.getWorkbench().getService(ICommandService.class);
    IHandlerService hs = (IHandlerService)PlatformUI.getWorkbench().getService(IHandlerService.class);

    View full-size slide

  29. 29
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Construction par programmation
    † L’interface ICommandService fournit les principaux services
    † Category getCategory(String catId) : récupère la catégorie catId, si
    non existante, elle est créée
    † Command getCommand(String comId) : récupère la commande
    comId, si non existante, elle est créée
    † Category[] getDefinedCategories() : récupère la liste complète des
    catégories du Workbench
    † void addExecutionListener(IExecutionListener iel) : ajoute un
    écouteur lors de l’exécution de la commande
    † La classe Command décrit une commande
    † void define(String name, String description, Category cat) : précise le
    nom de la commande, la description et la catégorie à laquelle la
    commande appartient (cat ne peut être null)

    View full-size slide

  30. 30
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Construction par programmation
    † Exemple : construire une commande
    public class ViewCommandPart extends ViewPart {
    public void createPartControl(Composite parent) {
    ICommandService cs = (ICommandService)PlatformUI.getWorkbench().getService(ICommandService.class);
    Category category = cs.getCategory("eclipse.workbench.commandsexample.commandscategory");
    Command thirdCommand = cs.getCommand("eclipse.workbench.commandsexample.thirdcommand");
    thirdCommand.define("Third Command", "", category);
    // Suite concernant la construction du Handler
    }
    Classe ViewCommandPart.java du
    projet CommandsExamples
    Construction de la commande
    thirdcommand
    Association de la
    commande à la catégorie
    Récupération du service de
    création de commandes Construction de la catégorie

    View full-size slide

  31. 31
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Construction par programmation
    † L’interface IHandlerService fournit les principales méthodes
    suivantes
    † IHandlerActivation activateHandler(String commandId, IHandler
    handler) : associe une commande à un handler
    † Object executeCommand(String commandId, Event event) throws
    ExecutionException … : exécute un handler à partir de l’identifiant de
    la commande
    † Pour rappel, la classe IHandler a été étudiée précédemment,
    la classe AbstractHandler fournit une abstraction des
    principales méthodes

    View full-size slide

  32. 32
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Construction par programmation
    † Exemple (suite) : exécuter une commande
    public class ViewCommandPart extends ViewPart {
    public void createPartControl(Composite parent) {
    // Suite du précédent transparent
    IHandlerService hs = (IHandlerService) PlatformUI.getWorkbench().getService(IHandlerService.class);
    IHandler handler = new AbstractHandler() {
    public Object execute(ExecutionEvent event) throws ExecutionException {
    MessageDialog.openInformation(Display.getDefault().getActiveShell(),
    "CommandsExamples Plug-in", "Hello, Eclipse world with Third Handler");
    return null;
    }
    };
    hs.activateHandler("eclipse.workbench.commandsexample.thirdcommand", handler);
    Button callCommand = new Button(parent, SWT.PUSH);
    callCommand.addSelectionListener(new SelectionAdapter() {
    public void widgetSelected(SelectionEvent e) {
    try {
    IHandlerService hs = (IHandlerService)PlatformUI.getWorkbench()
    .getService(IHandlerService.class);
    hs.executeCommand("eclipse.workbench.commandsexample.thirdcommand", null);
    } catch (Exception e1) {
    e1.printStackTrace();
    }
    }
    });
    callCommand.setText("Call Third Command");
    }
    }
    Classe ViewCommandPart.java du
    projet CommandsExamples
    Récupération du service de
    handler
    Associer une commande avec un
    handler
    Exécuter un handler à partir de
    l’identifiant d’une commande

    View full-size slide

  33. 33
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Construction par programmation
    † Le Workbench fournit des écouteurs permettant de notifier
    le client lors de l’exécution d’une ou plusieurs commandes
    † ICommandService#addExecutionListener(IExecutionListener el) :
    ajout d’un écouteur sur l’ensemble des exécutions de commandes
    † Command#addExecutionListener(IExecutionListener el) : ajout d’un
    écouteur sur une exécution de commande
    † IExecutionListener fournit les services suivants
    † void postExecuteFailure(String comId, ExecutionException ex) :
    déclenchée si l’exécution d’une commande a échoué
    † void postExecuteSucess(String comId, Object returnValue) :
    déclenchée si l’exécution d’une commande a réussi
    † void preExecute(String comId, ExecutionEvent event) : déclenchée
    pour avertir qu’une commande va être exécutée

    View full-size slide

  34. 34
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Construction par programmation
    † Exemple : écouter l’exécution d’une commande
    public class ViewCommandPart extends ViewPart {
    public void createPartControl(Composite parent) {
    // Suite du précédent transparent
    ICommandService cs = (ICommandService) PlatformUI.getWorkbench().getService(ICommandService.class);
    cs.addExecutionListener(new IExecutionListener() {
    public void postExecuteSuccess(String commandId, Object returnValue) {
    System.out.println(".postExecuteSuccess() : " + commandId);
    }
    public void preExecute(String commandId, ExecutionEvent event) {
    System.out.println(".preExecute()");
    }
    public void postExecuteFailure(String commandId, ExecutionException exception) {
    System.out.println(".postExecuteFailure()");
    }
    ...
    });
    thirdCommand.addExecutionListener(new IExecutionListener() {
    public void notHandled(String commandId, NotHandledException exception) {
    System.out.println(".notHandled()");
    }
    public void postExecuteSuccess(String commandId, Object returnValue) {
    System.out.println(".postExecuteSuccess()");
    }
    public void preExecute(String commandId, ExecutionEvent event) {
    System.out.println(".preExecute()");
    }
    ...
    });
    }
    }
    Classe ViewCommandPart.java du
    projet CommandsExamples
    Ecouteur sur la totalité
    des exécutions de
    commande
    Ecouteur sur l’exécution
    d’une commande

    View full-size slide

  35. 35
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Commande dans le Workbench
    † Pour l’instant nous savons construire une commande et un
    handler de manière déclarative et programmatique
    † Nous montrons dans la suite comment ajouter une com-
    mande à l’interface graphique du Workbench
    † Pour rappel les éléments graphiques qui peuvent être
    étendus sont les suivants
    † Menu général de l’application
    † Barre d’outil de l’application
    † Barre d’outil, menu localisé et menu contextuel d’une vue donnée

    View full-size slide

  36. 36
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Commande dans le Workbench
    † L’ajout d’une commande au Workbench est obtenu par le
    point d’extension org.eclipse.ui.menus
    Point d’extension
    org.eclipse.ui.menus

    View full-size slide

  37. 37
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Commande dans le Workbench
    † Création d’un élément de type menuContribution permettant
    de préciser où sera placée la commande dans le Workbench
    (locationURI)
    Ajout d’un élément
    menuContribution

    View full-size slide

  38. 38
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Commande dans le Workbench
    † Modification de la valeur de l’attribut locationURI
    Dans la suite nous donnons des
    explications sur la construction
    de l’attribut locationURI
    L’attribut locationURI permet
    d’indiquer où sera placée la
    commande

    View full-size slide

  39. 39
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Commande dans le Workbench
    † La valeur de l’attribut locationURI est de la forme suivante
    † scheme : le type d’élément graphique à étendre. Les valeurs
    autorisées sont : menu, toolbar et popup
    † id : identifiant du menu, barre d’outil, menu contextuel ou vue
    † placement : les contraintes de placement de la commande par
    rapport aux autres éléments du scheme.
    Deux contraintes sont autorisées : before= et after=
    Où id peut être un séparateur, un identifiant de menu, un élément
    d’un menu, ou la valeur additions (signifie placer en dernier)
    † Exemple
    [scheme]:[id]?[placement]
    menu:file?before=quit
    Ajoute un élément avant l’élément Quit
    situé dans le menu File

    View full-size slide

  40. 40
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Commande dans le Workbench
    † La plateforme fournit des identifiants sur les éléments
    standards
    † org.eclipse.ui.main.menu : identifiant de la barre de menu d’une
    application Eclipse
    † org.eclipse.ui.main.toolbar : identifiant de la barre d’outils d’une
    application Eclipse
    † org.eclipse.ui.popup.any : identifiant de tous les menus contextuels
    † Exemples
    † menu:org.eclipse.ui.main.menu : ajout un élément au menu de
    l’application Eclipse
    † toolbar:viewcommandId : ajout un élément à la barre d’outil de la
    vue identifiée par viewcommandId

    View full-size slide

  41. 41
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Commande dans le menu
    † Pour ajouter une commande à un menu la valeur du scheme
    de l’attribut locationURI doit être à menu
    † A partir d’un élément menuContribution, plusieurs types
    d’éléments peuvent être ajoutés à un menu existant
    † Une commande (élément command)
    † Un sous menu (élément menu)
    † Un séparateur (élément separator)
    † Un sous menu dynamique (élément dynamic)
    † Dans la suite des transparents nous présentons la mise en
    œuvre de certains de ces éléments

    View full-size slide

  42. 42
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Commande dans le menu
    † Exemple : ajoute une commande au menu principal d’une
    application Eclipse Une commande est ajoutée directement à la
    barre de menu de l’application Eclipse
    Lors de l’utilisation de la
    commande une boîte de
    dialogue est affichée

    View full-size slide

  43. 43
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Commande dans le menu
    † Exemple (suite) : ajoute une commande au menu principal
    d’une application Eclipse
    plugin.xml du projet
    CommandsExamples
    Ajout d’une commande au
    niveau du menu principal de
    l’application Eclipse

    View full-size slide

  44. 44
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Commande dans le menu
    † Exemple (suite) : ajoute une commande au menu principal
    d’une application Eclipse
    plugin.xml du projet
    CommandsExamples
    Ajout d’un élément
    command
    Réutilisation d’une commande
    définie précédemment
    L’élément command permet de
    préciser les caractéristiques
    graphiques de la commande
    (texte, image, …)

    View full-size slide

  45. 45
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Commande dans le menu
    † Exemple : ajoute une commande dans un sous menu du
    menu principal d’une application Eclipse
    Un menu a été ajouté à la barre de menu
    principale de l’application Eclipse
    Lors de l’utilisation d’une
    commande du menu
    « Commands Example » une
    boîte de dialogue est affichée

    View full-size slide

  46. 46
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Commande dans le menu
    † Exemple (suite) : ajoute une commande dans un sous menu
    du menu principal d’une application Eclipse
    plugin.xml du projet
    CommandsExamples
    Ajout d’un menu au niveau du menu
    principal de l’application Eclipse

    View full-size slide

  47. 47
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Commande dans le menu
    † Exemple (suite) : ajoute une commande dans un sous menu
    du menu principal d’une application Eclipse
    plugin.xml du projet
    CommandsExamples
    Ajout d’un élément menu
    Ajout de deux éléments
    command à l’élément menu
    Caractéristiques graphiques de l’élément menu

    View full-size slide

  48. 48
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Commande dans le menu
    † Exemple (suite) : ajoute une commande dans un sous menu
    du menu principal d’une application Eclipse
    plugin.xml du projet
    CommandsExamples

    View full-size slide

  49. 49
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Commande dans une barre d’outil
    † Pour ajouter une commande à une barre d’outils la valeur du
    scheme de l’attribut locationURI doit être à toolbar
    † A partir d’un élément menuContribution, plusieurs types
    d’éléments peuvent être ajoutés à une barre d’outils
    † Un séparateur (élément separator)
    † Une barre d’outils dynamique (élément dynamic)
    † Un composant graphique (élément control)
    † Dans la suite des transparents nous présentons la mise en
    œuvre de certains de ces éléments

    View full-size slide

  50. 50
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Commande dans une barre d’outil
    † Exemple : ajouter une commande dans la barre d’outil
    principale d’une application Eclipse Une commande est ajoutée
    directement à la barre d’outils
    principale de l’application
    Eclipse
    Lors de l’utilisation de la
    commande une boîte de
    dialogue est affichée

    View full-size slide

  51. 51
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Commande dans une barre d’outil
    † Exemple (suite) : ajouter une commande dans la barre
    d’outil principale d’une application Eclipse
    plugin.xml du projet
    CommandsExamples
    Ajout d’une commande au niveau
    de la barre d’outils de l’application
    Eclipse

    View full-size slide

  52. 52
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Commande dans une barre d’outil
    † Exemple (suite) : ajouter une commande dans la barre
    d’outil principale d’une application Eclipse
    plugin.xml du projet
    CommandsExamples
    Un élément toolbar est ajouté à l’élément
    menuContribution. Une nouvelle barre d’outils
    est ajoutée à la barre d’outils principale
    Identifiant de la nouvelle barre
    d’outils contenant l’élément
    command. Possibilité d’étendre
    directement cette nouvelle barre
    d’outils

    View full-size slide

  53. 53
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Commande dans une barre d’outil
    † Exemple (suite) : ajouter une commande dans la barre
    d’outil principale d’une application Eclipse
    plugin.xml du projet
    CommandsExamples
    Réutilisation d’une commande
    définie précédemment
    L’élément command permet de
    préciser les caractéristiques
    graphiques de la commande
    (texte, image, …)
    Ajout d’un élément command à
    la nouvelle barre d’outils

    View full-size slide

  54. 54
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Commande dans un menu localisé d’une vue
    † Exemple : ajouter une commande dans le menu localisé
    d’une vue
    Vue …commandsexample.views.viewcommandid
    du projet CommandsExamples
    Menu localisé de la vue
    contenant une commande

    View full-size slide

  55. 55
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Commande dans un menu localisé d’une vue
    † Exemple (suite) : ajouter une commande dans le menu
    localisé d’une vue
    plugin.xml du projet
    CommandsExamples
    Scheme vaut menu et id pointe
    sur l’identifiant de la vue
    La création de l’élément command est
    identique aux précédents transparents

    View full-size slide

  56. 56
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Commande dans une barre d’outils de vue
    † Exemple : ajouter une commande dans la barre d’outils d’une
    vue
    Menu localisé de la vue
    contenant une commande
    Vue …commandsexample.views.viewcommandid
    du projet CommandsExamples

    View full-size slide

  57. 57
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Commande dans une barre d’outils de vue
    † Exemple (suite) : ajouter une commande dans la barre
    d’outils d’une vue
    plugin.xml du projet
    CommandsExamples
    Scheme vaut toolbar et id pointe
    sur l’identifiant de la vue
    La création de l’élément command est
    identique aux précédents transparents

    View full-size slide

  58. 58
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Commande dans un menu contextuel de vue
    † Pour ajouter une commande à un menu contextuel d’une vue
    la valeur du scheme de l’attribut locationURI doit être à
    popup et l’id doit pointer sur l’identifiant de la vue
    † A partir d’un élément menuContribution, plusieurs types
    d’éléments peuvent être ajoutés à un menu contextuel
    † Une commande (élément command)
    † Un sous menu (élément menu)
    † Un séparateur (élément separator)
    † Un sous menu dynamique (élément dynamic)
    † Il s’agit des mêmes éléments que pour l’enrichissement d’une
    barre de menu (générale ou localisée)

    View full-size slide

  59. 59
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Commande dans un menu contextuel de vue
    † Exemple : ajouter une commande dans le menu contextuel
    d’une vue
    Vue …commandsexample.views.popupviewcommandid
    du projet CommandsExamples
    Menu contextuel de la vue
    contenant plusieurs commandes

    View full-size slide

  60. 60
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Commande dans un menu contextuel de vue
    † Exemple (suite) : ajouter une commande dans le menu
    contextuel d’une vue
    public class PopupViewPart extends ViewPart {
    private TableViewer viewer;
    public void createPartControl(Composite parent) {
    parent.setLayout(new GridLayout(1, false));
    GridData myGridData = new GridData(GridData.FILL_BOTH);
    viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
    viewer.setContentProvider(new ViewContentProvider());
    viewer.setLabelProvider(new ViewLabelProvider());
    viewer.setInput(this.getViewSite());
    viewer.getControl().setLayoutData(myGridData);
    this.getSite().setSelectionProvider(viewer);
    createContextMenu();
    }
    ... // Suite dans le prochain transparent
    }
    PopupViewPart.java du projet
    CommandsExamples
    Construction programmatique du
    contenu du menu contextuel

    View full-size slide

  61. 61
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Commande dans un menu contextuel de vue
    † Exemple (suite) : ajouter une commande dans le menu
    contextuel d’une vue
    public class PopupViewPart extends ViewPart {
    // Suite du précédent transparent
    private void createContextMenu() {
    final Action action1 = new Action("Action 1") {
    public void run() { System.out.println("Action 1 Performed"); }
    };
    CommandContributionItemParameter commandParameter = new CommandContributionItemParameter(
    PlatformUI.getWorkbench(), "contributionitem",
    "eclipse.workbench.commandsexample.firstcommand",
    CommandContributionItem.STYLE_PUSH);
    final IContributionItem ref = new CommandContributionItem(commandParameter);
    MenuManager menuMgr = new MenuManager();
    menuMgr.setRemoveAllWhenShown(true);
    menuMgr.addMenuListener(new IMenuListener() {
    public void menuAboutToShow(IMenuManager mgr) {
    mgr.add(action1);
    mgr.add(ref);
    }
    });
    // Create menu.
    Menu menu = menuMgr.createContextMenu(viewer.getControl());
    viewer.getControl().setMenu(menu);
    // Register menu for extension.
    getSite().registerContextMenu(menuMgr, viewer);
    }
    }
    PopupViewPart.java du projet
    CommandsExamples
    Construction d’une action via l’API JFace
    (voir cours Perspectives et Views)
    Construction d’une commande via
    IContributionItem (voir dans les
    prochains transparents)
    Déclare le menu contextuel dans le
    Workbench, obligatoire pour
    l’enrichir via les extensions

    View full-size slide

  62. 62
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Commande dans un menu contextuel de vue
    † Exemple (suite) : ajouter une commande dans le menu
    contextuel d’une vue Scheme vaut popup et id pointe
    sur l’identifiant de la vue
    La création de l’élément command est
    identique aux précédents transparents
    plugin.xml du projet
    CommandsExamples

    View full-size slide

  63. 63
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Commande dans un menu contextuel de vue
    † Exemple (suite) : ajouter une commande dans le menu
    contextuel d’une vue
    public class ShowSelectedHandler extends AbstractHandler {
    @SuppressWarnings("unchecked")
    public Object execute(ExecutionEvent event) throws ExecutionException {
    ISelection selection =
    PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getSelection();
    if (selection != null & selection instanceof IStructuredSelection) {
    IStructuredSelection structuredSelection = (IStructuredSelection) selection;
    for (Iterator iterator = structuredSelection.iterator(); iterator
    .hasNext();) {
    Object element = iterator.next();
    System.out.println(element.toString());
    }
    }
    return null;
    }
    }
    ShowSelectedHandler.java du
    projet CommandsExamples
    Correspond au handler de la commande
    ajoutée au menu contextuel
    Récupération de la sélection courante
    via le service de sélection

    View full-size slide

  64. 64
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Commande dans un menu contextuel de vue
    † Exemple : ajouter une commande dans le menu contextuel
    d’une vue avec une contrainte de positionnement
    Vue …commandsexample.views.popupviewcommandid
    du projet CommandsExamples
    Cette commande doit être placée avant
    First Command identifiée par
    contributionitem (définie
    programmatiquement)

    View full-size slide

  65. 65
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Commande dans un menu contextuel de vue
    † Exemple (suite) : ajouter une commande dans le menu
    contextuel d’une vue avec une contrainte de positionnement
    plugin.xml du projet
    CommandsExamples
    Utilisation de la contrainte de
    placement before=contributionitem
    pour placer avant la commande
    First Command

    View full-size slide

  66. 66
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Commande dans un menu contextuel de vue
    † Exemple : ajouter une commande dans tous les menus
    contextuels des vues
    Une commande est ajoutée
    à tous les menus
    contextuels de vues

    View full-size slide

  67. 67
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Commande dans un menu contextuel de vue
    † Exemple (suite) : ajouter une commande dans tous les
    menus contextuels des vues
    plugin.xml du projet
    CommandsExamples
    Scheme vaut popup et id pointe sur
    l’identifiant org.eclipse.ui.popup.any

    View full-size slide

  68. 68
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Aller plus loin avec menuContribution
    † A partir d’un élément menuContribution, il est également
    possible d’ajouter deux types d’éléments
    † Dynamic
    † Construction dynamique d’éléments d’un menu ou d’une barre d’outils
    † Nécessite le développement par programmation des éléments à
    afficher
    † A utiliser si le nombre d’éléments à afficher dans un menu ou une
    barre d’outils n’est pas connu à l’avance
    † control
    † Création personnalisée de l’élément graphique à afficher (non
    disponible pour les éléments de menus)
    † A utiliser quand il est intéressant d’afficher autre chose qu’un label

    View full-size slide

  69. 69
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Aller plus loin avec menuContribution : dynamic
    † Exemple : ajout dynamique d’éléments dans un menu
    Projet CommandsExamples
    Les deux commandes sont
    ajoutées dans le sous menu
    Dynamic Example

    View full-size slide

  70. 70
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Aller plus loin avec menuContribution : dynamic
    † Exemple (suite) : ajout dynamique d’éléments dans un menu
    plugin.xml du projet
    CommandsExamples
    Classe de type IContributionItem
    Création d’un élément
    dynamic

    View full-size slide

  71. 71
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Aller plus loin avec menuContribution : dynamic
    † Exemple (suite) : ajout dynamique d’éléments dans un menu
    public class ContributionItemExample extends CompoundContributionItem {
    protected IContributionItem[] getContributionItems() {
    IContributionItem[] tab = new IContributionItem[2];
    CommandContributionItemParameter commandParameter = new CommandContributionItemParameter(
    PlatformUI.getWorkbench(), "contributionfirstitem",
    "eclipse.workbench.commandsexample.firstcommand",
    CommandContributionItem.STYLE_PUSH);
    IContributionItem ref = new CommandContributionItem(commandParameter);
    tab[0] = ref;
    commandParameter = new CommandContributionItemParameter(
    PlatformUI.getWorkbench(), "contributionseconditem",
    "eclipse.workbench.commandsexample.secondcommand",
    CommandContributionItem.STYLE_PUSH);
    ref = new CommandContributionItem(commandParameter);
    tab[1] = ref;
    return tab;
    }
    }
    ContributionItemExample.java du
    projet CommandsExamples
    A utiliser comme implémentation
    abstraite de IContributionItem
    Utilisation de commandes définies
    précédemment

    View full-size slide

  72. 72
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Aller plus loin avec menuContribution : control
    † Exemple : création d’un élément personnalisé dans une barre
    d’outils
    Projet CommandsExamples
    Création d’un élément dans la barre
    d’outils à partir de l’API SWT

    View full-size slide

  73. 73
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Aller plus loin avec menuContribution : control
    † Exemple (suite) : création d’un élément personnalisé dans
    une barre d’outils
    plugin.xml du projet
    CommandsExamples
    Création d’un élément
    control
    Classe de type
    WorkbenchWindowControlContribution

    View full-size slide

  74. 74
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Aller plus loin avec menuContribution : control
    † Exemple (suite) : création d’un élément personnalisé dans
    une barre d’outils
    public class WorkbenchWindowCustomControlContribution extends WorkbenchWindowControlContribution {
    protected Control createControl(Composite parent) {
    Composite composite = new Composite(parent, SWT.NONE);
    GridLayout layout = new GridLayout(2, false);
    layout.marginHeight = 0;
    layout.marginWidth = 0;
    composite.setLayout(layout);
    composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
    final Label label = new Label(composite, SWT.NONE);
    label.setText("Click");
    Button button = new Button(composite, SWT.PUSH);
    button.setText("Call");
    button.addSelectionListener(new SelectionAdapter() {
    public void widgetSelected(SelectionEvent e) {
    IHandlerService hs = (IHandlerService)PlatformUI.getWorkbench().getService(IHandlerService.class);
    try {
    hs.executeCommand("eclipse.workbench.commandsexample.firstcommand", null);
    } catch (Exception e1) {
    e1.printStackTrace();
    }
    }
    });
    return composite;
    }
    }
    WorkbenchWindowCustomControlContribution.java
    du projet CommandsExamples
    Composants SWT
    Déclenchement d’une commande

    View full-size slide

  75. 75
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Raccourci clavier
    † Possibilité d’exécuter une commande via un raccourci clavier
    en utilisant le point d’extension org.eclipse.ui.bindings
    † A noter que le point d’extension org.eclipse.ui.commands
    permet de construire des raccourcis clavier mais ces éléments
    sont DEPRECATED et ne doivent pas être utilisés
    † Dans la suite nous montrons comment construire des
    raccourcis claviers (key) et des regroupements de raccourcis
    claviers (scheme)

    View full-size slide

  76. 76
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Raccourci clavier
    † Ajouter un extension basée sur le point d’extension
    org.eclipse.ui.bindings
    Création d’extension à
    partir du point
    d’extension
    org.eclipse.ui.bindings

    View full-size slide

  77. 77
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Raccourci clavier
    † Ajouter un élément key permettant de construire un
    raccourci clavier
    plugin.xml du projet
    CommandsKeyBindingRCPExamples

    View full-size slide

  78. 78
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Raccourci clavier
    † Construire un raccourci clavier actif quand la touche F11
    est déclenchée
    plugin.xml du projet
    CommandsKeyBindingRCPExamples

    View full-size slide

  79. 79
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Raccourci clavier
    sequence définit la séquence de touches
    du clavier qui active la commande
    schemeId définit le regroupement de
    raccourcis clavier. Par défaut
    org.eclipse.ui.defaultAcceleratorConfiguration
    commandId définit l’identifiant
    de la commande à appeler lors
    de l’utilisation de la touche F11
    platform définit le système sur
    lequel le raccourci est défini (win32,
    gtk, motif, carbon, photon)
    † Paramétrer les attributs d’un élément key

    View full-size slide

  80. 80
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Raccourci clavier : sequence
    † L’attribut sequence est utilisée pour définir une séquence
    de raccourcis clavier
    † Plusieurs raccourcis clavier peuvent être spécifiés dans une
    séquence séparés par un espace
    † Chaque raccourcis clavier se compose d’une ou plusieurs
    touches maintenues enfoncées et sont séparées par +
    † Les modifiers (touches spécifiques) reconnus sont : M1,
    M2, M3, M4, ALT, COMMAND, CTRL et SHIFT
    † M1 : COMMAND sur MAC OS X et CTRL sur les autres plateformes
    † M2 : SHIFT
    † M3 : OPTION sur MAC OS X et ALT sur les autres plateformes
    † M4 : CTRL sur MAC OS X et indéfinis pour les autres plateformes
    † Préférez l’utilisation de M1, M2, M3 et M4 pour être indé-
    pendant de la plateforme cible

    View full-size slide

  81. 81
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Raccourci clavier : sequence
    † Différents exemples de séquence
    † CTRL+L : maintenir enfoncées les touches CTRL et L
    † M1+L : maintenir enfoncées les touches COMMAND et L (MAC OS X)
    ou CTRL et L sur les autres systèmes
    † CTRL+L F11 F12 : maintenir enfoncées les touches CTRL et L puis la
    touche F11 et enfin la touche F12
    Quand plusieurs raccourcis claviers se succèdent une
    fenêtre flottante contextualise l’interaction en cours

    View full-size slide

  82. 82
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Raccourci clavier : scheme
    † Un scheme est un regroupement de raccourcis clavier
    † org.eclipse.ui.defaultAcceleratorConfiguration est l’identifiant
    par défaut de la plateforme Eclipse
    † Pour construire et utiliser son propre scheme vous devrez
    † Définir un scheme via le point d’extension org.eclipse.ui.bindings
    † Attribuer l’identifiant du scheme à l’attribut schemeId de l’élément key
    † Posséder un product (extrait du cours sur Eclipse RCP)
    † Définir un fichier de configuration et positionner l’identifiant du
    scheme dans une valeur de propriétés

    View full-size slide

  83. 83
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Raccourci clavier : scheme
    † Définir un scheme via le point d’ext. org.eclipse.ui.bindings
    plugin.xml du projet
    CommandsKeyBindingRCPExamples
    Construction d’un élément scheme permettant
    de regroupant de raccourcis clavier

    View full-size slide

  84. 84
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Raccourci clavier : scheme
    † Définir un scheme via le point d’ext. org.eclipse.ui.bindings
    Définition de l’identifiant du scheme
    plugin.xml du projet
    CommandsKeyBindingRCPExamples
    Précise le nom du
    scheme
    Relation d’héritage avec
    un scheme déjà créé

    View full-size slide

  85. 85
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Raccourci clavier : scheme
    † Attribuer l’identifiant du scheme à l’attribut schemeId de key
    plugin.xml du projet
    CommandsKeyBindingRCPExamples
    Définition de la séquence du raccourci clavier Préciser l’identifiant du scheme
    précédemment créé
    L’identifiant de la
    commande qui sera
    appelée

    View full-size slide

  86. 86
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Raccourci clavier : scheme (création d’un product)
    † Construction d’une application Eclipse RCP
    Une présentation détaillée sur la
    manière de construire un product sera
    donnée dans la partie Eclipse RCP
    Construction d’un nouveau projet
    Plug-in (File -> New -> Project ->
    Plug-in Project)

    View full-size slide

  87. 87
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Raccourci clavier : scheme (création d’un product)
    † Construction d’une application Eclipse RCP (suite)
    S’assurer que l’option Rich Client
    Application est active
    Différents paramétrages identiques
    à ceux utilisés lors de la création
    d’un plug-in

    View full-size slide

  88. 88
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Raccourci clavier : scheme (création d’un product)
    † Construire le fichier de configuration du product
    Choisir le projet où sera
    créé le product
    Définir le nom du product
    Créer le product à partir
    d’une configuration allégée
    Construction d’un nouveau projet Plug-in
    (File -> New -> Other … -> Product
    Configuration)

    View full-size slide

  89. 89
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Raccourci clavier : scheme (création d’un product)
    † Configuration du fichier de configuration du product
    Commandskeybindingrcpexamples.product du
    projet CommandsKeyBindingRCPExamples
    Nécessite la création de
    l’identifiant du product

    View full-size slide

  90. 90
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Raccourci clavier : scheme (création d’un product)
    † Configuration du fichier de configuration du product (suite)
    Identifiant de l’application sur
    laquelle le product est associé
    Projet où l’identifiant du
    product sera créé
    Identifiant du product

    View full-size slide

  91. 91
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Raccourci clavier : scheme (création d’un product)
    † Configuration du fichier de configuration du product (suite)
    plugin.xml du projet
    CommandsKeyBindingRCPExamples
    Lors de la création de l’identifiant une extension basée
    sur org.eclipse.core.runtime.products a été créée
    Nom donné à l’identifiant du product

    View full-size slide

  92. 92
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Raccourci clavier : scheme (création d’un product)
    † Définir un fichier de configuration des préférences utilisateur
    org.eclipse.ui/KEY_CONFIGURATION_ID = eclipse.workbench.commandskeybindingrcpexamples.specificdefaultacceleratorconfigurationid
    org.eclipse.ui/SHOW_PROGRESS_ON_STARTUP = false
    pluginpreference.ini du projet
    CommandsKeyBindingRCPExamples
    Identifiant du scheme qui doit être rendu actif
    Clé (KEY_CONFIGURATION_ID)
    permettant d’activer un scheme
    Le fichier pluginpreference.ini est
    placé à la racine du projet

    View full-size slide

  93. 93
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Raccourci clavier : scheme (création d’un product)
    † Déclarer le fichier pluginpreference.ini dans le fichier de confi-
    guration du product
    plugin.xml du projet
    CommandsKeyBindingRCPExamples
    Définition d’une
    propriété à l’extension
    products pour
    configurer le product

    View full-size slide

  94. 94
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Raccourci clavier : scheme (création d’un product)
    † Déclarer le fichier pluginpreference.ini dans le fichier de confi-
    guration du product (suite)
    plugin.xml du projet
    CommandsKeyBindingRCPExamples
    Nom de la propriété à ajouter :
    preferenceCustomization
    Nom du fichier de configuration :
    pluginpreference.ini

    View full-size slide

  95. 95
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Raccourci clavier : scheme
    † Exécuter l’application et reproduire la séquence : F9
    Projet
    CommandsKeyBindingRCPExamples
    Lors de l’appui sur la touche F9, la
    commande keyspecificcommandid est
    déclenchée

    View full-size slide

  96. 96
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Restrictions : généralités
    † L’API Commands permet d’appliquer des restrictions sur les
    handlers et sur les éléments menuContributions
    † Au niveau des handlers les restrictions sont
    † activeWhen : si le handler est inactif, aucune commande n’est associée
    à ce handler
    † enabledWhen : si le handler est désactivé, l’exécution du handler ne
    peut être réalisée (si activé doit obligatoirement être actif)
    † Si handler est désactivé la commande apparaîtra grisée si elle est
    affichée dans un menu (peut importe si le handler est actif ou inactif)
    † Au niveau des éléments menuContributions la restriction est
    † visibleWhen : si invisible, l’élément graphique associé à la commande
    ne s’affiche pas (un élément dans un menu par exemple)
    † La description de restrictions est réalisée par le langage Core
    Expressions

    View full-size slide

  97. 97
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Restrictions : exemples
    † Exemple : Afficher une commande dans la barre d’outils
    principale quand un élément est sélectionné
    Pas d’élément dans le
    service de sélection
    Un élément dans le
    service de sélection
    La commande est affichée dans
    la barre d’outils principale

    View full-size slide

  98. 98
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Restrictions : exemples
    † Exemple (suite) : Afficher une commande dans la barre
    d’outils principale quand un élément est sélectionné
    plugin.xml du projet
    CommandsExpressionsExamples
    Une restriction visibleWhen au
    niveau d’un élément
    menuContribution
    Commande est affichée quand un
    seul élément de la sélection est
    sélectionné

    View full-size slide

  99. 99
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Restrictions : exemples
    † Exemple : Afficher une commande dans la barre d’outils
    principale quand une vue est active
    La vue « View Command Expression »
    n’est pas active
    La vue « View Command Expression »
    est active
    La commande « Second Command
    Expression » est désactivée
    La commande « Second Command
    Expression » est maintenant activée

    View full-size slide

  100. 100
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Restrictions : exemples
    † Exemple (suite) : Afficher une commande dans la barre
    d’outils principale quand une vue est active
    plugin.xml du projet
    CommandsExpressionsExamples
    Une restriction enabledWhen au
    niveau d’un élément handler
    Commande est activée quand la vue
    active est « View Command Expression »

    View full-size slide

  101. 101
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Restrictions : construire Expression Definitions
    † Dans les exemples précédents nous avons montré comment
    construire des expressions en les associant directement aux
    différentes restrictions (visibleWhen, enabledWhen, …)
    † Il peut être intéressant de mutualiser ces expressions de
    manière à les réutiliser sans avoir à recopier les définitions
    † Le point d’extension org.eclipse.core.expressions.definitions
    permet de construire ces expressions
    † Les restrictions utiliseront ensuite une référence à la nouvelle
    définition
    Ajouter une dépendance sur
    org.eclipse.core.expressions pour exploiter le point
    d’extension org.eclipse.core.expressions.definitions

    View full-size slide

  102. 102
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Restrictions : construire Expression Definitions
    Point d’extension permettant
    de créer des définitions
    d’expression

    View full-size slide

  103. 103
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Restrictions : construire Expression Definitions
    plugin.xml du projet
    CommandsExpressionsExamples
    Création d’une définition d’expression :
    un élément du service de sélection

    View full-size slide

  104. 104
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Restrictions : utiliser Expression Definitions
    plugin.xml du projet
    CommandsExpressionsExamples
    Définition d’un nouvel élément menuContribution
    avec une restriction visibleWhen dont l’expression
    a été définie précédemment
    Utilisation du sous élément
    reference de visibleWhen
    (s’appliquerait également à
    enabledWhen et activeWhen)

    View full-size slide

  105. 105
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Restrictions : utiliser Expression Definitions
    Lors de la sélection d’un élément, les
    deux commandes sont affichées dans
    la barre d’outils principale
    Pas d’élément dans le
    service de sélection

    View full-size slide

  106. 106
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Restrictions : Core Expressions en détail
    † Nous avons montré dans les exemples précédent des
    expressions basiques
    † La plateforme Eclipse fournit un ensemble d’éléments
    pour la définition d’expressions plus complexes
    † Dans la suite, nous nous proposons d’étudier chacun de ces
    éléments

    View full-size slide

  107. 107
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Restrictions : élément count
    † L’élément count est utilisé pour vérifier le nombre d’occur-
    rence d’une collection
    † Cet élément peut être utilisé pour vérifier par exemple le
    nombre des sélections en cours
    † Si la vérification est correcte l’élément count est évalué à vrai
    sinon il est évalué à faux
    † L’attribut value de l’élément count est soit un entier soit un
    méta-caractère
    † * : n’importe quelle valeur
    † ? : 0 ou 1 élément
    † + : 1 ou plusieurs éléments
    † ! : aucun élément

    View full-size slide

  108. 108
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Restrictions : élément count
    † Exemple : Afficher une commande dans la barre d’outils
    principale quand zéro ou un élément est sélectionné
    plugin.xml du projet
    CommandsExpressionsCountExamples
    Une restriction visibleWhen au
    niveau d’un élément
    menuContribution
    La commande est affichée si
    l’élément count s’assure qu’il
    n’y ait aucune ou un élément
    de la sélection

    View full-size slide

  109. 109
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Restrictions : élément iterate
    † L’élément iterate permet de parcourir les occurrences d’une
    collection
    † Cet élément peut être utilisé pour vérifier par exemple le
    contenu des sélections en cours
    † Deux attributs de iterate sont définis operator et ifEmpty
    † Attribut operator peut recevoir les valeurs and ou or
    † and : chaque occurrence doit satisfaire le sous élément de iterate
    † or : au moins un élément doit satisfaire le sous élément de iterate
    † Attribut ifEmpty peut recevoir les valeurs true ou false
    † true : iterate est évalué à vrai si la collection est vide
    † false : iterate est évalué à faux si la collection est vide

    View full-size slide

  110. 110
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Restrictions : élément instanceof
    † L’élément instanceof permet de comparer le type d’un objet
    en cours (un élément de sélection par exemple) par rapport
    à un type à comparer
    † Cet élément est comparable à l’instruction instanceof du
    langage Java
    † L’attribut value de l’élément instanceof permet d’indiquer le
    type à comparer
    † Si la correspondance entre les types est correcte, l’élément
    instanceof est évalué à vrai

    View full-size slide

  111. 111
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Restrictions : élément iterate et instanceof
    † Exemple : Afficher une commande dans la barre d’outils
    quand tous les éléments de sélection sont des String
    plugin.xml du projet
    CommandsExpressionsIterateInstanceOfExamples
    Si la collection est vide, iterate
    est évalué à vrai
    Tous les éléments doivent respecter le
    sous élément instanceof de iterate

    View full-size slide

  112. 112
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Restrictions : élément iterate et instanceof
    † Exemple (suite) : Afficher une commande dans la barre
    d’outils quand tous les éléments de sélection sont des String
    plugin.xml du projet
    CommandsExpressionsIterateInstanceOfExamples
    Permet de comparer le type de l’objet en cours
    (occurrence de la sélection) avec le type String

    View full-size slide

  113. 113
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Restrictions : élément iterate et instanceof
    † Exemple (suite) : Afficher une commande dans la barre
    d’outils quand tous les éléments de sélection sont des String
    Une Table avec
    des éléments de
    type String et un
    élément de type
    Integer
    Si seuls des
    éléments de type
    String sont
    sélectionnés, la
    commande est
    affichée
    Si par contre la
    sélection contient des
    éléments de type
    String et Integer, la
    commande n’est pas
    affichée

    View full-size slide

  114. 114
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Restrictions : élément systemTest
    † L’élément systemTest permet de comparer la valeur d’une
    propriété système avec une valeur donnée
    † Les propriétés systèmes sont les propriétés obtenues par la
    méthode System.getProperty()
    † Par exemple user.name est une propriété qui retourne le
    nom de l’utilisateur courant
    † L’élément systemTest possède deux attributs
    † property : le nom de la propriété à tester
    † value : la valeur de la propriété

    View full-size slide

  115. 115
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Restrictions : élément systemTest
    † Exemple : Afficher une commande dans la barre d’outils
    quand la propriété user.name vaut baronm
    plugin.xml du projet
    CommandsExpressionsSystemTestExamples
    Permet de comparer la valeur de la propriété
    « user.name » avec la valeur baronm

    View full-size slide

  116. 116
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Restrictions : élément test
    † L’élément test permet de tester une valeur particulière d’une
    propriété sur un objet en cours
    † Exemples
    † A partir de la sélection d’un texte, vérifier que le contenu de la sélec-
    tion contient que des lettres
    † A partir du Workbench Window actif, vérifier que toutes ces perspec-
    tives sont fermées
    † Le test s’effectue par l’utilisation d’un objet Property Tester
    décrit au travers d’une classe Java de type PropertyTester
    † L’élément test possède quatre attributs
    † property : nom de la propriété à tester
    † args : arguments complémentaires à transmettre au tester
    † value : la valeur qui peut être comparée
    † forcePluginActivation : si true force le plugin a l’activation

    View full-size slide

  117. 117
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Restrictions : élément test
    † La valeur de l’attribut property de test est la combinaison
    entre l’espace de nommage et le nom de la propriété
    † Exemple
    † Vérifier si toutes les perspectives de IWorkbenchWindow sont ouvertes
    la property est org.eclipse.ui.workbenchWindow.isPerpsectiveOpen
    † La plateforme Eclipse fournit un ensemble prédéfinis de
    Property Tester qui sont utilisés pour le fonctionnement
    interne de l’environnement Eclipse
    † Nous montrerons également dans la suite comment créer ses
    propres Property Tester
    Espace de nommage Nom de la propriété

    View full-size slide

  118. 118
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Restrictions : élément test
    † Property Tester prédéfinis …

    View full-size slide

  119. 119
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Restrictions : élément test
    † Property Tester prédéfinis … (suite)

    View full-size slide

  120. 120
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Restrictions : élément test
    † Exemple : Désactiver une commande dans la barre de menu
    quand toutes les perspectives sont fermées
    Projet CommandsExpressionsTestExamples
    Toutes les perspectives sont fermées, la
    commande est désactivée
    La perspective Resource est ouverte, la
    commande est activée

    View full-size slide

  121. 121
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Restrictions : élément test
    † Exemple (suite) : Désactiver une commande dans la barre
    de menu quand toutes les perspectives sont fermées
    Nom de la propriété
    Espace de nommage
    Type de l’objet
    Classe implémentant le
    Property Tester associé
    † La valeur de l’attribut property de test est
    † org.eclipse.ui.workbenchWindow.isPerspectiveOpen

    View full-size slide

  122. 122
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Restrictions : élément test
    † Exemple (suite) : Désactiver une commande dans la barre
    de menu quand toutes les perspectives sont fermées
    plugin.xml du projet
    CommandsExpressionsTestExamples
    L’objet en cours est
    activeWorkbenchWindow de type
    IWorkbenchWindow

    View full-size slide

  123. 123
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Restrictions : élément test
    † Exemple (suite) : Désactiver une commande dans la barre
    de menu quand toutes les perspectives sont fermées
    plugin.xml du projet
    CommandsExpressionsTestExamples
    Utilisation de la propriété
    org.eclipse.ui.workbenchWindow.isPerspectiveOpen
    Permet de forcer le démarrage du plugin
    de manière à prendre en compte cette
    restriction

    View full-size slide

  124. 124
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Restrictions : élément and, not et or
    † Les éléments and, or et not permettent de combiner des
    expressions par des opérateurs logiques
    † Ils permettent d’exprimer des expressions à plusieurs niveaux
    d’éléments (iterate, count, …)
    † Tous les sous éléments des éléments and ou or sont affectés
    par l’opération logique
    † L’élément not ne peut accepter un seul sous élément
    † Nous montrons dans la suite, la combinaison des éléments
    étudiés précédemment (iterate, instanceof, count et
    systemtest)

    View full-size slide

  125. 125
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Restrictions : élément and, not et or
    † Exemple : Afficher une commande dans la barre de menu si
    † la propriété user.name vaut baronm et tous les élément de sélection
    sont String
    † ou quand le nombre de sélection est différent de 2
    Le nombre de sélection est
    différent de 2 => Commande
    affichée
    Elément de sélection de type différent
    et nombre de sélection égale à 2 =>
    Commande non affichée

    View full-size slide

  126. 126
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Restrictions : élément and, not et or
    † Exemple (suite) : Afficher une commande dans la barre de
    menu si …
    Bloc or
    Bloc and
    Bloc not
    plugin.xml du projet
    CommandsExpressionsAndNotOrExamples

    View full-size slide

  127. 127
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Restrictions : définir ses propres variables d’évaluation
    † Précédemment nous avons utilisé deux variables (selection
    et activeWorkbenchWindow) prédéfinies par la plateforme
    Eclipse
    † Une variable retourne un type a concorder avec les éléments
    des expressions définis précédemment
    † ISelection pour la variable selection
    † String pour activeWorkbenchWindow
    † La plupart des variables sont modifiables en cours d’exécution
    † Dans la suite est montré au travers d’un exemple la façon de
    † créer une variable
    † mettre à jour son contenu

    View full-size slide

  128. 128
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Restrictions : définir ses propres variables d’évaluation
    † Variable prédéfinies …

    View full-size slide

  129. 129
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Restrictions : définir ses propres variables d’évaluation
    † Variable prédéfinies … (suite)

    View full-size slide

  130. 130
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Restrictions : définir ses propres variables d’évaluation
    † Exemple : définition d’une variable avec trois états qui est
    modifiable par l’utilisateur L’appuie sur les boutons
    modifie l’état de la variable
    La variable est utilisée pour des restrictions
    visibleWhen pour afficher une commande du
    menu, de la barre d’outils et de la barre de la vue

    View full-size slide

  131. 131
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Restrictions : définir ses propres variables d’évaluation
    † La création d’une variable s’effectue au travers du point
    d’extension org.eclipse.ui.services
    Point d’extension
    org.eclipse.ui.services

    View full-size slide

  132. 132
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Restrictions : définir ses propres variables d’évaluation
    † La création d’un élément sourceProvider permet de définir
    un objet de type ISourceProvider
    plugin.xml du projet
    CommandsExpressionsVariableExamples
    Nom de la classe définissant
    l’objet de type ISourceProvider

    View full-size slide

  133. 133
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Restrictions : définir ses propres variables d’évaluation
    † Un objet ISourceProvider définit le comportement de la
    variable (l’accès à ses valeurs)
    † Un objet ISourceProvider peut gérer plusieurs variables
    † Une implémentation partielle est fournie par la classe
    AbstractSourceProvider
    † Map getCurrentState() : Map des noms de variables
    (String) avec les valeurs des variables (Object)
    † String[] getProvidedSourceNames() : retourne les noms des variables
    définies par l’objet SourceProvider
    Un objet ISourceProvider peut
    définir plusieurs variables

    View full-size slide

  134. 134
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Restrictions : définir ses propres variables d’évaluation
    † Exemple (suite) : définition d’une variable avec trois états
    qui est modifiable par l’utilisateur
    public class AnimationSourceProvider extends AbstractSourceProvider {
    public final static String ANIMATION_STATE = "eclipse.workbench.commands...examples.animation";
    private final static String MENU_STATE = "menu";
    private final static String TOOLBAR_STATE = "toolbar";
    private final static String TOOLBAR_VIEW_STATE = "toolbarview";
    private int state;
    public AnimationSourceProvider() {
    state = 0;
    }
    public Map getCurrentState() {
    Map currentState = new HashMap(1);
    if (state == 0) {
    currentState.put(ANIMATION_STATE, MENU_STATE);
    } else if (state == 1) {
    currentState.put(ANIMATION_STATE, TOOLBAR_STATE);
    } else {
    currentState.put(ANIMATION_STATE, TOOLBAR_VIEW_STATE);
    }
    return currentState;
    }
    public String[] getProvidedSourceNames() {
    return new String[] {ANIMATION_STATE};
    }
    ...
    }
    Classe AnimationSourceProvider.java du projet
    CommandsExpressionsVariableExamples
    Une seule variable est définie
    Trois états différents peuvent
    être retournés
    Nom de la variable

    View full-size slide

  135. 135
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Restrictions : définir ses propres variables d’évaluation
    † Exposer le nom de la variable au sein de l’application Eclipse
    pour être utilisée dans les expressions
    plugin.xml du projet
    CommandsExpressionsVariableExamples
    Nom de la variable

    View full-size slide

  136. 136
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Restrictions : définir ses propres variables d’évaluation
    † L’accès aux objets de type ISourceProvider est réalisé par
    l’intermédiaire de l’interface
    † ISourceProviderService : pour créer des commandes
    † De la même manière que pour les interfaces IHandlerService
    et ICommandService, le Workbench permet de récupérer une
    instance de ISourceProviderService
    † A partir d’un ISourceProviderService, la récupération d’un
    ISourceProvider est obtenue par le nom de la variable
    ISourceProviderService spc = (ISourceProviderService)PlatformUI.getWorkbench().getService(ISourceProviderService.class);
    AnimationSourceProvider myPro = (AnimationSourceProvider)spc.getSourceProvider(AnimationSourceProvider.ANIMATION_STATE);

    View full-size slide

  137. 137
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Restrictions : définir ses propres variables d’évaluation
    † Exemple (suite) : définition d’une variable avec trois états
    qui est modifiable par l’utilisateur
    public class AnimationControlViewPart extends ViewPart {
    public void createPartControl(Composite parent) {
    parent.setLayout(new GridLayout(3,true));
    // Get the service
    ISourceProviderService spc = (ISourceProviderService) PlatformUI.getWorkbench().getService(ISourceProviderService.class);
    // Get our source provider by querying by the variable name
    final AnimationSourceProvider myPro = (AnimationSourceProvider) spc.getSourceProvider(AnimationSourceProvider.ANIMATION_STATE);
    Button menu = new Button(parent, SWT.FLAT);
    menu.addSelectionListener(new SelectionAdapter() {
    public void widgetSelected(SelectionEvent e) {
    myPro.setState(0);
    }
    });
    menu.setLayoutData(new GridData(GridData.FILL_BOTH));
    menu.setText("Menu");
    Button toolbar = new Button(parent, SWT.FLAT);
    toolbar.addSelectionListener(new SelectionAdapter() {
    public void widgetSelected(SelectionEvent e) {
    myPro.setState(1);
    }
    });
    toolbar.setLayoutData(new GridData(GridData.FILL_BOTH));
    toolbar.setText("Toolbar");
    Button view = new Button(parent, SWT.FLAT);
    view.addSelectionListener(new SelectionAdapter() {
    public void widgetSelected(SelectionEvent e) {
    myPro.setState(2);
    }
    });
    view.setLayoutData(new GridData(GridData.FILL_BOTH));
    view.setText("ToolbarView");
    }
    }
    Classe AnimationControlViewPart.java du projet
    CommandsExpressionsVariableExamples
    Récupération de l’objet
    ISourceProvider
    Modifications de l’état de
    la variable

    View full-size slide

  138. 138
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Restrictions : définir ses propres variables d’évaluation
    † Exemple (suite) : définition d’une variable avec trois états
    qui est modifiable par l’utilisateur
    plugin.xml du projet
    CommandsExpressionsVariableExamples
    Trois restrictions
    visibleWhen sont définies

    View full-size slide

  139. 139
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Restrictions : définir ses propres PropertyTester
    † Précédemment nous avons montré comment utiliser les
    Property Tester définis par la plateforme Eclipse
    † Cette partie s’intéresse à la création de Property Tester
    personnalisé
    † La présentation sera guidée par un exemple inspiré d’un
    billet de Robert Konigsberg
    † http://konigsberg.blogspot.com/2008/06/screencast-using-property-
    testers-in.html
    † Description de l’exemple
    † Vérifie que la sélection sur du texte contient uniquement des lettres
    ou des chiffres
    † Le Propery Tester contient deux propriétés : isAllLetters et
    isAllDigits

    View full-size slide

  140. 140
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Restrictions : définir ses propres PropertyTester
    † Exemple : vérifie si la sélection sur du texte contient unique-
    ment des lettres ou des chiffres
    Sélection d’un texte contenant
    uniquement des lettres
    Sélection d’un texte contenant
    uniquement des chiffres
    Dans les deux cas, le handler
    associé à la commande est activé
    Si la sélection sur le texte contient
    à la fois des lettres et des chiffres,
    le handler est désactivé

    View full-size slide

  141. 141
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Restrictions : définir ses propres PropertyTester
    † La création d’un Property Tester est réalisé au travers du
    point d’extension org.eclipse.core.expressions.propertyTesters
    Point d’extension
    org.eclipse.core.expressions.properyTesters

    View full-size slide

  142. 142
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Restrictions : définir ses propres PropertyTester
    † L’ajout d’un élément PropertyTester (à partir de l’extension
    précédente) permet de définir un Property Tester
    † L’élément PropertyTester possède cinq attributs
    † id : l’identifiant du Property Tester
    † type : le type de l’objet à traiter pour effectuer la vérification
    † namespace : l’espace de nommage
    † properties : une liste de propriétés séparées par une virgule
    † class : classe de type PropertyTester implémentant le comportement
    du Property Tester

    View full-size slide

  143. 143
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Restrictions : définir ses propres PropertyTester
    † La classe de type PropertyTester doit implémenter
    † boolean test(Object receiver, String prop, Object[] args, Object exp) :
    appelée pour coder le comportement du Property Tester
    † receiver : source d’information pour effectuer les tests
    † prop : la propriété à tester
    † args : des arguments supplémentaires
    † expectedValue : valeur attendue
    † Tous ces paramètres ne sont pas forcément utiles pour
    définir le comportement du Property Tester
    † Généralement les arguments receiver et prop sont utilisés

    View full-size slide

  144. 144
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Restrictions : définir ses propres PropertyTester
    plugin.xml du projet
    CommandsExpressionsCustomTestExamples
    † Ajout d’un élément propertyTester
    Ce Property Tester ne traite que les objets de
    type ISelection (type de l’argument receiver)
    Deux propriétés sont définies :
    isAllLetters et isAllDigits

    View full-size slide

  145. 145
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Restrictions : définir ses propres PropertyTester
    † Exemple (suite) : vérifie si la sélection sur du texte contient
    uniquement des lettres ou des chiffres
    public class CustomPropertyTester extends PropertyTester {
    public boolean test(Object receiver, String property, Object[] args, Object expectedValue) {
    ISelection selection = (ISelection) receiver;
    if ("isAllLetters".equals(property)) {
    if (selection instanceof TextSelection) {
    TextSelection ts = (TextSelection) selection;
    String text = (String) ts.getText();
    if (text == null || text.length() == 0) { return false; }
    for (Character ch : text.toCharArray())
    if (!Character.isLetter(ch)) { return false; }
    return true;
    }
    }
    if ("isAllDigits".equals(property)) {
    if (selection instanceof TextSelection) {
    TextSelection ts = (TextSelection) selection;
    String text = (String) ts.getText();
    if (text == null || text.length() == 0) { return false; }
    for (Character ch : text.toCharArray())
    if (!Character.isDigit(ch)) { return false; }
    return true;
    }
    }
    return false;
    }
    }
    CustomPropertyTester.java du projet
    CommandsExpressionsCustomTestExamples
    Test relatif à la propriété
    isAllLetters
    Test relatif à la propriété
    isAllDigits

    View full-size slide

  146. 146
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Restrictions : définir ses propres PropertyTester
    † Exemple (suite) : vérifie si la sélection sur du texte contient
    uniquement des lettres ou des chiffres
    plugin.xml du projet
    CommandsExpressionsCustomTestExamples
    Utilisation du Property Tester
    avec ces deux propriétés

    View full-size slide

  147. 147
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Restrictions par programmation
    † Précédemment nous avons montré comment utiliser les
    restrictions (visibleWhen, enabledWhen et activeWhen) de manière
    déclarative via les extensions
    † Puisque toutes les restrictions définies dans ces extensions
    s’appuient sur des APIs Java, il est possible de réaliser les
    mêmes constructions de manière programmatique
    † Nous n’allons pas montrer dans la suite l’exhaustivité des
    expressions étudiées précédemment mais deux exemples qui
    présentent visibleWhen et enabledWhen
    † A noter enfin, qu’il est préférable de passer par des
    constructions déclaratives pour une meilleure portabilité des
    applications à construire

    View full-size slide

  148. 148
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Restrictions par programmation : visibleWhen
    † Pour rappel une restriction visibleWhen est attachée à un
    élément menuContribution
    † Les services consacrés à la contribution d’éléments de menu
    (barre de menu, barre d’outils) sont définis par l’interface
    IMenuService
    † A partir d’un objet IMenuService
    † void addContributionItem(AbstractContributionFactory cont) : ajoute
    un élément de menu
    † La classe AbstractContributionFactory est utilisée pour
    construire un élément de menu
    † void abstract createContributionItems(IServiceLocator sl,
    IContributionRoot add) : doit être implémentée afin de construire un
    élément de menu
    IMenuService menuService = (IMenuService)PlatformUI.getWorkbench().getService(ISourceProviderService.class);

    View full-size slide

  149. 149
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Restrictions par programmation : visibleWhen
    † Exemple : afficher une commande dans le menu dont la
    restriction visibleWhen est contrôlée par programmation
    Projet
    CommandsProgrammaticVisibleWhenExamples
    Création d’un élément dans
    le menu
    Bouton « Hide » cache
    l’élément du menu
    Bouton « Show » affiche
    l’élément du menu

    View full-size slide

  150. 150
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Restrictions par programmation : visibleWhen
    † Exemple (suite) : afficher une commande dans le menu dont
    la restriction visibleWhen est contrôlée par programmation
    public class CreateMenuContributionViewPart extends ViewPart {
    private boolean isVisible = true;
    private CommandContributionItem item;
    private Expression currentExpression;
    public void createPartControl(Composite parent) {
    ...
    final Button myButton = new Button(parent, SWT.NONE);
    myButton.addSelectionListener(new SelectionAdapter() {
    public void widgetSelected(SelectionEvent e) {
    IMenuService service = (IMenuService) PlatformUI.getWorkbench().getService(IMenuService.class);
    AbstractContributionFactory ref = new AbstractContributionFactory("menu:org.eclipse.ui.main.menu", null) {
    public void createContributionItems(IServiceLocator serviceLocator, IContributionRoot additions) {
    CommandContributionItemParameter commandParameter = new CommandContributionItemParameter(
    serviceLocator, "contributionitem",
    "eclipse.workbench.commandsprogrammaticvisiblewhenexamples.helloworldcommandid",
    CommandContributionItem.STYLE_PUSH);
    currentExpression = new Expression() {
    public EvaluationResult evaluate(IEvaluationContext context) throws CoreException {
    if (isVisible) {
    return EvaluationResult.TRUE;
    } else {
    return EvaluationResult.FALSE;
    }
    }
    };
    item = new CommandContributionItem(commandParameter);
    additions.addContributionItem(item, currentExpression);
    }
    };
    service.addContributionFactory(ref);
    myButton.setEnabled(false);
    }
    });
    ... // Suite dans le prochain transparent
    CreateMenuContributionViewPart.java du projet
    CommandsProgrammaticVisibleWhenExamples
    Construction d’un élément
    dans le menu principal
    L’expression est très simple et
    elle est pilotée par l’attribut
    isVisible

    View full-size slide

  151. 151
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Restrictions par programmation : visibleWhen
    † Exemple (suite) : afficher une commande dans le menu dont
    la restriction visibleWhen est contrôlée par programmation
    public class CreateMenuContributionViewPart extends ViewPart {
    ...
    public void createPartControl(Composite parent) {
    ...
    Button hideMenuContribution = new Button(parent, SWT.NONE);
    hideMenuContribution.setText("Hide");
    hideMenuContribution.addSelectionListener(new SelectionAdapter() {
    public void widgetSelected(SelectionEvent e) {
    isVisible = false;
    updateExpression();
    }
    });
    Button showMenuContribution = new Button(parent, SWT.NONE);
    showMenuContribution.setText("Show");
    showMenuContribution.addSelectionListener(new SelectionAdapter() {
    public void widgetSelected(SelectionEvent e) {
    isVisible = true;
    updateExpression();
    }
    });
    }
    // Suite dans le prochain transparent
    CreateMenuContributionViewPart.java du projet
    CommandsProgrammaticVisibleWhenExamples
    Modification de l’attribut
    isVisible

    View full-size slide

  152. 152
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Restrictions par programmation : visibleWhen
    † Exemple (suite) : afficher une commande dans le menu dont
    la restriction visibleWhen est contrôlée par programmation
    public class CreateMenuContributionViewPart extends ViewPart {
    private void updateExpression() {
    WorkbenchWindow current = (WorkbenchWindow)PlatformUI.getWorkbench().getActiveWorkbenchWindow();
    final Set menuRestrictions = current.getMenuRestrictions();
    if (menuRestrictions == null) { return; }
    IEvaluationService es = (IEvaluationService)PlatformUI.getWorkbench().getService(IEvaluationService.class);
    IEvaluationContext currentState = es.getCurrentState();
    EvaluationReference[] refs = (EvaluationReference[]) menuRestrictions.toArray(new EvaluationReference[menuRestrictions.size()]);
    boolean changeDetected = false;
    for (EvaluationReference evalRef : refs) {
    final Expression expression = evalRef.getExpression();
    if (expression == currentExpression) {
    evalRef.setPostingChanges(true);
    boolean os = evalRef.evaluate(currentState);
    evalRef.clearResult();
    boolean ns = evalRef.evaluate(currentState);
    if (os != ns) {
    changeDetected = true;
    evalRef.getListener().propertyChange(
    new PropertyChangeEvent(evalRef, evalRef.getProperty(),valueOf(os),valueOf(ns)));
    }
    }
    }
    if (changeDetected) {
    IMenuService ms = (IMenuService) PlatformUI.getWorkbench().getService(IMenuService.class);
    if (ms instanceof WorkbenchMenuService) { ((WorkbenchMenuService) ms).updateManagers(); }
    }
    }
    private Boolean valueOf(boolean result) { return result ? Boolean.TRUE : Boolean.FALSE; }
    }
    CreateMenuContributionViewPart.java du projet
    CommandsProgrammaticVisibleWhenExamples
    Inspirée de la méthode
    liftRestrictions de la classe
    WorkbenchWindow

    View full-size slide

  153. 153
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Restrictions par programmation : enabledWhen
    † Dans le cas d’une restriction enabledWhen, il s’agit de
    contrôler un handler
    † Précédemment nous avons montré comment créer et associer
    une commande via IHandlerService
    † IHandlerActivation activateHandler(String commandId, IHandler
    handler) : associe une commande à un handler
    † Cette même interface fournit une méthode activateHandler
    avec la possibilité d’ajouter une expression (enabledWhen)
    † IHandlerActivation activateHandler(String commandId, IHandler
    handler, Expression exp) : associer une commande à un handler et
    définir une restriction enabledWhen via exp

    View full-size slide

  154. 154
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Restrictions par programmation : enabledWhen
    † Exemple : activée un handler dans le menu dont la
    restriction enabledWhen est contrôlée par programmation
    Projet
    CommandsProgrammaticEnabledWhenExamples
    Handler associé à la
    commande est désactivé
    Handler associé à la
    commande est activé

    View full-size slide

  155. 155
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Restrictions par programmation : enabledWhen
    † Exemple (suite) : activée un handler dans le menu dont la
    restriction enabledWhen est contrôlée par programmation
    public class CreateHandlerViewPart extends ViewPart {
    private boolean isEnabled = true;
    public void createPartControl(Composite parent) {
    ...
    final Button createButton = new Button(parent, SWT.NONE);
    createButton.setText("Create");
    createButton.addSelectionListener(new SelectionAdapter() {
    public void widgetSelected(SelectionEvent e) {
    IHandlerService hs = (IHandlerService) PlatformUI.getWorkbench().getService(IHandlerService.class);
    IHandler handler = new AbstractHandler() {
    public Object execute(ExecutionEvent event) throws ExecutionException {
    MessageDialog.openInformation(Display.getDefault().getActiveShell(),
    "CommandsExamples Plug-in", "Hello, Eclipse World with Third Handler");
    return null;
    }
    };
    Expression enabledWhen = new Expression() {
    public void collectExpressionInfo(ExpressionInfo info) {
    info.markDefaultVariableAccessed();
    }
    public EvaluationResult evaluate(IEvaluationContext context) throws CoreException {
    if (isEnabled)
    return EvaluationResult.TRUE;
    else
    return EvaluationResult.FALSE;
    }
    };
    hs.activateHandler("eclipse.workbench.commandsprogrammaticenabledwhenexamples.helloworldcommandid",
    handler,enabledWhen);
    createButton.setEnabled(false);
    }
    }); // Suite dans le prochain transparent
    CreateHandlerViewPart.java du projet
    CommandsProgrammaticVisibleWhenExamples
    Nécessaire pour la mise à jour de
    l’expression. Notification est
    effectuée à chaque modification
    des variables « expression »

    View full-size slide

  156. 156
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Restrictions par programmation : enabledWhen
    † Exemple (suite) : activée un handler dans le menu dont la
    restriction enabledWhen est contrôlée par programmation
    public class CreateHandlerViewPart extends ViewPart {
    private boolean isEnabled = true;
    public void createPartControl(Composite parent) {
    ...
    Button disabledHandler = new Button(parent, SWT.NONE);
    disabledHandler.setText("Disabled");
    disabledHandler.addSelectionListener(new SelectionAdapter() {
    public void widgetSelected(SelectionEvent e) {
    isEnabled = false;
    }
    });
    Button enabledHandler = new Button(parent, SWT.NONE);
    enabledHandler.setText("Enabled");
    enabledHandler.addSelectionListener(new SelectionAdapter() {
    public void widgetSelected(SelectionEvent e) {
    isEnabled = true;
    }
    });
    }
    }
    CreateHandlerViewPart.java du projet
    CommandsProgrammaticVisibleWhenExamples
    Modification de l’attribut
    isVisible

    View full-size slide

  157. 157
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Paramètres : généralités
    † Actuellement lors du déclenchement d’une commande, il
    n’est pas possible de paramétrer l’exécution du handler
    associé
    † Si on souhaite obtenir plusieurs comportements différents
    pour une commande donnée il sera nécessaire de définir
    plusieurs commandes
    † L’API Commands permet d’ajouter des paramètres à une
    commande via le sous élément commandParameter
    † Les valeurs de ces paramètres sont données lors de la
    définition du déclenchement de la commande, c’est-à-dire
    au niveau des sous éléments menuContribution

    View full-size slide

  158. 158
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Paramètres : ajouter des paramètres
    † L’ajout des paramètres est réalisé au niveau de la définition
    d’une commande (extension sur org.eclipse.ui.commands)
    † Il faut ajouter des sous éléments commandParamter à
    l’élément command
    † Possibilité pour une commande de définir plusieurs
    paramètres
    † Un paramètre est défini par les attributs suivants
    † id : identifiant du paramètre (utilisé pour la manipulation)
    † name : nom du paramètre
    † values : définir l’ensemble des valeurs autorisées
    † typeId : permet d’utiliser un autre type que String
    † optional : précise si le paramètre est obligatoire ou pas

    View full-size slide

  159. 159
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Paramètres : ajouter des paramètres
    † Exemple : afficher l’emplacement (menu ou toolbar) où est
    déclenchée une commande
    plugin.xml du projet
    CommandsParametersExamples
    Ajout d’un élément
    commandParameter
    Identifiant utilisé pour les
    manipulations du paramètre

    View full-size slide

  160. 160
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Paramètres : fournir des valeurs aux paramètres
    † Les valeurs données aux paramètres sont précisées lors de
    la définition du déclenchement de la commande
    † Pour rappel, la définition du déclenchement de la commande
    est réalisée au niveau des sous éléments menuContribution
    † Au niveau de l’élément command (sous élément de
    menuContribution) il faut ajouter un sous élément parameter
    † L’élément parameter contient deux attributs
    † name : identifiant du paramètre
    † value : valeur à donner pour ce paramètre (String)

    View full-size slide

  161. 161
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Paramètres : fournir des valeurs aux paramètres
    † Exemple (suite) : afficher l’emplacement (menu ou toolbar)
    où est déclenchée une commande
    plugin.xml du projet
    CommandsParametersExamples
    Identifiant du paramètre dont la
    valeur doit être transmise
    Valeur du paramètre
    …opendialogparameterid

    View full-size slide

  162. 162
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Paramètres : traitement dans le handler
    † Dans le code du handler, les valeurs du paramètre permet-
    tent d’effectuer des traitements particuliers
    † Pour rappel un handler doit implémenter un objet de type
    IHandler (implémentation abstraite via AbstractHandler)
    † Object execute(ExecutionEvent e) : traitement réalisé quand la
    commande est déclenchée
    † L’objet ExecutionEvent permet d’extraire la valeur d’un
    paramètre
    † String getParameter(String param) : récupération de la valeur du
    paramètre param

    View full-size slide

  163. 163
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Paramètres : traitement dans le handler
    † Exemple (suite) : afficher l’emplacement (menu ou toolbar)
    où est déclenchée une commande
    public class OpenDialogHandler extends AbstractHandler {
    @Override
    public Object execute(ExecutionEvent event) throws ExecutionException {
    String param = event.getParameter("eclipse.workbench.commandsparametersexamples.opendialogparameterid");
    MessageDialog.openInformation(Display.getDefault().getActiveShell(),
    "CommandsParametersExamples Plug-in","opendialogparameterid parameter value : " + param);
    return null;
    }
    }
    OpenDialogHandler.java du projet
    CommandsParametersExamples
    Récupération de la valeur du
    paramètre …opendialogparameterid

    View full-size slide

  164. 164
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Paramètres : renseigner les valeurs autorisées
    † Il est également possible de définir à l’avance la liste des
    valeurs prises en compte par un paramètre
    † L’attribut values de l’élément commandParameter est utilisé
    pour fournir cette information
    † Par ailleurs, l’environnement Eclipse fournit un outil permet-
    tant de lister l’intégralité des commandes et des valeurs
    autorisées (sous condition que l’attribut values soit renseigné)
    † L’outil est accessible via les préférences (menu Window ->
    Preferences -> General -> Keys)

    View full-size slide

  165. 165
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Paramètres : renseigner les valeurs autorisées
    Le paramètre Open Dialog Values Parameter
    accepte deux valeurs : menu et toolbar
    Pour que les valeurs potentielles du
    paramètre soient affichées il est
    obligatoire d’associer la commande a une
    catégorie

    View full-size slide

  166. 166
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Paramètres : renseigner les valeurs autorisées
    † L’attribut values de l’élément commandParameter doit
    renseigner un objet de type IParameterValues
    † Cette interface fournit une méthode
    † Map getParameterValues() : valeurs autorisées
    † Exemple
    public class ParameterValues implements IParameterValues {
    public Map getParameterValues() {
    Map params = new HashMap();
    params.put("menu", "In Toolbar");
    params.put("toolbar", "In Menu");
    return params;
    }
    }
    Valeurs affichées à l’utilisateur associées aux
    valeurs autorisées par le paramètre

    View full-size slide

  167. 167
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Paramètres : renseigner les valeurs autorisées
    † Possibilité de définir les valeurs autorisées en passant par
    une approche déclarative
    plugin.xml du projet
    CommandsParametersExamples
    Ne rien préciser au
    niveau de l’attribut
    values

    View full-size slide

  168. 168
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Paramètres : renseigner les valeurs autorisées
    † Suite : Possibilité de définir les valeurs autorisées en passant
    par une approche déclarative
    plugin.xml du projet
    CommandsParametersExamples
    Ajouter un sous
    élément values
    1
    Utiliser cette classe de type
    IParameterValues définie par
    la plateforme Eclipse
    2

    View full-size slide

  169. 169
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Paramètres : renseigner les valeurs autorisées
    † Suite : Possibilité de définir les valeurs autorisées en passant
    par une approche déclarative
    plugin.xml du projet
    CommandsParametersExamples
    Ajouter des sous éléments
    parameter qui désignent les
    valeurs possibles
    Nom de la valeur et valeur à
    donner

    View full-size slide

  170. 170
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Réutilisation : Plug-in Spy
    † L’utilitaire Plug-in Spy permet d’espionner une application
    Eclipse en cours d’exécution
    † Cet utilitaire est fourni nativement dans la plateforme Eclipse
    depuis la version 3.4
    † L’espionnage donne des informations sur
    † La vue active (éléments des menus contextuels, identifiants, …)
    † La sélection en cours
    † Les identifiants des commandes
    † La position d’un menuContribution (locationURI)
    † Pour démarrer l’outil deux options disponibles
    † Shift + Alt + F1 : pour l’espionnage des vues, du workbench, …
    † Shift + Alt + F2 : pour l’espionnage des menus et des commandes

    View full-size slide

  171. 171
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Réutilisation : Plug-in Spy
    † Exemple : Espionner la vue Package Explorer via le
    raccourci Shift + Alt + F1
    Identifie la classe ViewPart qui
    code la vue Package Explorer
    Identifie le plugin où est définie
    la vue
    Récupère l’identifiant de la vue
    Récupère l’identifiant du menu
    de la vue
    Donne des informations
    sur la sélection en cours

    View full-size slide

  172. 172
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Réutilisation : Plug-in Spy
    † Exemple : Espionner un élément de menu (closePerspective)
    via le raccourci Shift + Alt + F2 (à partir d’Eclipse 3.5)
    Récupère l’identifiant de
    l’élément menuContribution
    La position (locationURI) de
    l’élément
    L’identifiant de la commande
    Très utile pour récupérer les
    identifiants des commandes
    prédéfinies par la plateforme Eclipse

    View full-size slide

  173. 173
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Réutilisation : Options de traçage
    † Lors de l’exécution d’une application Eclipse il est possible
    d’activer les logs dans le but d’afficher les identifiants des
    commandes utilisés
    † Les options de traçage peuvent également être utilisés pour
    obtenir des informations sur tous les plug-ins qu’ils soient de
    la plateforme Eclipse ou non
    † L’activation des logs est réalisée au niveau de l’onglet
    Tracing d’une configuration d’exécution
    † L’activation doit être réalisée avant l’exécution de l’applica-
    tion Eclipse

    View full-size slide

  174. 174
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Réutilisation : Options de traçage
    Onglet Tracing
    Sélectionner le plug-in
    org.eclipse.ui
    Activer le mode
    debug
    1
    2
    3
    † Activation les traces d’exécution des commandes

    View full-size slide

  175. 175
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Réutilisation : Options de traçage
    Activer
    trace/commands
    1
    Possibilité d’activer les
    traces relatives aux handlers
    2
    † Activation les traces d’exécution des commandes (suite)

    View full-size slide

  176. 176
    Commands - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Réutilisation : Options de traçage
    † Activation les traces d’exécution des commandes (suite)
    Identifiant de la commande
    Classe implémentant le handler

    View full-size slide