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

Construction de commandes avec la plateforme Eclipse

Embed Size (px)

DESCRIPTION

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).

Citation preview

Page 1: Construction de commandes avec la plateforme Eclipse

Développement de clients riches : Plateforme Eclipse

Mickaël BARON - 2009 mailto:[email protected] ou mailto:[email protected]

Chapitre 3 : Conception de plugChapitre 3 : Conception de plug--insins

Workbench : Commands

Page 2: Construction de commandes avec la plateforme Eclipse

2Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

Creative Commons

Contrat Paternité

Partage des Conditions Initiales à l'Identique

2.0 France

http://creativecommons.org/licenses/by-sa/2.0/fr

Licence

Page 3: Construction de commandes avec la plateforme Eclipse

3Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

mbaron.developpez.com/eclipse/commands

Page 4: Construction de commandes avec la plateforme Eclipse

4Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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 mbaron.developpez.com/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

Remerciement

Developpez.com : [TODO]

Page 5: Construction de commandes avec la plateforme Eclipse

5Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

Ressources …

Des billets sur les généralités sur les commandesblog.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

Page 6: Construction de commandes avec la plateforme Eclipse

6Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

Ressources … (suite)

Des articles sur les généralités sur les commandeswiki.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 livresEclipse – 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

Page 7: Construction de commandes avec la plateforme Eclipse

7Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 8: Construction de commandes avec la plateforme Eclipse

8Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 9: Construction de commandes avec la plateforme Eclipse

9Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 10: Construction de commandes avec la plateforme Eclipse

10Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 11: Construction de commandes avec la plateforme Eclipse

11Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 12: Construction de commandes avec la plateforme Eclipse

12Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 13: Construction de commandes avec la plateforme Eclipse

13Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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 Extensionsplugin.xml du projet ActionsExamples

Page 14: Construction de commandes avec la plateforme Eclipse

14Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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 Extensionsplugin.xml du projet ActionsExamples

Texte affiché dans le menu de l’application

Possibilité d’ajouter le nouveau menu à un menu existant

Page 15: Construction de commandes avec la plateforme Eclipse

15Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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 Extensionsplugin.xml du projet ActionsExamples

Page 16: Construction de commandes avec la plateforme Eclipse

16Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 17: Construction de commandes avec la plateforme Eclipse

17Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 18: Construction de commandes avec la plateforme Eclipse

18Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 19: Construction de commandes avec la plateforme Eclipse

19Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

Construction par déclaration

Onglet Extensionsplugin.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

Page 20: Construction de commandes avec la plateforme Eclipse

20Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

Construction par déclaration

package eclipse.workbench.commandsexamples.handler;

public class FirstHandler extends AbstractHandler {

@Overridepublic 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

Page 21: Construction de commandes avec la plateforme Eclipse

21Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 22: Construction de commandes avec la plateforme Eclipse

22Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 23: Construction de commandes avec la plateforme Eclipse

23Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

Associer une commande à un Handler

Onglet Extensionsplugin.xml du projet

CommandsExamples

Définition du couple commande / handlerIdentifiant de la commande

Classe de type IHandlercorrespondant au traitement de

la commande

Page 24: Construction de commandes avec la plateforme Eclipse

24Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 25: Construction de commandes avec la plateforme Eclipse

25Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 26: Construction de commandes avec la plateforme Eclipse

26Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

Associer une commande à des images

Définition du couple commande / images

Onglet Extensionsplugin.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

Page 27: Construction de commandes avec la plateforme Eclipse

27Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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);

Page 28: Construction de commandes avec la plateforme Eclipse

28Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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)

Page 29: Construction de commandes avec la plateforme Eclipse

29Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 30: Construction de commandes avec la plateforme Eclipse

30Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 31: Construction de commandes avec la plateforme Eclipse

31Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

Construction par programmation

Exemple (suite) : exécuter une commandepublic 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

Page 32: Construction de commandes avec la plateforme Eclipse

32Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 33: Construction de commandes avec la plateforme Eclipse

33Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

Construction par programmation

Exemple : écouter l’exécution d’une commandepublic class ViewCommandPart extends ViewPart {

public void createPartControl(Composite parent) {// Suite du précédent transparentICommandService 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

Page 34: Construction de commandes avec la plateforme Eclipse

34Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 35: Construction de commandes avec la plateforme Eclipse

35Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 36: Construction de commandes avec la plateforme Eclipse

36Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 37: Construction de commandes avec la plateforme Eclipse

37Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 38: Construction de commandes avec la plateforme Eclipse

38Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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=<id> et after=<id>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 Quitsitué dans le menu File

Page 39: Construction de commandes avec la plateforme Eclipse

39Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 40: Construction de commandes avec la plateforme Eclipse

40Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 41: Construction de commandes avec la plateforme Eclipse

41Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 42: Construction de commandes avec la plateforme Eclipse

42Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 43: Construction de commandes avec la plateforme Eclipse

43Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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, …)

Page 44: Construction de commandes avec la plateforme Eclipse

44Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 45: Construction de commandes avec la plateforme Eclipse

45Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 46: Construction de commandes avec la plateforme Eclipse

46Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 47: Construction de commandes avec la plateforme Eclipse

47Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 48: Construction de commandes avec la plateforme Eclipse

48Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 49: Construction de commandes avec la plateforme Eclipse

49Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 50: Construction de commandes avec la plateforme Eclipse

50Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 51: Construction de commandes avec la plateforme Eclipse

51Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 52: Construction de commandes avec la plateforme Eclipse

52Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 53: Construction de commandes avec la plateforme Eclipse

53Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

Commande dans un menu localisé d’une vue

Exemple : ajouter une commande dans le menu localiséd’une vue

Vue …commandsexample.views.viewcommandiddu projet CommandsExamples

Menu localisé de la vue contenant une commande

Page 54: Construction de commandes avec la plateforme Eclipse

54Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 55: Construction de commandes avec la plateforme Eclipse

55Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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.viewcommandiddu projet CommandsExamples

Page 56: Construction de commandes avec la plateforme Eclipse

56Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 57: Construction de commandes avec la plateforme Eclipse

57Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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)

Page 58: Construction de commandes avec la plateforme Eclipse

58Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

Commande dans un menu contextuel de vue

Exemple : ajouter une commande dans le menu contextuel d’une vue

Vue …commandsexample.views.popupviewcommandiddu projet CommandsExamples

Menu contextuel de la vue contenant plusieurs commandes

Page 59: Construction de commandes avec la plateforme Eclipse

59Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 60: Construction de commandes avec la plateforme Eclipse

60Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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 transparentprivate 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

Page 61: Construction de commandes avec la plateforme Eclipse

61Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 62: Construction de commandes avec la plateforme Eclipse

62Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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<Object> 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

Page 63: Construction de commandes avec la plateforme Eclipse

63Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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.popupviewcommandiddu projet CommandsExamples

Cette commande doit être placée avant First Command identifiée par

contributionitem (définie programmatiquement)

Page 64: Construction de commandes avec la plateforme Eclipse

64Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 65: Construction de commandes avec la plateforme Eclipse

65Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 66: Construction de commandes avec la plateforme Eclipse

66Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 67: Construction de commandes avec la plateforme Eclipse

67Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 68: Construction de commandes avec la plateforme Eclipse

68Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 69: Construction de commandes avec la plateforme Eclipse

69Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 70: Construction de commandes avec la plateforme Eclipse

70Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 71: Construction de commandes avec la plateforme Eclipse

71Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 72: Construction de commandes avec la plateforme Eclipse

72Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 73: Construction de commandes avec la plateforme Eclipse

73Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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.javadu projet CommandsExamples

Composants SWT

Déclenchement d’une commande

Page 74: Construction de commandes avec la plateforme Eclipse

74Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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)

Page 75: Construction de commandes avec la plateforme Eclipse

75Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 76: Construction de commandes avec la plateforme Eclipse

76Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

Raccourci clavier

Ajouter un élément key permettant de construire un raccourci clavier

plugin.xml du projet CommandsKeyBindingRCPExamples

Page 77: Construction de commandes avec la plateforme Eclipse

77Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

Raccourci clavier

Construire un raccourci clavier actif quand la touche F11est déclenchée

plugin.xml du projet CommandsKeyBindingRCPExamples

Page 78: Construction de commandes avec la plateforme Eclipse

78Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 79: Construction de commandes avec la plateforme Eclipse

79Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 80: Construction de commandes avec la plateforme Eclipse

80Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 81: Construction de commandes avec la plateforme Eclipse

81Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 82: Construction de commandes avec la plateforme Eclipse

82Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 83: Construction de commandes avec la plateforme Eclipse

83Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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éé

Page 84: Construction de commandes avec la plateforme Eclipse

84Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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 schemeprécédemment créé

L’identifiant de la commande qui sera

appelée

Page 85: Construction de commandes avec la plateforme Eclipse

85Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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)

Page 86: Construction de commandes avec la plateforme Eclipse

86Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 87: Construction de commandes avec la plateforme Eclipse

87Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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)

Page 88: Construction de commandes avec la plateforme Eclipse

88Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 89: Construction de commandes avec la plateforme Eclipse

89Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 90: Construction de commandes avec la plateforme Eclipse

90Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 91: Construction de commandes avec la plateforme Eclipse

91Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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.specificdefaultacceleratorconfigurationidorg.eclipse.ui/SHOW_PROGRESS_ON_STARTUP = false

pluginpreference.ini du projet CommandsKeyBindingRCPExamples

Identifiant du scheme qui doit être rendu actifClé (KEY_CONFIGURATION_ID) permettant d’activer un scheme

Le fichier pluginpreference.ini est placé à la racine du projet

Page 92: Construction de commandes avec la plateforme Eclipse

92Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 93: Construction de commandes avec la plateforme Eclipse

93Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 94: Construction de commandes avec la plateforme Eclipse

94Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 95: Construction de commandes avec la plateforme Eclipse

95Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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 estvisibleWhen : 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 CoreExpressions

Page 96: Construction de commandes avec la plateforme Eclipse

96Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 97: Construction de commandes avec la plateforme Eclipse

97Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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é

Page 98: Construction de commandes avec la plateforme Eclipse

98Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 99: Construction de commandes avec la plateforme Eclipse

99Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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 »

Page 100: Construction de commandes avec la plateforme Eclipse

100Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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éfinitionAjouter une dépendance sur

org.eclipse.core.expressions pour exploiter le point d’extension org.eclipse.core.expressions.definitions

Page 101: Construction de commandes avec la plateforme Eclipse

101Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

Restrictions : construire Expression Definitions

Point d’extension permettant de créer des définitions

d’expression

Page 102: Construction de commandes avec la plateforme Eclipse

102Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 103: Construction de commandes avec la plateforme Eclipse

103Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

Restrictions : utiliser Expression Definitions

plugin.xml du projet CommandsExpressionsExamples

Définition d’un nouvel élément menuContributionavec 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)

Page 104: Construction de commandes avec la plateforme Eclipse

104Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 105: Construction de commandes avec la plateforme Eclipse

105Commands - M. Baron - Page

keul

keul

.blo

gspo

t.comRestrictions : 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

Page 106: Construction de commandes avec la plateforme Eclipse

106Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 107: Construction de commandes avec la plateforme Eclipse

107Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 108: Construction de commandes avec la plateforme Eclipse

108Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 109: Construction de commandes avec la plateforme Eclipse

109Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 110: Construction de commandes avec la plateforme Eclipse

110Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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, iterateest évalué à vrai

Tous les éléments doivent respecter le sous élément instanceof de iterate

Page 111: Construction de commandes avec la plateforme Eclipse

111Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 112: Construction de commandes avec la plateforme Eclipse

112Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 113: Construction de commandes avec la plateforme Eclipse

113Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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é

Page 114: Construction de commandes avec la plateforme Eclipse

114Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

Restrictions : élément systemTest

Exemple : Afficher une commande dans la barre d’outilsquand 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

Page 115: Construction de commandes avec la plateforme Eclipse

115Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

Restrictions : élément test

L’élément test permet de tester une valeur particulière d’une propriété sur un objet en cours

ExemplesA 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 Testerdécrit au travers d’une classe Java de type PropertyTesterL’é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

Page 116: Construction de commandes avec la plateforme Eclipse

116Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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é

Page 117: Construction de commandes avec la plateforme Eclipse

117Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

Restrictions : élément test

Property Tester prédéfinis …

Page 118: Construction de commandes avec la plateforme Eclipse

118Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

Restrictions : élément test

Property Tester prédéfinis … (suite)

Page 119: Construction de commandes avec la plateforme Eclipse

119Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

Restrictions : élément test

Exemple : Désactiver une commande dans la barre de menuquand 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

Page 120: Construction de commandes avec la plateforme Eclipse

120Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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 estorg.eclipse.ui.workbenchWindow.isPerspectiveOpen

Page 121: Construction de commandes avec la plateforme Eclipse

121Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 122: Construction de commandes avec la plateforme Eclipse

122Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 123: Construction de commandes avec la plateforme Eclipse

123Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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)

Page 124: Construction de commandes avec la plateforme Eclipse

124Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

Restrictions : élément and, not et or

Exemple : Afficher une commande dans la barre de menu sila 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

Page 125: Construction de commandes avec la plateforme Eclipse

125Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 126: Construction de commandes avec la plateforme Eclipse

126Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

Restrictions : définir ses propres variables d’évaluation

Précédemment nous avons utilisé deux variables (selectionet 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

Page 127: Construction de commandes avec la plateforme Eclipse

127Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

Restrictions : définir ses propres variables d’évaluation

Variable prédéfinies …

Page 128: Construction de commandes avec la plateforme Eclipse

128Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

Restrictions : définir ses propres variables d’évaluation

Variable prédéfinies … (suite)

Page 129: Construction de commandes avec la plateforme Eclipse

129Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 130: Construction de commandes avec la plateforme Eclipse

130Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 131: Construction de commandes avec la plateforme Eclipse

131Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 132: Construction de commandes avec la plateforme Eclipse

132Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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<String, Object> 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

Page 133: Construction de commandes avec la plateforme Eclipse

133Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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<String, String> getCurrentState() {Map<String, String> currentState = new HashMap<String, String>(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

Page 134: Construction de commandes avec la plateforme Eclipse

134Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 135: Construction de commandes avec la plateforme Eclipse

135Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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);

Page 136: Construction de commandes avec la plateforme Eclipse

136Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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 serviceISourceProviderService spc = (ISourceProviderService) PlatformUI.getWorkbench().getService(ISourceProviderService.class);// Get our source provider by querying by the variable namefinal 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

Page 137: Construction de commandes avec la plateforme Eclipse

137Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 138: Construction de commandes avec la plateforme Eclipse

138Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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 Testerpersonnalisé

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

Page 139: Construction de commandes avec la plateforme Eclipse

139Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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 handlerassocié à la commande est activé

Si la sélection sur le texte contient à la fois des lettres et des chiffres,

le handler est désactivé

Page 140: Construction de commandes avec la plateforme Eclipse

140Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 141: Construction de commandes avec la plateforme Eclipse

141Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 142: Construction de commandes avec la plateforme Eclipse

142Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 143: Construction de commandes avec la plateforme Eclipse

143Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

Restrictions : définir ses propres PropertyTester

plugin.xml du projet CommandsExpressionsCustomTestExamples

Ajout d’un élément propertyTesterCe 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

Page 144: Construction de commandes avec la plateforme Eclipse

144Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

Restrictions : définir ses propres PropertyTester

Exemple (suite) : vérifie si la sélection sur du texte contient uniquement des lettres ou des chiffrespublic 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

Page 145: Construction de commandes avec la plateforme Eclipse

145Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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 Testeravec ces deux propriétés

Page 146: Construction de commandes avec la plateforme Eclipse

146Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 147: Construction de commandes avec la plateforme Eclipse

147Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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 IMenuServicevoid 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);

Page 148: Construction de commandes avec la plateforme Eclipse

148Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 149: Construction de commandes avec la plateforme Eclipse

149Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 150: Construction de commandes avec la plateforme Eclipse

150Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 151: Construction de commandes avec la plateforme Eclipse

151Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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<EvaluationReference> 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

Page 152: Construction de commandes avec la plateforme Eclipse

152Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 153: Construction de commandes avec la plateforme Eclipse

153Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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é

Page 154: Construction de commandes avec la plateforme Eclipse

154Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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 »

Page 155: Construction de commandes avec la plateforme Eclipse

155Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 156: Construction de commandes avec la plateforme Eclipse

156Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 157: Construction de commandes avec la plateforme Eclipse

157Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 158: Construction de commandes avec la plateforme Eclipse

158Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 159: Construction de commandes avec la plateforme Eclipse

159Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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)

Page 160: Construction de commandes avec la plateforme Eclipse

160Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 161: Construction de commandes avec la plateforme Eclipse

161Commands - M. Baron - Page

keul

keul

.blo

gspo

t.comParamè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

Page 162: Construction de commandes avec la plateforme Eclipse

162Commands - M. Baron - Page

keul

keul

.blo

gspo

t.comParamè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 {

@Overridepublic 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

Page 163: Construction de commandes avec la plateforme Eclipse

163Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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)

Page 164: Construction de commandes avec la plateforme Eclipse

164Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

Paramètres : renseigner les valeurs autorisées

Le paramètre Open Dialog Values Parameteraccepte 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

Page 165: Construction de commandes avec la plateforme Eclipse

165Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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<String, String> getParameterValues() : valeurs autorisées

Exemplepublic class ParameterValues implements IParameterValues {

public Map<String, String> getParameterValues() {Map<String, String> params = new HashMap<String, String>();

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

Page 166: Construction de commandes avec la plateforme Eclipse

166Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 167: Construction de commandes avec la plateforme Eclipse

167Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

1Utiliser cette classe de type

IParameterValues définie par la plateforme Eclipse

2

Page 168: Construction de commandes avec la plateforme Eclipse

168Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 169: Construction de commandes avec la plateforme Eclipse

169Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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 surLa 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 disponiblesShift + Alt + F1 : pour l’espionnage des vues, du workbench, …

Shift + Alt + F2 : pour l’espionnage des menus et des commandes

Page 170: Construction de commandes avec la plateforme Eclipse

170Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 171: Construction de commandes avec la plateforme Eclipse

171Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 172: Construction de commandes avec la plateforme Eclipse

172Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 173: Construction de commandes avec la plateforme Eclipse

173Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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

Page 174: Construction de commandes avec la plateforme Eclipse

174Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

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)

Page 175: Construction de commandes avec la plateforme Eclipse

175Commands - M. Baron - Page

keul

keul

.blo

gspo

t.com

Réutilisation : Options de traçage

Activation les traces d’exécution des commandes (suite)

Identifiant de la commande

Classe implémentant le handler