Développement de clients
riches : Plateforme Eclipse
Mickaël BARON - 2009
mailto:baron.mickael@gmail.com ou mailto:baron@e...
2Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron
Creative Commons
Contrat Paternité
Partage des Conditions I...
3Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron
† Avant, il y avait les Actions …
† Construction par déclar...
4Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Déroulement du cours
Ceci est une alerte
Ceci est une astuc...
5Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Ressources …
† Des billets sur les généralités sur les comm...
6Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Ressources … (suite)
† Des articles sur les généralités sur...
7Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron
† Dans les parties Perspective, View et Editor nous avons
a...
8Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Introduction
† Les points d’extension concernant l’API Acti...
9Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Ancienne API Actions
† Depuis le début de ce support de cou...
10Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Ancienne API Actions
† La plateforme Eclipse fournit diffé...
11Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Ancienne API Actions
† Exemple : ajouter une action au men...
12Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Ancienne API Actions
† Exemple (suite) : ajouter une actio...
13Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Ancienne API Actions
† Exemple (suite) : ajouter une actio...
14Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Ancienne API Actions
† Exemple (suite) : ajouter une actio...
15Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Ancienne API Actions
† Exemple (suite) : ajouter une actio...
16Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Ancienne API Actions
† Exemple (suite) : ajouter une actio...
17Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron API Commands
† La nouvelle API Commands permet de construi...
18Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Construction par déclaration
† Une commande est déclarée p...
19Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Construction par déclaration
Onglet Extensions
plugin.xml ...
20Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Construction par déclaration
package eclipse.workbench.com...
21Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Associer une commande à un Handler
† Le point d’extension ...
22Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Associer une commande à un Handler
† L’association command...
23Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Associer une commande à un Handler
Onglet Extensions
plugi...
24Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Associer une commande à des images
† Dans le même ordre d’...
25Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Associer une commande à des images
† L’association command...
26Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Associer une commande à des images
† Définition du couple ...
27Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Construction par programmation
† Précédemment nous avons m...
28Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Construction par programmation
† L’interface ICommandServi...
29Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Construction par programmation
† Exemple : construire une ...
30Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Construction par programmation
† L’interface IHandlerServi...
31Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Construction par programmation
† Exemple (suite) : exécute...
32Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Construction par programmation
† Le Workbench fournit des ...
33Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Construction par programmation
† Exemple : écouter l’exécu...
34Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Commande dans le Workbench
† Pour l’instant nous savons co...
35Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Commande dans le Workbench
† L’ajout d’une commande au Wor...
36Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Commande dans le Workbench
† Création d’un élément de type...
37Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Commande dans le Workbench
† Modification de la valeur de ...
38Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Commande dans le Workbench
† La valeur de l’attribut locat...
39Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Commande dans le Workbench
† La plateforme fournit des ide...
40Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Commande dans le menu
† Pour ajouter une commande à un men...
41Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Commande dans le menu
† Exemple : ajoute une commande au m...
42Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Commande dans le menu
† Exemple (suite) : ajoute une comma...
43Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Commande dans le menu
† Exemple (suite) : ajoute une comma...
44Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Commande dans le menu
† Exemple : ajoute une commande dans...
45Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Commande dans le menu
† Exemple (suite) : ajoute une comma...
46Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Commande dans le menu
† Exemple (suite) : ajoute une comma...
47Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Commande dans le menu
† Exemple (suite) : ajoute une comma...
48Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Commande dans une barre d’outil
† Pour ajouter une command...
49Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Commande dans une barre d’outil
† Exemple : ajouter une co...
50Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Commande dans une barre d’outil
† Exemple (suite) : ajoute...
51Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Commande dans une barre d’outil
† Exemple (suite) : ajoute...
52Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Commande dans une barre d’outil
† Exemple (suite) : ajoute...
53Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Commande dans un menu localisé d’une vue
† Exemple : ajout...
54Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Commande dans un menu localisé d’une vue
† Exemple (suite)...
55Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Commande dans une barre d’outils de vue
† Exemple : ajoute...
56Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Commande dans une barre d’outils de vue
† Exemple (suite) ...
57Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Commande dans un menu contextuel de vue
† Pour ajouter une...
58Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Commande dans un menu contextuel de vue
† Exemple : ajoute...
59Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Commande dans un menu contextuel de vue
† Exemple (suite) ...
60Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Commande dans un menu contextuel de vue
† Exemple (suite) ...
61Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Commande dans un menu contextuel de vue
† Exemple (suite) ...
62Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Commande dans un menu contextuel de vue
† Exemple (suite) ...
63Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Commande dans un menu contextuel de vue
† Exemple : ajoute...
64Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Commande dans un menu contextuel de vue
† Exemple (suite) ...
65Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Commande dans un menu contextuel de vue
† Exemple : ajoute...
66Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Commande dans un menu contextuel de vue
† Exemple (suite) ...
67Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Aller plus loin avec menuContribution
† A partir d’un élém...
68Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Aller plus loin avec menuContribution : dynamic
† Exemple ...
69Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Aller plus loin avec menuContribution : dynamic
† Exemple ...
70Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Aller plus loin avec menuContribution : dynamic
† Exemple ...
71Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Aller plus loin avec menuContribution : control
† Exemple ...
72Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Aller plus loin avec menuContribution : control
† Exemple ...
73Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Aller plus loin avec menuContribution : control
† Exemple ...
74Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Raccourci clavier
† Possibilité d’exécuter une commande vi...
75Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Raccourci clavier
† Ajouter un extension basée sur le poin...
76Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Raccourci clavier
† Ajouter un élément key permettant de c...
77Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Raccourci clavier
† Construire un raccourci clavier actif ...
78Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Raccourci clavier
sequence définit la séquence de touches
...
79Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Raccourci clavier : sequence
† L’attribut sequence est uti...
80Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Raccourci clavier : sequence
† Différents exemples de séqu...
81Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Raccourci clavier : scheme
† Un scheme est un regroupement...
82Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Raccourci clavier : scheme
† Définir un scheme via le poin...
83Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Raccourci clavier : scheme
† Définir un scheme via le poin...
84Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Raccourci clavier : scheme
† Attribuer l’identifiant du sc...
85Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Raccourci clavier : scheme (création d’un product)
† Const...
86Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Raccourci clavier : scheme (création d’un product)
† Const...
87Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Raccourci clavier : scheme (création d’un product)
† Const...
88Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Raccourci clavier : scheme (création d’un product)
† Confi...
89Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Raccourci clavier : scheme (création d’un product)
† Confi...
90Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Raccourci clavier : scheme (création d’un product)
† Confi...
91Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Raccourci clavier : scheme (création d’un product)
† Défin...
92Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Raccourci clavier : scheme (création d’un product)
† Décla...
93Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Raccourci clavier : scheme (création d’un product)
† Décla...
94Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Raccourci clavier : scheme
† Exécuter l’application et rep...
95Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Restrictions : généralités
† L’API Commands permet d’appli...
96Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Restrictions : exemples
† Exemple : Afficher une commande ...
97Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Restrictions : exemples
† Exemple (suite) : Afficher une c...
98Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Restrictions : exemples
† Exemple : Afficher une commande ...
99Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Restrictions : exemples
† Exemple (suite) : Afficher une c...
100Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Restrictions : construire Expression Definitions
† Dans l...
101Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Restrictions : construire Expression Definitions
Point d’...
102Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Restrictions : construire Expression Definitions
plugin.x...
103Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Restrictions : utiliser Expression Definitions
plugin.xml...
104Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Restrictions : utiliser Expression Definitions
Lors de la...
105Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Restrictions : Core Expressions en détail
† Nous avons mo...
106Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Restrictions : élément count
† L’élément count est utilis...
107Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Restrictions : élément count
† Exemple : Afficher une com...
108Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Restrictions : élément iterate
† L’élément iterate permet...
109Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Restrictions : élément instanceof
† L’élément instanceof ...
110Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Restrictions : élément iterate et instanceof
† Exemple : ...
111Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Restrictions : élément iterate et instanceof
† Exemple (s...
112Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Restrictions : élément iterate et instanceof
† Exemple (s...
113Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Restrictions : élément systemTest
† L’élément systemTest ...
114Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Restrictions : élément systemTest
† Exemple : Afficher un...
115Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Restrictions : élément test
† L’élément test permet de te...
116Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Restrictions : élément test
† La valeur de l’attribut pro...
117Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Restrictions : élément test
† Property Tester prédéfinis …
118Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Restrictions : élément test
† Property Tester prédéfinis ...
119Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Restrictions : élément test
† Exemple : Désactiver une co...
120Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Restrictions : élément test
† Exemple (suite) : Désactive...
121Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Restrictions : élément test
† Exemple (suite) : Désactive...
122Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Restrictions : élément test
† Exemple (suite) : Désactive...
123Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Restrictions : élément and, not et or
† Les éléments and,...
124Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Restrictions : élément and, not et or
† Exemple : Affiche...
125Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Restrictions : élément and, not et or
† Exemple (suite) :...
126Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Restrictions : définir ses propres variables d’évaluation...
127Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Restrictions : définir ses propres variables d’évaluation...
128Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Restrictions : définir ses propres variables d’évaluation...
129Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Restrictions : définir ses propres variables d’évaluation...
130Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Restrictions : définir ses propres variables d’évaluation...
131Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Restrictions : définir ses propres variables d’évaluation...
132Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Restrictions : définir ses propres variables d’évaluation...
133Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Restrictions : définir ses propres variables d’évaluation...
134Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Restrictions : définir ses propres variables d’évaluation...
135Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Restrictions : définir ses propres variables d’évaluation...
136Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Restrictions : définir ses propres variables d’évaluation...
137Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Restrictions : définir ses propres variables d’évaluation...
138Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Restrictions : définir ses propres PropertyTester
† Précé...
139Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Restrictions : définir ses propres PropertyTester
† Exemp...
140Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Restrictions : définir ses propres PropertyTester
† La cr...
141Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Restrictions : définir ses propres PropertyTester
† L’ajo...
142Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Restrictions : définir ses propres PropertyTester
† La cl...
143Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Restrictions : définir ses propres PropertyTester
plugin....
144Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Restrictions : définir ses propres PropertyTester
† Exemp...
145Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Restrictions : définir ses propres PropertyTester
† Exemp...
146Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Restrictions par programmation
† Précédemment nous avons ...
147Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Restrictions par programmation : visibleWhen
† Pour rappe...
148Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Restrictions par programmation : visibleWhen
† Exemple : ...
149Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Restrictions par programmation : visibleWhen
† Exemple (s...
150Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Restrictions par programmation : visibleWhen
† Exemple (s...
151Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Restrictions par programmation : visibleWhen
† Exemple (s...
152Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Restrictions par programmation : enabledWhen
† Dans le ca...
153Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Restrictions par programmation : enabledWhen
† Exemple : ...
154Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Restrictions par programmation : enabledWhen
† Exemple (s...
155Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Restrictions par programmation : enabledWhen
† Exemple (s...
156Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Paramètres : généralités
† Actuellement lors du déclenche...
157Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Paramètres : ajouter des paramètres
† L’ajout des paramèt...
158Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Paramètres : ajouter des paramètres
† Exemple : afficher ...
159Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Paramètres : fournir des valeurs aux paramètres
† Les val...
160Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Paramètres : fournir des valeurs aux paramètres
† Exemple...
161Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Paramètres : traitement dans le handler
† Dans le code du...
162Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Paramètres : traitement dans le handler
† Exemple (suite)...
163Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Paramètres : renseigner les valeurs autorisées
† Il est é...
164Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Paramètres : renseigner les valeurs autorisées
Le paramèt...
165Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Paramètres : renseigner les valeurs autorisées
† L’attrib...
166Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Paramètres : renseigner les valeurs autorisées
† Possibil...
167Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Paramètres : renseigner les valeurs autorisées
† Suite : ...
168Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Paramètres : renseigner les valeurs autorisées
† Suite : ...
169Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Réutilisation : Plug-in Spy
† L’utilitaire Plug-in Spy pe...
170Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Réutilisation : Plug-in Spy
† Exemple : Espionner la vue ...
171Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Réutilisation : Plug-in Spy
† Exemple : Espionner un élém...
172Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Réutilisation : Options de traçage
† Lors de l’exécution ...
173Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Réutilisation : Options de traçage
Onglet Tracing
Sélecti...
174Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Réutilisation : Options de traçage
Activer
trace/commands...
175Commands - M. Baron - Page
keulkeul.blogspot.com@mickaelbaron Réutilisation : Options de traçage
† Activation les trace...
Prochain SlideShare
Chargement dans…5
×

Construction de commandes avec la plateforme Eclipse

6 053 vues

Publié le

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

Publié dans : Technologie, Sports
0 commentaire
2 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
6 053
Sur SlideShare
0
Issues des intégrations
0
Intégrations
803
Actions
Partages
0
Téléchargements
163
Commentaires
0
J’aime
2
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Construction de commandes avec la plateforme Eclipse

  1. 1. Développement de clients riches : Plateforme Eclipse Mickaël BARON - 2009 mailto:baron.mickael@gmail.com ou mailto:baron@ensma.fr @mickaelbaron Chapitre 3 : Conception de plug-ins Workbench : Commands
  2. 2. 2Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Creative Commons Contrat Paternité Partage des Conditions Initiales à l'Identique 2.0 France http://creativecommons.org/licenses/by-sa/2.0/fr Licence
  3. 3. 3Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron † Avant, il y avait les Actions … † Construction par déclaration et programmation † Eléments menuContribution par déclaration † Raccourcis clavier † Restrictions (visibleWhen, enabledWhen, activeWhen) † Paramétrer les commandes † Restrictions par programmation † Réutilisation Organisation du cours sur le Workbench : Commands Tous les exemples du cours sont disponibles directement à l’adresse mbaron.developpez.com/eclipse/commands
  4. 4. 4Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Déroulement du cours Ceci est une alerte Ceci est une astuce † Pédagogie du cours † Illustration avec de nombreux exemples qui sont disponibles à l’adresse 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] † …
  5. 5. 5Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Ressources … † Des billets sur les généralités sur les commandes † blog.eclipse-tips.com/2009/01/commands-part-1-actions-vs-commands.html † blog.eclipse-tips.com/2009/01/commands-part-2-selection-and.html † blog.eclipse-tips.com/2008/12/commands-part-3-parameters-for-commands.html † blog.eclipse-tips.com/2009/01/commands-part-4-misc-items.html † blog.eclipse-tips.com/2009/02/commands-part-5-authentication-in-rcp.html † blog.eclipse-tips.com/2009/03/commands-part-6-toggle-radio-menu.html † blog.eclipse-tips.com/2009/05/commands-part-7-adding-standard.html † blog.eclipse-tips.com/2009/02/customizing-about-dialog.html † blog.eclipse-tips.com/2009/10/associating-command-with-job.html † blog.eclipse-tips.com/2009/06/keyboard-accessibility-thru-command.html † bugs.eclipse.org/bugs/show_bug.cgi?id=223445 † hermanlintvelt.blogspot.com/2009/06/eclipse-rcp-commands-api-review-of-part.html † hermanlintvelt.blogspot.com/2009/05/eclipse-rcp-commands-api-part-one.html † hermanlintvelt.blogspot.com/2009/06/eclipse-rcp-commands-part-3-visiblewhen.html † konigsberg.blogspot.com/2008/06/screencast-using-property-testers-in.html † www.vogella.de/blog/?p=421 † richclientplatform.blogspot.com/2007/07/new-menu-contribution-extension.html † www.vimeo.com/1217595?pg=embed&sec=1217595
  6. 6. 6Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Ressources … (suite) † Des articles sur les généralités sur les commandes † wiki.eclipse.org/Platform_Command_Framework † wiki.eclipse.org/Menu_Contributions † wiki.eclipse.org/Menus_Extension_Mapping † wiki.eclipse.org/Command_Core_Expressions † www.eclipsecon.org/2008/?page=sub/&id=221 † www.vogella.de/articles/RichClientPlatform/article.html#commands † www.vogella.de/articles/EclipseCommands/article.html † www.vogella.de/articles/EclipsePlugIn/ar01s04.html † www.ibm.com/developerworks/library/os-eclipse-3.3menu/index.html † svn2.assembla.com/svn/eclipsecommands/trunk/EclipseCommands/contents/article.html † Des livres † Eclipse – Building Commercial-Quality Plug-ins, 2004 - ISBN : 0-321-22847-2 † Eclipse – Rich Client Platform, 2005 – ISBN : 0-321-33461-2 † Eclipse Plug-ins, 3rd Edition, 2008 – ISBN : 0-321-55346-2
  7. 7. 7Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron † Dans les parties Perspective, View et Editor nous avons abordé le concept d’actions permettant d’ajouter de nou- veaux éléments pour † un menu † une barre d’outils † un menu contextuel † Workbench fournit deux APIs pour ajouter des éléments † Actions (celle utilisée dans les précédents transparents) † Command (apparue depuis Eclipse 3.3) † L’API Actions est plus ancienne et doit être remplacée par l’API Commands Introduction
  8. 8. 8Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Introduction † Les points d’extension concernant l’API Actions sont toujours utilisables † Du côté des vues, des éditeurs et des perspectives il existe toujours cette relation avec les actions † Pour vos prochains développements, préférer l’utilisation de la nouvelle API Commands † Dans la suite nous présentons rapidement l’API Actions en insistant sur ces désavantages puis nous nous orienterons vers l’API Commands
  9. 9. 9Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Ancienne API Actions † Depuis le début de ce support de cours, nous avons abordé rapidement la notion d’Actions via l’interface IAction † La description de cette interface met en avant l’absence de flexibilité qui a conduit à définir la nouvelle API Command † Les aspects liés à la présentation (setText, setEnabled, …) sont fortement couplés avec le traitement de l’action (run) † Par conséquent il est difficile de fournir plusieurs textes, images, … raccourcis clavier pour une même action public interface IAction { void setText(String text); void setImageDescriptor(ImageDescriptor image); void setAccelerator(int keycode); void setEnabled(boolean enabled); void run(); // ... more setters and getters } Caractéristiques liées à la présentation de l’action Caractéristique liée au traitement de l’action
  10. 10. 10Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Ancienne API Actions † La plateforme Eclipse fournit différents points d’extension permettant d’ajouter des actions à différents éléments du Workbench † org.eclipse.ui.actionSets : ajouter des actions au menu et à la barre d’outils d’une application Eclipse † org.eclipse.ui.editorActions : ajouter des actions au menu et à la barre d’outils d’une application Eclipse pour un type d’éditeur donné † org.eclipse.ui.actionSetPartAssociations : permet d’associer une action à un ensemble de Parts (View et Editor) † org.eclipse.ui.viewActions : ajouter des actions au menu et à la barre d’outils d’une vue † org.eclipse.ui.popupMenus : ajouter des actions à un menu contextuel † Nous montrons dans la suite un exemple exploitant le point d’extension org.eclipse.ui.actionSets
  11. 11. 11Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Ancienne API Actions † Exemple : ajouter une action au menu et à la barre d’outils d’une application Eclipse avec l’API Actions Ajout d’une action au menu Ajout d’une action à la barre d’outils Projet ActionsExamples
  12. 12. 12Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Ancienne API Actions † Exemple (suite) : ajouter une action au menu et à la barre d’outils d’une application Eclipse avec l’API Actions Création d’extension à partir du point d’extension org.eclipse.ui.actionSets Template pour créer rapidement cette extension
  13. 13. 13Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Ancienne API Actions † Exemple (suite) : ajouter une action au menu et à la barre d’outils d’une application Eclipse avec l’API Actions Création d’un élément actionSet Onglet Extensions plugin.xml du projet ActionsExamples
  14. 14. 14Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Ancienne API Actions † Exemple (suite) : ajouter une action au menu et à la barre d’outils d’une application Eclipse avec l’API Actions Création d’un élément menu Onglet Extensions plugin.xml du projet ActionsExamples Texte affiché dans le menu de l’application Possibilité d’ajouter le nouveau menu à un menu existant
  15. 15. 15Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Ancienne API Actions † Exemple (suite) : ajouter une action au menu et à la barre d’outils d’une application Eclipse avec l’API Actions Création d’un élément action Onglet Extensions plugin.xml du projet ActionsExamples
  16. 16. 16Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Ancienne API Actions † Exemple (suite) : ajouter une action au menu et à la barre d’outils d’une application Eclipse avec l’API Actions Classe de type IWorkbenchWindowActionDelegage codant le traitement de l’action Précise où doit être affiché l’action dans la barre de menu Précise où doit être affiché l’action dans la barre d’outils
  17. 17. 17Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron API Commands † La nouvelle API Commands permet de construire une Command, désignée commande dans la suite de ce cours † Le principal avantage d’une commande est la séparation stricte de l’IHM du comportement † Pour utiliser une commande, vous avez besoin † Donner une description déclarative de la commande † Définir le comportement via un Handler (activation, traitement, …) † Préciser à quel endroit de l’IHM la commande s’applique (menu, barre d’outils de l’application ou d’une vue, …) † Si vous commencez de nouveaux développements préférez l’utilisation de cette nouvelle API Commands
  18. 18. 18Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Construction par déclaration † Une commande est déclarée par l’intermédiaire du point d’extension org.eclipse.ui.commands Point d’extension org.eclipse.ui.commands Un template « Hello, World » pour définir une commande
  19. 19. 19Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Construction par déclaration Onglet Extensions plugin.xml du projet CommandsExamples † Définition des attributs d’une commande Un handler par défaut peut être défini, dans la suite on montrera qu’il est possible d’extraire cette relation
  20. 20. 20Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Construction par déclaration package eclipse.workbench.commandsexamples.handler; public class FirstHandler extends AbstractHandler { @Override public Object execute(ExecutionEvent event) throws ExecutionException { MessageDialog.openInformation(Display.getDefault().getActiveShell(), "CommandsExamples Plug-in","Hello, Eclipse world with First Handler"); return ""; } } † Le comportement de la commande doit être défini par un objet de type IHandler † La classe AbstractHandler fournit une implémentation des différentes méthodes † Object execute(ExecutionEvent event) : traitement réalisé quand la commande est déclenchée Classe FirstHandler.java du projet CommandsExamples
  21. 21. 21Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Associer une commande à un Handler † Le point d’extension org.eclipse.ui.handlers permet de définir explicitement un Handler à une commande † L’Handler n’est donc plus défini au niveau de la commande † L’intérêt est de pouvoir spécifier des contraintes différentes pour une même classe de comportement (objet IHandler) † Différentes contraintes † activeWhen : comportement actif ou pas † enabledWhen : comportement activé ou pas Contraintes seront étudiées à la fin de cette partie
  22. 22. 22Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Associer une commande à un Handler † L’association commande / handler est déclarée par le point d’extension org.eclipse.ui.handlers Point d’extension org.eclipse.ui.handlers
  23. 23. 23Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Associer une commande à un Handler Onglet Extensions plugin.xml du projet CommandsExamples † Définition du couple commande / handler Identifiant de la commande Classe de type IHandler correspondant au traitement de la commande
  24. 24. 24Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Associer une commande à des images † Dans le même ordre d’idée, il est possible de découpler dans la définition de la commande les différentes images utilisées † Le point d’extension org.eclipse.ui.commandImages permet de définir pour une commande les images à afficher † l’image par défaut † l’image utilisée lorsque la commande est désactivée † l’image utilisée lorsque le curseur de la souris est au dessus de la représentation graphique de la commande † style : dans quel contexte ces images sont utilisées : barre de menu ou barre d’outils. Si aucune valeur, cela concerne la barre de menu, si toolbar cela concerne la barre d’outils
  25. 25. 25Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Associer une commande à des images † L’association commande / image est déclarée par le point d’extension org.eclipse.ui.commandImages Point d’extension org.eclipse.ui.commandImages
  26. 26. 26Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Associer une commande à des images † Définition du couple commande / images Onglet Extensions plugin.xml du projet CommandsExamples Identifiant de la commande Si aucune valeur, cela concerne la barre de menu, si la valeur vaut toolbar cela concerne la barre d’outils Les différentes images utilisées
  27. 27. 27Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Construction par programmation † Précédemment nous avons montré comment créer déclara- tivement des commandes et des comportements (Handler) † La construction de commandes et de handlers de manière programmatique est obtenue via l’utilisation des interfaces † ICommandService : pour créer des commandes † IHandlerService : pour créer des handlers † L’accès aux instances des deux interfaces IHandlerService et ICommandService est obtenu via le Workbench † La destruction des commandes et handler sont à la charge du programmeur ICommandService cs = (ICommandService)PlatformUI.getWorkbench().getService(ICommandService.class); IHandlerService hs = (IHandlerService)PlatformUI.getWorkbench().getService(IHandlerService.class);
  28. 28. 28Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Construction par programmation † L’interface ICommandService fournit les principaux services † Category getCategory(String catId) : récupère la catégorie catId, si non existante, elle est créée † Command getCommand(String comId) : récupère la commande comId, si non existante, elle est créée † Category[] getDefinedCategories() : récupère la liste complète des catégories du Workbench † void addExecutionListener(IExecutionListener iel) : ajoute un écouteur lors de l’exécution de la commande † La classe Command décrit une commande † void define(String name, String description, Category cat) : précise le nom de la commande, la description et la catégorie à laquelle la commande appartient (cat ne peut être null)
  29. 29. 29Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Construction par programmation † Exemple : construire une commande public class ViewCommandPart extends ViewPart { public void createPartControl(Composite parent) { ICommandService cs = (ICommandService)PlatformUI.getWorkbench().getService(ICommandService.class); Category category = cs.getCategory("eclipse.workbench.commandsexample.commandscategory"); Command thirdCommand = cs.getCommand("eclipse.workbench.commandsexample.thirdcommand"); thirdCommand.define("Third Command", "", category); // Suite concernant la construction du Handler } Classe ViewCommandPart.java du projet CommandsExamples Construction de la commande thirdcommand Association de la commande à la catégorie Récupération du service de création de commandes Construction de la catégorie
  30. 30. 30Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Construction par programmation † L’interface IHandlerService fournit les principales méthodes suivantes † IHandlerActivation activateHandler(String commandId, IHandler handler) : associe une commande à un handler † Object executeCommand(String commandId, Event event) throws ExecutionException … : exécute un handler à partir de l’identifiant de la commande † Pour rappel, la classe IHandler a été étudiée précédemment, la classe AbstractHandler fournit une abstraction des principales méthodes
  31. 31. 31Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Construction par programmation † Exemple (suite) : exécuter une commande public class ViewCommandPart extends ViewPart { public void createPartControl(Composite parent) { // Suite du précédent transparent IHandlerService hs = (IHandlerService) PlatformUI.getWorkbench().getService(IHandlerService.class); IHandler handler = new AbstractHandler() { public Object execute(ExecutionEvent event) throws ExecutionException { MessageDialog.openInformation(Display.getDefault().getActiveShell(), "CommandsExamples Plug-in", "Hello, Eclipse world with Third Handler"); return null; } }; hs.activateHandler("eclipse.workbench.commandsexample.thirdcommand", handler); Button callCommand = new Button(parent, SWT.PUSH); callCommand.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { try { IHandlerService hs = (IHandlerService)PlatformUI.getWorkbench() .getService(IHandlerService.class); hs.executeCommand("eclipse.workbench.commandsexample.thirdcommand", null); } catch (Exception e1) { e1.printStackTrace(); } } }); callCommand.setText("Call Third Command"); } } Classe ViewCommandPart.java du projet CommandsExamples Récupération du service de handler Associer une commande avec un handler Exécuter un handler à partir de l’identifiant d’une commande
  32. 32. 32Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Construction par programmation † Le Workbench fournit des écouteurs permettant de notifier le client lors de l’exécution d’une ou plusieurs commandes † ICommandService#addExecutionListener(IExecutionListener el) : ajout d’un écouteur sur l’ensemble des exécutions de commandes † Command#addExecutionListener(IExecutionListener el) : ajout d’un écouteur sur une exécution de commande † IExecutionListener fournit les services suivants † void postExecuteFailure(String comId, ExecutionException ex) : déclenchée si l’exécution d’une commande a échoué † void postExecuteSucess(String comId, Object returnValue) : déclenchée si l’exécution d’une commande a réussi † void preExecute(String comId, ExecutionEvent event) : déclenchée pour avertir qu’une commande va être exécutée
  33. 33. 33Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Construction par programmation † Exemple : écouter l’exécution d’une commande public class ViewCommandPart extends ViewPart { public void createPartControl(Composite parent) { // Suite du précédent transparent ICommandService cs = (ICommandService) PlatformUI.getWorkbench().getService(ICommandService.class); cs.addExecutionListener(new IExecutionListener() { public void postExecuteSuccess(String commandId, Object returnValue) { System.out.println(".postExecuteSuccess() : " + commandId); } public void preExecute(String commandId, ExecutionEvent event) { System.out.println(".preExecute()"); } public void postExecuteFailure(String commandId, ExecutionException exception) { System.out.println(".postExecuteFailure()"); } ... }); thirdCommand.addExecutionListener(new IExecutionListener() { public void notHandled(String commandId, NotHandledException exception) { System.out.println(".notHandled()"); } public void postExecuteSuccess(String commandId, Object returnValue) { System.out.println(".postExecuteSuccess()"); } public void preExecute(String commandId, ExecutionEvent event) { System.out.println(".preExecute()"); } ... }); } } Classe ViewCommandPart.java du projet CommandsExamples Ecouteur sur la totalité des exécutions de commande Ecouteur sur l’exécution d’une commande
  34. 34. 34Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Commande dans le Workbench † Pour l’instant nous savons construire une commande et un handler de manière déclarative et programmatique † Nous montrons dans la suite comment ajouter une com- mande à l’interface graphique du Workbench † Pour rappel les éléments graphiques qui peuvent être étendus sont les suivants † Menu général de l’application † Barre d’outil de l’application † Barre d’outil, menu localisé et menu contextuel d’une vue donnée
  35. 35. 35Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Commande dans le Workbench † L’ajout d’une commande au Workbench est obtenu par le point d’extension org.eclipse.ui.menus Point d’extension org.eclipse.ui.menus
  36. 36. 36Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Commande dans le Workbench † Création d’un élément de type menuContribution permettant de préciser où sera placée la commande dans le Workbench (locationURI) Ajout d’un élément menuContribution
  37. 37. 37Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Commande dans le Workbench † Modification de la valeur de l’attribut locationURI Dans la suite nous donnons des explications sur la construction de l’attribut locationURI L’attribut locationURI permet d’indiquer où sera placée la commande
  38. 38. 38Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Commande dans le Workbench † La valeur de l’attribut locationURI est de la forme suivante † scheme : le type d’élément graphique à étendre. Les valeurs autorisées sont : menu, toolbar et popup † id : identifiant du menu, barre d’outil, menu contextuel ou vue † placement : les contraintes de placement de la commande par rapport aux autres éléments du scheme. Deux contraintes sont autorisées : before=<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 Quit situé dans le menu File
  39. 39. 39Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Commande dans le Workbench † La plateforme fournit des identifiants sur les éléments standards † org.eclipse.ui.main.menu : identifiant de la barre de menu d’une application Eclipse † org.eclipse.ui.main.toolbar : identifiant de la barre d’outils d’une application Eclipse † org.eclipse.ui.popup.any : identifiant de tous les menus contextuels † Exemples † menu:org.eclipse.ui.main.menu : ajout un élément au menu de l’application Eclipse † toolbar:viewcommandId : ajout un élément à la barre d’outil de la vue identifiée par viewcommandId
  40. 40. 40Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Commande dans le menu † Pour ajouter une commande à un menu la valeur du scheme de l’attribut locationURI doit être à menu † A partir d’un élément menuContribution, plusieurs types d’éléments peuvent être ajoutés à un menu existant † Une commande (élément command) † Un sous menu (élément menu) † Un séparateur (élément separator) † Un sous menu dynamique (élément dynamic) † Dans la suite des transparents nous présentons la mise en œuvre de certains de ces éléments
  41. 41. 41Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Commande dans le menu † Exemple : ajoute une commande au menu principal d’une application Eclipse Une commande est ajoutée directement à la barre de menu de l’application Eclipse Lors de l’utilisation de la commande une boîte de dialogue est affichée
  42. 42. 42Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Commande dans le menu † Exemple (suite) : ajoute une commande au menu principal d’une application Eclipse plugin.xml du projet CommandsExamples Ajout d’une commande au niveau du menu principal de l’application Eclipse
  43. 43. 43Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Commande dans le menu † Exemple (suite) : ajoute une commande au menu principal d’une application Eclipse plugin.xml du projet CommandsExamples Ajout d’un élément command Réutilisation d’une commande définie précédemment L’élément command permet de préciser les caractéristiques graphiques de la commande (texte, image, …)
  44. 44. 44Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Commande dans le menu † Exemple : ajoute une commande dans un sous menu du menu principal d’une application Eclipse Un menu a été ajouté à la barre de menu principale de l’application Eclipse Lors de l’utilisation d’une commande du menu « Commands Example » une boîte de dialogue est affichée
  45. 45. 45Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Commande dans le menu † Exemple (suite) : ajoute une commande dans un sous menu du menu principal d’une application Eclipse plugin.xml du projet CommandsExamples Ajout d’un menu au niveau du menu principal de l’application Eclipse
  46. 46. 46Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Commande dans le menu † Exemple (suite) : ajoute une commande dans un sous menu du menu principal d’une application Eclipse plugin.xml du projet CommandsExamples Ajout d’un élément menu Ajout de deux éléments command à l’élément menu Caractéristiques graphiques de l’élément menu
  47. 47. 47Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Commande dans le menu † Exemple (suite) : ajoute une commande dans un sous menu du menu principal d’une application Eclipse plugin.xml du projet CommandsExamples
  48. 48. 48Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Commande dans une barre d’outil † Pour ajouter une commande à une barre d’outils la valeur du scheme de l’attribut locationURI doit être à toolbar † A partir d’un élément menuContribution, plusieurs types d’éléments peuvent être ajoutés à une barre d’outils † Un séparateur (élément separator) † Une barre d’outils dynamique (élément dynamic) † Un composant graphique (élément control) † Dans la suite des transparents nous présentons la mise en œuvre de certains de ces éléments
  49. 49. 49Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Commande dans une barre d’outil † Exemple : ajouter une commande dans la barre d’outil principale d’une application Eclipse Une commande est ajoutée directement à la barre d’outils principale de l’application Eclipse Lors de l’utilisation de la commande une boîte de dialogue est affichée
  50. 50. 50Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Commande dans une barre d’outil † Exemple (suite) : ajouter une commande dans la barre d’outil principale d’une application Eclipse plugin.xml du projet CommandsExamples Ajout d’une commande au niveau de la barre d’outils de l’application Eclipse
  51. 51. 51Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Commande dans une barre d’outil † Exemple (suite) : ajouter une commande dans la barre d’outil principale d’une application Eclipse plugin.xml du projet CommandsExamples Un élément toolbar est ajouté à l’élément menuContribution. Une nouvelle barre d’outils est ajoutée à la barre d’outils principale Identifiant de la nouvelle barre d’outils contenant l’élément command. Possibilité d’étendre directement cette nouvelle barre d’outils
  52. 52. 52Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Commande dans une barre d’outil † Exemple (suite) : ajouter une commande dans la barre d’outil principale d’une application Eclipse plugin.xml du projet CommandsExamples Réutilisation d’une commande définie précédemment L’élément command permet de préciser les caractéristiques graphiques de la commande (texte, image, …) Ajout d’un élément command à la nouvelle barre d’outils
  53. 53. 53Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Commande dans un menu localisé d’une vue † Exemple : ajouter une commande dans le menu localisé d’une vue Vue …commandsexample.views.viewcommandid du projet CommandsExamples Menu localisé de la vue contenant une commande
  54. 54. 54Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Commande dans un menu localisé d’une vue † Exemple (suite) : ajouter une commande dans le menu localisé d’une vue plugin.xml du projet CommandsExamples Scheme vaut menu et id pointe sur l’identifiant de la vue La création de l’élément command est identique aux précédents transparents
  55. 55. 55Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Commande dans une barre d’outils de vue † Exemple : ajouter une commande dans la barre d’outils d’une vue Menu localisé de la vue contenant une commande Vue …commandsexample.views.viewcommandid du projet CommandsExamples
  56. 56. 56Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Commande dans une barre d’outils de vue † Exemple (suite) : ajouter une commande dans la barre d’outils d’une vue plugin.xml du projet CommandsExamples Scheme vaut toolbar et id pointe sur l’identifiant de la vue La création de l’élément command est identique aux précédents transparents
  57. 57. 57Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Commande dans un menu contextuel de vue † Pour ajouter une commande à un menu contextuel d’une vue la valeur du scheme de l’attribut locationURI doit être à popup et l’id doit pointer sur l’identifiant de la vue † A partir d’un élément menuContribution, plusieurs types d’éléments peuvent être ajoutés à un menu contextuel † Une commande (élément command) † Un sous menu (élément menu) † Un séparateur (élément separator) † Un sous menu dynamique (élément dynamic) † Il s’agit des mêmes éléments que pour l’enrichissement d’une barre de menu (générale ou localisée)
  58. 58. 58Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Commande dans un menu contextuel de vue † Exemple : ajouter une commande dans le menu contextuel d’une vue Vue …commandsexample.views.popupviewcommandid du projet CommandsExamples Menu contextuel de la vue contenant plusieurs commandes
  59. 59. 59Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Commande dans un menu contextuel de vue † Exemple (suite) : ajouter une commande dans le menu contextuel d’une vue public class PopupViewPart extends ViewPart { private TableViewer viewer; public void createPartControl(Composite parent) { parent.setLayout(new GridLayout(1, false)); GridData myGridData = new GridData(GridData.FILL_BOTH); viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL); viewer.setContentProvider(new ViewContentProvider()); viewer.setLabelProvider(new ViewLabelProvider()); viewer.setInput(this.getViewSite()); viewer.getControl().setLayoutData(myGridData); this.getSite().setSelectionProvider(viewer); createContextMenu(); } ... // Suite dans le prochain transparent } PopupViewPart.java du projet CommandsExamples Construction programmatique du contenu du menu contextuel
  60. 60. 60Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Commande dans un menu contextuel de vue † Exemple (suite) : ajouter une commande dans le menu contextuel d’une vue public class PopupViewPart extends ViewPart { // Suite du précédent transparent private void createContextMenu() { final Action action1 = new Action("Action 1") { public void run() { System.out.println("Action 1 Performed"); } }; CommandContributionItemParameter commandParameter = new CommandContributionItemParameter( PlatformUI.getWorkbench(), "contributionitem", "eclipse.workbench.commandsexample.firstcommand", CommandContributionItem.STYLE_PUSH); final IContributionItem ref = new CommandContributionItem(commandParameter); MenuManager menuMgr = new MenuManager(); menuMgr.setRemoveAllWhenShown(true); menuMgr.addMenuListener(new IMenuListener() { public void menuAboutToShow(IMenuManager mgr) { mgr.add(action1); mgr.add(ref); } }); // Create menu. Menu menu = menuMgr.createContextMenu(viewer.getControl()); viewer.getControl().setMenu(menu); // Register menu for extension. getSite().registerContextMenu(menuMgr, viewer); } } PopupViewPart.java du projet CommandsExamples Construction d’une action via l’API JFace (voir cours Perspectives et Views) Construction d’une commande via IContributionItem (voir dans les prochains transparents) Déclare le menu contextuel dans le Workbench, obligatoire pour l’enrichir via les extensions
  61. 61. 61Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Commande dans un menu contextuel de vue † Exemple (suite) : ajouter une commande dans le menu contextuel d’une vue Scheme vaut popup et id pointe sur l’identifiant de la vue La création de l’élément command est identique aux précédents transparents plugin.xml du projet CommandsExamples
  62. 62. 62Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Commande dans un menu contextuel de vue † Exemple (suite) : ajouter une commande dans le menu contextuel d’une vue public class ShowSelectedHandler extends AbstractHandler { @SuppressWarnings("unchecked") public Object execute(ExecutionEvent event) throws ExecutionException { ISelection selection = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getSelection(); if (selection != null & selection instanceof IStructuredSelection) { IStructuredSelection structuredSelection = (IStructuredSelection) selection; for (Iterator<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
  63. 63. 63Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Commande dans un menu contextuel de vue † Exemple : ajouter une commande dans le menu contextuel d’une vue avec une contrainte de positionnement Vue …commandsexample.views.popupviewcommandid du projet CommandsExamples Cette commande doit être placée avant First Command identifiée par contributionitem (définie programmatiquement)
  64. 64. 64Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Commande dans un menu contextuel de vue † Exemple (suite) : ajouter une commande dans le menu contextuel d’une vue avec une contrainte de positionnement plugin.xml du projet CommandsExamples Utilisation de la contrainte de placement before=contributionitem pour placer avant la commande First Command
  65. 65. 65Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Commande dans un menu contextuel de vue † Exemple : ajouter une commande dans tous les menus contextuels des vues Une commande est ajoutée à tous les menus contextuels de vues
  66. 66. 66Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Commande dans un menu contextuel de vue † Exemple (suite) : ajouter une commande dans tous les menus contextuels des vues plugin.xml du projet CommandsExamples Scheme vaut popup et id pointe sur l’identifiant org.eclipse.ui.popup.any
  67. 67. 67Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Aller plus loin avec menuContribution † A partir d’un élément menuContribution, il est également possible d’ajouter deux types d’éléments † Dynamic † Construction dynamique d’éléments d’un menu ou d’une barre d’outils † Nécessite le développement par programmation des éléments à afficher † A utiliser si le nombre d’éléments à afficher dans un menu ou une barre d’outils n’est pas connu à l’avance † control † Création personnalisée de l’élément graphique à afficher (non disponible pour les éléments de menus) † A utiliser quand il est intéressant d’afficher autre chose qu’un label
  68. 68. 68Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Aller plus loin avec menuContribution : dynamic † Exemple : ajout dynamique d’éléments dans un menu Projet CommandsExamples Les deux commandes sont ajoutées dans le sous menu Dynamic Example
  69. 69. 69Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Aller plus loin avec menuContribution : dynamic † Exemple (suite) : ajout dynamique d’éléments dans un menu plugin.xml du projet CommandsExamples Classe de type IContributionItem Création d’un élément dynamic
  70. 70. 70Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Aller plus loin avec menuContribution : dynamic † Exemple (suite) : ajout dynamique d’éléments dans un menu public class ContributionItemExample extends CompoundContributionItem { protected IContributionItem[] getContributionItems() { IContributionItem[] tab = new IContributionItem[2]; CommandContributionItemParameter commandParameter = new CommandContributionItemParameter( PlatformUI.getWorkbench(), "contributionfirstitem", "eclipse.workbench.commandsexample.firstcommand", CommandContributionItem.STYLE_PUSH); IContributionItem ref = new CommandContributionItem(commandParameter); tab[0] = ref; commandParameter = new CommandContributionItemParameter( PlatformUI.getWorkbench(), "contributionseconditem", "eclipse.workbench.commandsexample.secondcommand", CommandContributionItem.STYLE_PUSH); ref = new CommandContributionItem(commandParameter); tab[1] = ref; return tab; } } ContributionItemExample.java du projet CommandsExamples A utiliser comme implémentation abstraite de IContributionItem Utilisation de commandes définies précédemment
  71. 71. 71Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Aller plus loin avec menuContribution : control † Exemple : création d’un élément personnalisé dans une barre d’outils Projet CommandsExamples Création d’un élément dans la barre d’outils à partir de l’API SWT
  72. 72. 72Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Aller plus loin avec menuContribution : control † Exemple (suite) : création d’un élément personnalisé dans une barre d’outils plugin.xml du projet CommandsExamples Création d’un élément control Classe de type WorkbenchWindowControlContribution
  73. 73. 73Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Aller plus loin avec menuContribution : control † Exemple (suite) : création d’un élément personnalisé dans une barre d’outils public class WorkbenchWindowCustomControlContribution extends WorkbenchWindowControlContribution { protected Control createControl(Composite parent) { Composite composite = new Composite(parent, SWT.NONE); GridLayout layout = new GridLayout(2, false); layout.marginHeight = 0; layout.marginWidth = 0; composite.setLayout(layout); composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); final Label label = new Label(composite, SWT.NONE); label.setText("Click"); Button button = new Button(composite, SWT.PUSH); button.setText("Call"); button.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { IHandlerService hs = (IHandlerService)PlatformUI.getWorkbench().getService(IHandlerService.class); try { hs.executeCommand("eclipse.workbench.commandsexample.firstcommand", null); } catch (Exception e1) { e1.printStackTrace(); } } }); return composite; } } WorkbenchWindowCustomControlContribution.java du projet CommandsExamples Composants SWT Déclenchement d’une commande
  74. 74. 74Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Raccourci clavier † Possibilité d’exécuter une commande via un raccourci clavier en utilisant le point d’extension org.eclipse.ui.bindings † A noter que le point d’extension org.eclipse.ui.commands permet de construire des raccourcis clavier mais ces éléments sont DEPRECATED et ne doivent pas être utilisés † Dans la suite nous montrons comment construire des raccourcis claviers (key) et des regroupements de raccourcis claviers (scheme)
  75. 75. 75Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Raccourci clavier † Ajouter un extension basée sur le point d’extension org.eclipse.ui.bindings Création d’extension à partir du point d’extension org.eclipse.ui.bindings
  76. 76. 76Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Raccourci clavier † Ajouter un élément key permettant de construire un raccourci clavier plugin.xml du projet CommandsKeyBindingRCPExamples
  77. 77. 77Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Raccourci clavier † Construire un raccourci clavier actif quand la touche F11 est déclenchée plugin.xml du projet CommandsKeyBindingRCPExamples
  78. 78. 78Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Raccourci clavier sequence définit la séquence de touches du clavier qui active la commande schemeId définit le regroupement de raccourcis clavier. Par défaut org.eclipse.ui.defaultAcceleratorConfiguration commandId définit l’identifiant de la commande à appeler lors de l’utilisation de la touche F11 platform définit le système sur lequel le raccourci est défini (win32, gtk, motif, carbon, photon) † Paramétrer les attributs d’un élément key
  79. 79. 79Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Raccourci clavier : sequence † L’attribut sequence est utilisée pour définir une séquence de raccourcis clavier † Plusieurs raccourcis clavier peuvent être spécifiés dans une séquence séparés par un espace † Chaque raccourcis clavier se compose d’une ou plusieurs touches maintenues enfoncées et sont séparées par + † Les modifiers (touches spécifiques) reconnus sont : M1, M2, M3, M4, ALT, COMMAND, CTRL et SHIFT † M1 : COMMAND sur MAC OS X et CTRL sur les autres plateformes † M2 : SHIFT † M3 : OPTION sur MAC OS X et ALT sur les autres plateformes † M4 : CTRL sur MAC OS X et indéfinis pour les autres plateformes † Préférez l’utilisation de M1, M2, M3 et M4 pour être indé- pendant de la plateforme cible
  80. 80. 80Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Raccourci clavier : sequence † Différents exemples de séquence † CTRL+L : maintenir enfoncées les touches CTRL et L † M1+L : maintenir enfoncées les touches COMMAND et L (MAC OS X) ou CTRL et L sur les autres systèmes † CTRL+L F11 F12 : maintenir enfoncées les touches CTRL et L puis la touche F11 et enfin la touche F12 Quand plusieurs raccourcis claviers se succèdent une fenêtre flottante contextualise l’interaction en cours
  81. 81. 81Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Raccourci clavier : scheme † Un scheme est un regroupement de raccourcis clavier † org.eclipse.ui.defaultAcceleratorConfiguration est l’identifiant par défaut de la plateforme Eclipse † Pour construire et utiliser son propre scheme vous devrez † Définir un scheme via le point d’extension org.eclipse.ui.bindings † Attribuer l’identifiant du scheme à l’attribut schemeId de l’élément key † Posséder un product (extrait du cours sur Eclipse RCP) † Définir un fichier de configuration et positionner l’identifiant du scheme dans une valeur de propriétés
  82. 82. 82Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Raccourci clavier : scheme † Définir un scheme via le point d’ext. org.eclipse.ui.bindings plugin.xml du projet CommandsKeyBindingRCPExamples Construction d’un élément scheme permettant de regroupant de raccourcis clavier
  83. 83. 83Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Raccourci clavier : scheme † Définir un scheme via le point d’ext. org.eclipse.ui.bindings Définition de l’identifiant du scheme plugin.xml du projet CommandsKeyBindingRCPExamples Précise le nom du scheme Relation d’héritage avec un scheme déjà créé
  84. 84. 84Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Raccourci clavier : scheme † Attribuer l’identifiant du scheme à l’attribut schemeId de key plugin.xml du projet CommandsKeyBindingRCPExamples Définition de la séquence du raccourci clavier Préciser l’identifiant du scheme précédemment créé L’identifiant de la commande qui sera appelée
  85. 85. 85Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Raccourci clavier : scheme (création d’un product) † Construction d’une application Eclipse RCP Une présentation détaillée sur la manière de construire un product sera donnée dans la partie Eclipse RCP Construction d’un nouveau projet Plug-in (File -> New -> Project -> Plug-in Project)
  86. 86. 86Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Raccourci clavier : scheme (création d’un product) † Construction d’une application Eclipse RCP (suite) S’assurer que l’option Rich Client Application est active Différents paramétrages identiques à ceux utilisés lors de la création d’un plug-in
  87. 87. 87Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Raccourci clavier : scheme (création d’un product) † Construire le fichier de configuration du product Choisir le projet où sera créé le product Définir le nom du product Créer le product à partir d’une configuration allégée Construction d’un nouveau projet Plug-in (File -> New -> Other … -> Product Configuration)
  88. 88. 88Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Raccourci clavier : scheme (création d’un product) † Configuration du fichier de configuration du product Commandskeybindingrcpexamples.product du projet CommandsKeyBindingRCPExamples Nécessite la création de l’identifiant du product
  89. 89. 89Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Raccourci clavier : scheme (création d’un product) † Configuration du fichier de configuration du product (suite) Identifiant de l’application sur laquelle le product est associé Projet où l’identifiant du product sera créé Identifiant du product
  90. 90. 90Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Raccourci clavier : scheme (création d’un product) † Configuration du fichier de configuration du product (suite) plugin.xml du projet CommandsKeyBindingRCPExamples Lors de la création de l’identifiant une extension basée sur org.eclipse.core.runtime.products a été créée Nom donné à l’identifiant du product
  91. 91. 91Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Raccourci clavier : scheme (création d’un product) † Définir un fichier de configuration des préférences utilisateur org.eclipse.ui/KEY_CONFIGURATION_ID = eclipse.workbench.commandskeybindingrcpexamples.specificdefaultacceleratorconfigurationid org.eclipse.ui/SHOW_PROGRESS_ON_STARTUP = false pluginpreference.ini du projet CommandsKeyBindingRCPExamples Identifiant du scheme qui doit être rendu actif Clé (KEY_CONFIGURATION_ID) permettant d’activer un scheme Le fichier pluginpreference.ini est placé à la racine du projet
  92. 92. 92Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Raccourci clavier : scheme (création d’un product) † Déclarer le fichier pluginpreference.ini dans le fichier de confi- guration du product plugin.xml du projet CommandsKeyBindingRCPExamples Définition d’une propriété à l’extension products pour configurer le product
  93. 93. 93Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Raccourci clavier : scheme (création d’un product) † Déclarer le fichier pluginpreference.ini dans le fichier de confi- guration du product (suite) plugin.xml du projet CommandsKeyBindingRCPExamples Nom de la propriété à ajouter : preferenceCustomization Nom du fichier de configuration : pluginpreference.ini
  94. 94. 94Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Raccourci clavier : scheme † Exécuter l’application et reproduire la séquence : F9 Projet CommandsKeyBindingRCPExamples Lors de l’appui sur la touche F9, la commande keyspecificcommandid est déclenchée
  95. 95. 95Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Restrictions : généralités † L’API Commands permet d’appliquer des restrictions sur les handlers et sur les éléments menuContributions † Au niveau des handlers les restrictions sont † activeWhen : si le handler est inactif, aucune commande n’est associée à ce handler † enabledWhen : si le handler est désactivé, l’exécution du handler ne peut être réalisée (si activé doit obligatoirement être actif) † Si handler est désactivé la commande apparaîtra grisée si elle est affichée dans un menu (peut importe si le handler est actif ou inactif) † Au niveau des éléments menuContributions la restriction est † visibleWhen : si invisible, l’élément graphique associé à la commande ne s’affiche pas (un élément dans un menu par exemple) † La description de restrictions est réalisée par le langage Core Expressions
  96. 96. 96Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Restrictions : exemples † Exemple : Afficher une commande dans la barre d’outils principale quand un élément est sélectionné Pas d’élément dans le service de sélection Un élément dans le service de sélection La commande est affichée dans la barre d’outils principale
  97. 97. 97Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Restrictions : exemples † Exemple (suite) : Afficher une commande dans la barre d’outils principale quand un élément est sélectionné plugin.xml du projet CommandsExpressionsExamples Une restriction visibleWhen au niveau d’un élément menuContribution Commande est affichée quand un seul élément de la sélection est sélectionné
  98. 98. 98Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Restrictions : exemples † Exemple : Afficher une commande dans la barre d’outils principale quand une vue est active La vue « View Command Expression » n’est pas active La vue « View Command Expression » est active La commande « Second Command Expression » est désactivée La commande « Second Command Expression » est maintenant activée
  99. 99. 99Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Restrictions : exemples † Exemple (suite) : Afficher une commande dans la barre d’outils principale quand une vue est active plugin.xml du projet CommandsExpressionsExamples Une restriction enabledWhen au niveau d’un élément handler Commande est activée quand la vue active est « View Command Expression »
  100. 100. 100Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Restrictions : construire Expression Definitions † Dans les exemples précédents nous avons montré comment construire des expressions en les associant directement aux différentes restrictions (visibleWhen, enabledWhen, …) † Il peut être intéressant de mutualiser ces expressions de manière à les réutiliser sans avoir à recopier les définitions † Le point d’extension org.eclipse.core.expressions.definitions permet de construire ces expressions † Les restrictions utiliseront ensuite une référence à la nouvelle définition Ajouter une dépendance sur org.eclipse.core.expressions pour exploiter le point d’extension org.eclipse.core.expressions.definitions
  101. 101. 101Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Restrictions : construire Expression Definitions Point d’extension permettant de créer des définitions d’expression
  102. 102. 102Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Restrictions : construire Expression Definitions plugin.xml du projet CommandsExpressionsExamples Création d’une définition d’expression : un élément du service de sélection
  103. 103. 103Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Restrictions : utiliser Expression Definitions plugin.xml du projet CommandsExpressionsExamples Définition d’un nouvel élément menuContribution avec une restriction visibleWhen dont l’expression a été définie précédemment Utilisation du sous élément reference de visibleWhen (s’appliquerait également à enabledWhen et activeWhen)
  104. 104. 104Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Restrictions : utiliser Expression Definitions Lors de la sélection d’un élément, les deux commandes sont affichées dans la barre d’outils principale Pas d’élément dans le service de sélection
  105. 105. 105Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Restrictions : Core Expressions en détail † Nous avons montré dans les exemples précédent des expressions basiques † La plateforme Eclipse fournit un ensemble d’éléments pour la définition d’expressions plus complexes † Dans la suite, nous nous proposons d’étudier chacun de ces éléments
  106. 106. 106Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Restrictions : élément count † L’élément count est utilisé pour vérifier le nombre d’occur- rence d’une collection † Cet élément peut être utilisé pour vérifier par exemple le nombre des sélections en cours † Si la vérification est correcte l’élément count est évalué à vrai sinon il est évalué à faux † L’attribut value de l’élément count est soit un entier soit un méta-caractère † * : n’importe quelle valeur † ? : 0 ou 1 élément † + : 1 ou plusieurs éléments † ! : aucun élément
  107. 107. 107Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Restrictions : élément count † Exemple : Afficher une commande dans la barre d’outils principale quand zéro ou un élément est sélectionné plugin.xml du projet CommandsExpressionsCountExamples Une restriction visibleWhen au niveau d’un élément menuContribution La commande est affichée si l’élément count s’assure qu’il n’y ait aucune ou un élément de la sélection
  108. 108. 108Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Restrictions : élément iterate † L’élément iterate permet de parcourir les occurrences d’une collection † Cet élément peut être utilisé pour vérifier par exemple le contenu des sélections en cours † Deux attributs de iterate sont définis operator et ifEmpty † Attribut operator peut recevoir les valeurs and ou or † and : chaque occurrence doit satisfaire le sous élément de iterate † or : au moins un élément doit satisfaire le sous élément de iterate † Attribut ifEmpty peut recevoir les valeurs true ou false † true : iterate est évalué à vrai si la collection est vide † false : iterate est évalué à faux si la collection est vide
  109. 109. 109Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Restrictions : élément instanceof † L’élément instanceof permet de comparer le type d’un objet en cours (un élément de sélection par exemple) par rapport à un type à comparer † Cet élément est comparable à l’instruction instanceof du langage Java † L’attribut value de l’élément instanceof permet d’indiquer le type à comparer † Si la correspondance entre les types est correcte, l’élément instanceof est évalué à vrai
  110. 110. 110Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Restrictions : élément iterate et instanceof † Exemple : Afficher une commande dans la barre d’outils quand tous les éléments de sélection sont des String plugin.xml du projet CommandsExpressionsIterateInstanceOfExamples Si la collection est vide, iterate est évalué à vrai Tous les éléments doivent respecter le sous élément instanceof de iterate
  111. 111. 111Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Restrictions : élément iterate et instanceof † Exemple (suite) : Afficher une commande dans la barre d’outils quand tous les éléments de sélection sont des String plugin.xml du projet CommandsExpressionsIterateInstanceOfExamples Permet de comparer le type de l’objet en cours (occurrence de la sélection) avec le type String
  112. 112. 112Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Restrictions : élément iterate et instanceof † Exemple (suite) : Afficher une commande dans la barre d’outils quand tous les éléments de sélection sont des String Une Table avec des éléments de type String et un élément de type Integer Si seuls des éléments de type String sont sélectionnés, la commande est affichée Si par contre la sélection contient des éléments de type String et Integer, la commande n’est pas affichée
  113. 113. 113Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Restrictions : élément systemTest † L’élément systemTest permet de comparer la valeur d’une propriété système avec une valeur donnée † Les propriétés systèmes sont les propriétés obtenues par la méthode System.getProperty() † Par exemple user.name est une propriété qui retourne le nom de l’utilisateur courant † L’élément systemTest possède deux attributs † property : le nom de la propriété à tester † value : la valeur de la propriété
  114. 114. 114Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Restrictions : élément systemTest † Exemple : Afficher une commande dans la barre d’outils quand la propriété user.name vaut baronm plugin.xml du projet CommandsExpressionsSystemTestExamples Permet de comparer la valeur de la propriété « user.name » avec la valeur baronm
  115. 115. 115Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Restrictions : élément test † L’élément test permet de tester une valeur particulière d’une propriété sur un objet en cours † Exemples † A partir de la sélection d’un texte, vérifier que le contenu de la sélec- tion contient que des lettres † A partir du Workbench Window actif, vérifier que toutes ces perspec- tives sont fermées † Le test s’effectue par l’utilisation d’un objet Property Tester décrit au travers d’une classe Java de type PropertyTester † L’élément test possède quatre attributs † property : nom de la propriété à tester † args : arguments complémentaires à transmettre au tester † value : la valeur qui peut être comparée † forcePluginActivation : si true force le plugin a l’activation
  116. 116. 116Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Restrictions : élément test † La valeur de l’attribut property de test est la combinaison entre l’espace de nommage et le nom de la propriété † Exemple † Vérifier si toutes les perspectives de IWorkbenchWindow sont ouvertes la property est org.eclipse.ui.workbenchWindow.isPerpsectiveOpen † La plateforme Eclipse fournit un ensemble prédéfinis de Property Tester qui sont utilisés pour le fonctionnement interne de l’environnement Eclipse † Nous montrerons également dans la suite comment créer ses propres Property Tester Espace de nommage Nom de la propriété
  117. 117. 117Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Restrictions : élément test † Property Tester prédéfinis …
  118. 118. 118Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Restrictions : élément test † Property Tester prédéfinis … (suite)
  119. 119. 119Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Restrictions : élément test † Exemple : Désactiver une commande dans la barre de menu quand toutes les perspectives sont fermées Projet CommandsExpressionsTestExamples Toutes les perspectives sont fermées, la commande est désactivée La perspective Resource est ouverte, la commande est activée
  120. 120. 120Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Restrictions : élément test † Exemple (suite) : Désactiver une commande dans la barre de menu quand toutes les perspectives sont fermées Nom de la propriété Espace de nommage Type de l’objet Classe implémentant le Property Tester associé † La valeur de l’attribut property de test est † org.eclipse.ui.workbenchWindow.isPerspectiveOpen
  121. 121. 121Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Restrictions : élément test † Exemple (suite) : Désactiver une commande dans la barre de menu quand toutes les perspectives sont fermées plugin.xml du projet CommandsExpressionsTestExamples L’objet en cours est activeWorkbenchWindow de type IWorkbenchWindow
  122. 122. 122Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Restrictions : élément test † Exemple (suite) : Désactiver une commande dans la barre de menu quand toutes les perspectives sont fermées plugin.xml du projet CommandsExpressionsTestExamples Utilisation de la propriété org.eclipse.ui.workbenchWindow.isPerspectiveOpen Permet de forcer le démarrage du plugin de manière à prendre en compte cette restriction
  123. 123. 123Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Restrictions : élément and, not et or † Les éléments and, or et not permettent de combiner des expressions par des opérateurs logiques † Ils permettent d’exprimer des expressions à plusieurs niveaux d’éléments (iterate, count, …) † Tous les sous éléments des éléments and ou or sont affectés par l’opération logique † L’élément not ne peut accepter un seul sous élément † Nous montrons dans la suite, la combinaison des éléments étudiés précédemment (iterate, instanceof, count et systemtest)
  124. 124. 124Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Restrictions : élément and, not et or † Exemple : Afficher une commande dans la barre de menu si † la propriété user.name vaut baronm et tous les élément de sélection sont String † ou quand le nombre de sélection est différent de 2 Le nombre de sélection est différent de 2 => Commande affichée Elément de sélection de type différent et nombre de sélection égale à 2 => Commande non affichée
  125. 125. 125Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Restrictions : élément and, not et or † Exemple (suite) : Afficher une commande dans la barre de menu si … Bloc or Bloc and Bloc not plugin.xml du projet CommandsExpressionsAndNotOrExamples
  126. 126. 126Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Restrictions : définir ses propres variables d’évaluation † Précédemment nous avons utilisé deux variables (selection et activeWorkbenchWindow) prédéfinies par la plateforme Eclipse † Une variable retourne un type a concorder avec les éléments des expressions définis précédemment † ISelection pour la variable selection † String pour activeWorkbenchWindow † La plupart des variables sont modifiables en cours d’exécution † Dans la suite est montré au travers d’un exemple la façon de † créer une variable † mettre à jour son contenu
  127. 127. 127Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Restrictions : définir ses propres variables d’évaluation † Variable prédéfinies …
  128. 128. 128Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Restrictions : définir ses propres variables d’évaluation † Variable prédéfinies … (suite)
  129. 129. 129Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Restrictions : définir ses propres variables d’évaluation † Exemple : définition d’une variable avec trois états qui est modifiable par l’utilisateur L’appuie sur les boutons modifie l’état de la variable La variable est utilisée pour des restrictions visibleWhen pour afficher une commande du menu, de la barre d’outils et de la barre de la vue
  130. 130. 130Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Restrictions : définir ses propres variables d’évaluation † La création d’une variable s’effectue au travers du point d’extension org.eclipse.ui.services Point d’extension org.eclipse.ui.services
  131. 131. 131Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Restrictions : définir ses propres variables d’évaluation † La création d’un élément sourceProvider permet de définir un objet de type ISourceProvider plugin.xml du projet CommandsExpressionsVariableExamples Nom de la classe définissant l’objet de type ISourceProvider
  132. 132. 132Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Restrictions : définir ses propres variables d’évaluation † Un objet ISourceProvider définit le comportement de la variable (l’accès à ses valeurs) † Un objet ISourceProvider peut gérer plusieurs variables † Une implémentation partielle est fournie par la classe AbstractSourceProvider † Map<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
  133. 133. 133Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Restrictions : définir ses propres variables d’évaluation † Exemple (suite) : définition d’une variable avec trois états qui est modifiable par l’utilisateur public class AnimationSourceProvider extends AbstractSourceProvider { public final static String ANIMATION_STATE = "eclipse.workbench.commands...examples.animation"; private final static String MENU_STATE = "menu"; private final static String TOOLBAR_STATE = "toolbar"; private final static String TOOLBAR_VIEW_STATE = "toolbarview"; private int state; public AnimationSourceProvider() { state = 0; } public Map<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
  134. 134. 134Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Restrictions : définir ses propres variables d’évaluation † Exposer le nom de la variable au sein de l’application Eclipse pour être utilisée dans les expressions plugin.xml du projet CommandsExpressionsVariableExamples Nom de la variable
  135. 135. 135Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Restrictions : définir ses propres variables d’évaluation † L’accès aux objets de type ISourceProvider est réalisé par l’intermédiaire de l’interface † ISourceProviderService : pour créer des commandes † De la même manière que pour les interfaces IHandlerService et ICommandService, le Workbench permet de récupérer une instance de ISourceProviderService † A partir d’un ISourceProviderService, la récupération d’un ISourceProvider est obtenue par le nom de la variable ISourceProviderService spc = (ISourceProviderService)PlatformUI.getWorkbench().getService(ISourceProviderService.class); AnimationSourceProvider myPro = (AnimationSourceProvider)spc.getSourceProvider(AnimationSourceProvider.ANIMATION_STATE);
  136. 136. 136Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Restrictions : définir ses propres variables d’évaluation † Exemple (suite) : définition d’une variable avec trois états qui est modifiable par l’utilisateur public class AnimationControlViewPart extends ViewPart { public void createPartControl(Composite parent) { parent.setLayout(new GridLayout(3,true)); // Get the service ISourceProviderService spc = (ISourceProviderService) PlatformUI.getWorkbench().getService(ISourceProviderService.class); // Get our source provider by querying by the variable name final AnimationSourceProvider myPro = (AnimationSourceProvider) spc.getSourceProvider(AnimationSourceProvider.ANIMATION_STATE); Button menu = new Button(parent, SWT.FLAT); menu.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { myPro.setState(0); } }); menu.setLayoutData(new GridData(GridData.FILL_BOTH)); menu.setText("Menu"); Button toolbar = new Button(parent, SWT.FLAT); toolbar.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { myPro.setState(1); } }); toolbar.setLayoutData(new GridData(GridData.FILL_BOTH)); toolbar.setText("Toolbar"); Button view = new Button(parent, SWT.FLAT); view.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { myPro.setState(2); } }); view.setLayoutData(new GridData(GridData.FILL_BOTH)); view.setText("ToolbarView"); } } Classe AnimationControlViewPart.java du projet CommandsExpressionsVariableExamples Récupération de l’objet ISourceProvider Modifications de l’état de la variable
  137. 137. 137Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Restrictions : définir ses propres variables d’évaluation † Exemple (suite) : définition d’une variable avec trois états qui est modifiable par l’utilisateur plugin.xml du projet CommandsExpressionsVariableExamples Trois restrictions visibleWhen sont définies
  138. 138. 138Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Restrictions : définir ses propres PropertyTester † Précédemment nous avons montré comment utiliser les Property Tester définis par la plateforme Eclipse † Cette partie s’intéresse à la création de Property Tester personnalisé † La présentation sera guidée par un exemple inspiré d’un billet de Robert Konigsberg † http://konigsberg.blogspot.com/2008/06/screencast-using-property- testers-in.html † Description de l’exemple † Vérifie que la sélection sur du texte contient uniquement des lettres ou des chiffres † Le Propery Tester contient deux propriétés : isAllLetters et isAllDigits
  139. 139. 139Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Restrictions : définir ses propres PropertyTester † Exemple : vérifie si la sélection sur du texte contient unique- ment des lettres ou des chiffres Sélection d’un texte contenant uniquement des lettres Sélection d’un texte contenant uniquement des chiffres Dans les deux cas, le handler associé à la commande est activé Si la sélection sur le texte contient à la fois des lettres et des chiffres, le handler est désactivé
  140. 140. 140Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Restrictions : définir ses propres PropertyTester † La création d’un Property Tester est réalisé au travers du point d’extension org.eclipse.core.expressions.propertyTesters Point d’extension org.eclipse.core.expressions.properyTesters
  141. 141. 141Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Restrictions : définir ses propres PropertyTester † L’ajout d’un élément PropertyTester (à partir de l’extension précédente) permet de définir un Property Tester † L’élément PropertyTester possède cinq attributs † id : l’identifiant du Property Tester † type : le type de l’objet à traiter pour effectuer la vérification † namespace : l’espace de nommage † properties : une liste de propriétés séparées par une virgule † class : classe de type PropertyTester implémentant le comportement du Property Tester
  142. 142. 142Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Restrictions : définir ses propres PropertyTester † La classe de type PropertyTester doit implémenter † boolean test(Object receiver, String prop, Object[] args, Object exp) : appelée pour coder le comportement du Property Tester † receiver : source d’information pour effectuer les tests † prop : la propriété à tester † args : des arguments supplémentaires † expectedValue : valeur attendue † Tous ces paramètres ne sont pas forcément utiles pour définir le comportement du Property Tester † Généralement les arguments receiver et prop sont utilisés
  143. 143. 143Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Restrictions : définir ses propres PropertyTester plugin.xml du projet CommandsExpressionsCustomTestExamples † Ajout d’un élément propertyTester Ce Property Tester ne traite que les objets de type ISelection (type de l’argument receiver) Deux propriétés sont définies : isAllLetters et isAllDigits
  144. 144. 144Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Restrictions : définir ses propres PropertyTester † Exemple (suite) : vérifie si la sélection sur du texte contient uniquement des lettres ou des chiffres public class CustomPropertyTester extends PropertyTester { public boolean test(Object receiver, String property, Object[] args, Object expectedValue) { ISelection selection = (ISelection) receiver; if ("isAllLetters".equals(property)) { if (selection instanceof TextSelection) { TextSelection ts = (TextSelection) selection; String text = (String) ts.getText(); if (text == null || text.length() == 0) { return false; } for (Character ch : text.toCharArray()) if (!Character.isLetter(ch)) { return false; } return true; } } if ("isAllDigits".equals(property)) { if (selection instanceof TextSelection) { TextSelection ts = (TextSelection) selection; String text = (String) ts.getText(); if (text == null || text.length() == 0) { return false; } for (Character ch : text.toCharArray()) if (!Character.isDigit(ch)) { return false; } return true; } } return false; } } CustomPropertyTester.java du projet CommandsExpressionsCustomTestExamples Test relatif à la propriété isAllLetters Test relatif à la propriété isAllDigits
  145. 145. 145Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Restrictions : définir ses propres PropertyTester † Exemple (suite) : vérifie si la sélection sur du texte contient uniquement des lettres ou des chiffres plugin.xml du projet CommandsExpressionsCustomTestExamples Utilisation du Property Tester avec ces deux propriétés
  146. 146. 146Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Restrictions par programmation † Précédemment nous avons montré comment utiliser les restrictions (visibleWhen, enabledWhen et activeWhen) de manière déclarative via les extensions † Puisque toutes les restrictions définies dans ces extensions s’appuient sur des APIs Java, il est possible de réaliser les mêmes constructions de manière programmatique † Nous n’allons pas montrer dans la suite l’exhaustivité des expressions étudiées précédemment mais deux exemples qui présentent visibleWhen et enabledWhen † A noter enfin, qu’il est préférable de passer par des constructions déclaratives pour une meilleure portabilité des applications à construire
  147. 147. 147Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Restrictions par programmation : visibleWhen † Pour rappel une restriction visibleWhen est attachée à un élément menuContribution † Les services consacrés à la contribution d’éléments de menu (barre de menu, barre d’outils) sont définis par l’interface IMenuService † A partir d’un objet IMenuService † void addContributionItem(AbstractContributionFactory cont) : ajoute un élément de menu † La classe AbstractContributionFactory est utilisée pour construire un élément de menu † void abstract createContributionItems(IServiceLocator sl, IContributionRoot add) : doit être implémentée afin de construire un élément de menu IMenuService menuService = (IMenuService)PlatformUI.getWorkbench().getService(ISourceProviderService.class);
  148. 148. 148Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Restrictions par programmation : visibleWhen † Exemple : afficher une commande dans le menu dont la restriction visibleWhen est contrôlée par programmation Projet CommandsProgrammaticVisibleWhenExamples Création d’un élément dans le menu Bouton « Hide » cache l’élément du menu Bouton « Show » affiche l’élément du menu
  149. 149. 149Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Restrictions par programmation : visibleWhen † Exemple (suite) : afficher une commande dans le menu dont la restriction visibleWhen est contrôlée par programmation public class CreateMenuContributionViewPart extends ViewPart { private boolean isVisible = true; private CommandContributionItem item; private Expression currentExpression; public void createPartControl(Composite parent) { ... final Button myButton = new Button(parent, SWT.NONE); myButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { IMenuService service = (IMenuService) PlatformUI.getWorkbench().getService(IMenuService.class); AbstractContributionFactory ref = new AbstractContributionFactory("menu:org.eclipse.ui.main.menu", null) { public void createContributionItems(IServiceLocator serviceLocator, IContributionRoot additions) { CommandContributionItemParameter commandParameter = new CommandContributionItemParameter( serviceLocator, "contributionitem", "eclipse.workbench.commandsprogrammaticvisiblewhenexamples.helloworldcommandid", CommandContributionItem.STYLE_PUSH); currentExpression = new Expression() { public EvaluationResult evaluate(IEvaluationContext context) throws CoreException { if (isVisible) { return EvaluationResult.TRUE; } else { return EvaluationResult.FALSE; } } }; item = new CommandContributionItem(commandParameter); additions.addContributionItem(item, currentExpression); } }; service.addContributionFactory(ref); myButton.setEnabled(false); } }); ... // Suite dans le prochain transparent CreateMenuContributionViewPart.java du projet CommandsProgrammaticVisibleWhenExamples Construction d’un élément dans le menu principal L’expression est très simple et elle est pilotée par l’attribut isVisible
  150. 150. 150Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Restrictions par programmation : visibleWhen † Exemple (suite) : afficher une commande dans le menu dont la restriction visibleWhen est contrôlée par programmation public class CreateMenuContributionViewPart extends ViewPart { ... public void createPartControl(Composite parent) { ... Button hideMenuContribution = new Button(parent, SWT.NONE); hideMenuContribution.setText("Hide"); hideMenuContribution.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { isVisible = false; updateExpression(); } }); Button showMenuContribution = new Button(parent, SWT.NONE); showMenuContribution.setText("Show"); showMenuContribution.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { isVisible = true; updateExpression(); } }); } // Suite dans le prochain transparent CreateMenuContributionViewPart.java du projet CommandsProgrammaticVisibleWhenExamples Modification de l’attribut isVisible
  151. 151. 151Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Restrictions par programmation : visibleWhen † Exemple (suite) : afficher une commande dans le menu dont la restriction visibleWhen est contrôlée par programmation public class CreateMenuContributionViewPart extends ViewPart { private void updateExpression() { WorkbenchWindow current = (WorkbenchWindow)PlatformUI.getWorkbench().getActiveWorkbenchWindow(); final Set<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
  152. 152. 152Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Restrictions par programmation : enabledWhen † Dans le cas d’une restriction enabledWhen, il s’agit de contrôler un handler † Précédemment nous avons montré comment créer et associer une commande via IHandlerService † IHandlerActivation activateHandler(String commandId, IHandler handler) : associe une commande à un handler † Cette même interface fournit une méthode activateHandler avec la possibilité d’ajouter une expression (enabledWhen) † IHandlerActivation activateHandler(String commandId, IHandler handler, Expression exp) : associer une commande à un handler et définir une restriction enabledWhen via exp
  153. 153. 153Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Restrictions par programmation : enabledWhen † Exemple : activée un handler dans le menu dont la restriction enabledWhen est contrôlée par programmation Projet CommandsProgrammaticEnabledWhenExamples Handler associé à la commande est désactivé Handler associé à la commande est activé
  154. 154. 154Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Restrictions par programmation : enabledWhen † Exemple (suite) : activée un handler dans le menu dont la restriction enabledWhen est contrôlée par programmation public class CreateHandlerViewPart extends ViewPart { private boolean isEnabled = true; public void createPartControl(Composite parent) { ... final Button createButton = new Button(parent, SWT.NONE); createButton.setText("Create"); createButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { IHandlerService hs = (IHandlerService) PlatformUI.getWorkbench().getService(IHandlerService.class); IHandler handler = new AbstractHandler() { public Object execute(ExecutionEvent event) throws ExecutionException { MessageDialog.openInformation(Display.getDefault().getActiveShell(), "CommandsExamples Plug-in", "Hello, Eclipse World with Third Handler"); return null; } }; Expression enabledWhen = new Expression() { public void collectExpressionInfo(ExpressionInfo info) { info.markDefaultVariableAccessed(); } public EvaluationResult evaluate(IEvaluationContext context) throws CoreException { if (isEnabled) return EvaluationResult.TRUE; else return EvaluationResult.FALSE; } }; hs.activateHandler("eclipse.workbench.commandsprogrammaticenabledwhenexamples.helloworldcommandid", handler,enabledWhen); createButton.setEnabled(false); } }); // Suite dans le prochain transparent CreateHandlerViewPart.java du projet CommandsProgrammaticVisibleWhenExamples Nécessaire pour la mise à jour de l’expression. Notification est effectuée à chaque modification des variables « expression »
  155. 155. 155Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Restrictions par programmation : enabledWhen † Exemple (suite) : activée un handler dans le menu dont la restriction enabledWhen est contrôlée par programmation public class CreateHandlerViewPart extends ViewPart { private boolean isEnabled = true; public void createPartControl(Composite parent) { ... Button disabledHandler = new Button(parent, SWT.NONE); disabledHandler.setText("Disabled"); disabledHandler.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { isEnabled = false; } }); Button enabledHandler = new Button(parent, SWT.NONE); enabledHandler.setText("Enabled"); enabledHandler.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { isEnabled = true; } }); } } CreateHandlerViewPart.java du projet CommandsProgrammaticVisibleWhenExamples Modification de l’attribut isVisible
  156. 156. 156Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Paramètres : généralités † Actuellement lors du déclenchement d’une commande, il n’est pas possible de paramétrer l’exécution du handler associé † Si on souhaite obtenir plusieurs comportements différents pour une commande donnée il sera nécessaire de définir plusieurs commandes † L’API Commands permet d’ajouter des paramètres à une commande via le sous élément commandParameter † Les valeurs de ces paramètres sont données lors de la définition du déclenchement de la commande, c’est-à-dire au niveau des sous éléments menuContribution
  157. 157. 157Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Paramètres : ajouter des paramètres † L’ajout des paramètres est réalisé au niveau de la définition d’une commande (extension sur org.eclipse.ui.commands) † Il faut ajouter des sous éléments commandParamter à l’élément command † Possibilité pour une commande de définir plusieurs paramètres † Un paramètre est défini par les attributs suivants † id : identifiant du paramètre (utilisé pour la manipulation) † name : nom du paramètre † values : définir l’ensemble des valeurs autorisées † typeId : permet d’utiliser un autre type que String † optional : précise si le paramètre est obligatoire ou pas
  158. 158. 158Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Paramètres : ajouter des paramètres † Exemple : afficher l’emplacement (menu ou toolbar) où est déclenchée une commande plugin.xml du projet CommandsParametersExamples Ajout d’un élément commandParameter Identifiant utilisé pour les manipulations du paramètre
  159. 159. 159Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Paramètres : fournir des valeurs aux paramètres † Les valeurs données aux paramètres sont précisées lors de la définition du déclenchement de la commande † Pour rappel, la définition du déclenchement de la commande est réalisée au niveau des sous éléments menuContribution † Au niveau de l’élément command (sous élément de menuContribution) il faut ajouter un sous élément parameter † L’élément parameter contient deux attributs † name : identifiant du paramètre † value : valeur à donner pour ce paramètre (String)
  160. 160. 160Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Paramètres : fournir des valeurs aux paramètres † Exemple (suite) : afficher l’emplacement (menu ou toolbar) où est déclenchée une commande plugin.xml du projet CommandsParametersExamples Identifiant du paramètre dont la valeur doit être transmise Valeur du paramètre …opendialogparameterid
  161. 161. 161Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Paramètres : traitement dans le handler † Dans le code du handler, les valeurs du paramètre permet- tent d’effectuer des traitements particuliers † Pour rappel un handler doit implémenter un objet de type IHandler (implémentation abstraite via AbstractHandler) † Object execute(ExecutionEvent e) : traitement réalisé quand la commande est déclenchée † L’objet ExecutionEvent permet d’extraire la valeur d’un paramètre † String getParameter(String param) : récupération de la valeur du paramètre param
  162. 162. 162Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Paramètres : traitement dans le handler † Exemple (suite) : afficher l’emplacement (menu ou toolbar) où est déclenchée une commande public class OpenDialogHandler extends AbstractHandler { @Override public Object execute(ExecutionEvent event) throws ExecutionException { String param = event.getParameter("eclipse.workbench.commandsparametersexamples.opendialogparameterid"); MessageDialog.openInformation(Display.getDefault().getActiveShell(), "CommandsParametersExamples Plug-in","opendialogparameterid parameter value : " + param); return null; } } OpenDialogHandler.java du projet CommandsParametersExamples Récupération de la valeur du paramètre …opendialogparameterid
  163. 163. 163Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Paramètres : renseigner les valeurs autorisées † Il est également possible de définir à l’avance la liste des valeurs prises en compte par un paramètre † L’attribut values de l’élément commandParameter est utilisé pour fournir cette information † Par ailleurs, l’environnement Eclipse fournit un outil permet- tant de lister l’intégralité des commandes et des valeurs autorisées (sous condition que l’attribut values soit renseigné) † L’outil est accessible via les préférences (menu Window -> Preferences -> General -> Keys)
  164. 164. 164Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Paramètres : renseigner les valeurs autorisées Le paramètre Open Dialog Values Parameter accepte deux valeurs : menu et toolbar Pour que les valeurs potentielles du paramètre soient affichées il est obligatoire d’associer la commande a une catégorie
  165. 165. 165Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Paramètres : renseigner les valeurs autorisées † L’attribut values de l’élément commandParameter doit renseigner un objet de type IParameterValues † Cette interface fournit une méthode † Map<String, String> getParameterValues() : valeurs autorisées † Exemple public 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
  166. 166. 166Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Paramètres : renseigner les valeurs autorisées † Possibilité de définir les valeurs autorisées en passant par une approche déclarative plugin.xml du projet CommandsParametersExamples Ne rien préciser au niveau de l’attribut values
  167. 167. 167Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Paramètres : renseigner les valeurs autorisées † Suite : Possibilité de définir les valeurs autorisées en passant par une approche déclarative plugin.xml du projet CommandsParametersExamples Ajouter un sous élément values 1 Utiliser cette classe de type IParameterValues définie par la plateforme Eclipse 2
  168. 168. 168Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Paramètres : renseigner les valeurs autorisées † Suite : Possibilité de définir les valeurs autorisées en passant par une approche déclarative plugin.xml du projet CommandsParametersExamples Ajouter des sous éléments parameter qui désignent les valeurs possibles Nom de la valeur et valeur à donner
  169. 169. 169Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Réutilisation : Plug-in Spy † L’utilitaire Plug-in Spy permet d’espionner une application Eclipse en cours d’exécution † Cet utilitaire est fourni nativement dans la plateforme Eclipse depuis la version 3.4 † L’espionnage donne des informations sur † La vue active (éléments des menus contextuels, identifiants, …) † La sélection en cours † Les identifiants des commandes † La position d’un menuContribution (locationURI) † Pour démarrer l’outil deux options disponibles † Shift + Alt + F1 : pour l’espionnage des vues, du workbench, … † Shift + Alt + F2 : pour l’espionnage des menus et des commandes
  170. 170. 170Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Réutilisation : Plug-in Spy † Exemple : Espionner la vue Package Explorer via le raccourci Shift + Alt + F1 Identifie la classe ViewPart qui code la vue Package Explorer Identifie le plugin où est définie la vue Récupère l’identifiant de la vue Récupère l’identifiant du menu de la vue Donne des informations sur la sélection en cours
  171. 171. 171Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Réutilisation : Plug-in Spy † Exemple : Espionner un élément de menu (closePerspective) via le raccourci Shift + Alt + F2 (à partir d’Eclipse 3.5) Récupère l’identifiant de l’élément menuContribution La position (locationURI) de l’élément L’identifiant de la commande Très utile pour récupérer les identifiants des commandes prédéfinies par la plateforme Eclipse
  172. 172. 172Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Réutilisation : Options de traçage † Lors de l’exécution d’une application Eclipse il est possible d’activer les logs dans le but d’afficher les identifiants des commandes utilisés † Les options de traçage peuvent également être utilisés pour obtenir des informations sur tous les plug-ins qu’ils soient de la plateforme Eclipse ou non † L’activation des logs est réalisée au niveau de l’onglet Tracing d’une configuration d’exécution † L’activation doit être réalisée avant l’exécution de l’applica- tion Eclipse
  173. 173. 173Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Réutilisation : Options de traçage Onglet Tracing Sélectionner le plug-in org.eclipse.ui Activer le mode debug 1 2 3 † Activation les traces d’exécution des commandes
  174. 174. 174Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Réutilisation : Options de traçage Activer trace/commands 1 Possibilité d’activer les traces relatives aux handlers 2 † Activation les traces d’exécution des commandes (suite)
  175. 175. 175Commands - M. Baron - Page keulkeul.blogspot.com@mickaelbaron Réutilisation : Options de traçage † Activation les traces d’exécution des commandes (suite) Identifiant de la commande Classe implémentant le handler

×