Upload
mickael-baron
View
4.064
Download
4
Tags:
Embed Size (px)
DESCRIPTION
Ce support de cours s'intéresse à détailler la construction de perspectives 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 : construction déclarative, ajout de vues (view, fastview, standaloneview, placeholder, createfolder, placeholderfolder), paramétrage d'une perspective, étendre une perspective existante via Perspective Extensions, registre des perspectives, écouter les changements d'une perspective et les principales opérations du Workbench liées aux perspectives.
Citation preview
Développement de clients riches : Plateforme Eclipse
Mickaël BARON - 2009 mailto:[email protected] ou mailto:[email protected]
Chapitre 3 : Conception de plugChapitre 3 : Conception de plug--insins
Workbench : Perspectives
2Perspectives - M. Baron - Page
keul
keul
.blo
gspo
t.com
Creative Commons
Contrat Paternité
Partage des Conditions Initiales à l'Identique
2.0 France
http://creativecommons.org/licenses/by-sa/2.0/fr
Licence
3Perspectives - M. Baron - Page
keul
keul
.blo
gspo
t.com
Organisation du cours sur le Workbench : Perspectives
Tous les exemples du cours sont disponibles directement à l’adresse
mbaron.developpez.com/eclipse/perspectives
Construction déclarative
Ajout de vues
Paramétrage
Etendre une perspective existante
Registre des perspectives
Ecouter les changements
Principales opérations
4Perspectives - M. Baron - Page
keul
keul
.blo
gspo
t.com
Workbench Perspectives : déroulement du cours
Pédagogie du cours
Illustration avec de nombreux exemples qui sont disponibles à
l’adresse mbaron.developpez.com/eclipse/perspectives
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
Généralités sur le Workbench
Remerciement
Developpez.com : djo.mos (Jawher MOUSSA)
Ceci est une alerte
Ceci est une astuce
5Perspectives - M. Baron - Page
keul
keul
.blo
gspo
t.comWorkbench Perspectives : ressources …
Des articles sur la construction de perspectives
www.eclipse.org/articles/using-perspectives/PerspectiveArticle.html
www.javalobby.org/java/forums/t18187.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
6Perspectives - M. Baron - Page
keul
keul
.blo
gspo
t.com
Perspectives : généralités
Une perspective est un regroupement de vues, d’éditeurset de raccourcis au sein du Workbench afin de faciliter une tâche de l'utilisateur
Une perspective fournit des mécanismes pour faciliter l'agencement des vues et des éditeurs
Différents types de raccourcis peuvent être référencés
Raccourcis sur des commandes
Raccourcis pour changer la perspective
Raccourcis pour démarrer un assistant
Raccourcis pour ouvrir une vue
Exemples des perspectives prédéfinies du développeur Java
Java, Debug, Java Browsing …
Les commandes remplacent les actions, voir le cours Commands
pour des détails supplémentaires
7Perspectives - M. Baron - Page
keul
keul
.blo
gspo
t.com
Perspectives : généralités
Perspective Java
8Perspectives - M. Baron - Page
keul
keul
.blo
gspo
t.com
Perspectives : généralités
Perspective Debug
9Perspectives - M. Baron - Page
keul
keul
.blo
gspo
t.com
Perspectives : généralités
Perspective Java Browsing
10Perspectives - M. Baron - Page
keul
keul
.blo
gspo
t.com
Perspectives : généralités
Personnalisation des raccourcis d'une perspective
Liste les raccourcis sur les assistants
Le raccourci sur l'assistant Création de Fichier a été
ajouté
Barre d'outils où seront ajoutés les raccourcis sur les
commandes.Le raccourci sur la commande Synchronisation a été ajouté
Liste les raccourcis sur les perspectives
Le raccourci sur la perspective Resource a
été ajouté
Liste les raccourcis sur les vues
Le raccourci sur la vue Console a été ajouté
11Perspectives - M. Baron - Page
keul
keul
.blo
gspo
t.com
Perspectives : généralités
La construction d’une perspective peut être réalisée de trois manières différentes
ProgrammatiquementUtilisation du point d’extension org.eclipse.ui.perspectiveNécessite la construction d’une classe de type IPerspectiveFactoryL’agencement des vues et de l’éditeur est codé dans cette classe
DéclarativementUtilisation du point d’extension org.eclipse.ui.perspectiveExtensionsL’agencement est défini au travers de l’outil PDE via les paramètres de l’extension
En cours d’exécutionLa construction se fait pendant l’exécution de l’application
L’utilisateur agence ses vues puis sauvegarde une nouvelle perspective personnalisée
12Perspectives - M. Baron - Page
keul
keul
.blo
gspo
t.com
Perspectives : construction d'une extension
Sélectionner le point d’extension org.eclipse.ui.perspectives
Point d'extension à créer
13Perspectives - M. Baron - Page
keul
keul
.blo
gspo
t.com
Perspectives : construction d'une extension
Onglet Extensions
Ajout d'une nouvelle perspective
Ajouter une nouvelle perspective
Projet PerspectiveExemple
14Perspectives - M. Baron - Page
keul
keul
.blo
gspo
t.com
Perspectives : construction d'une extension
Identifiant unique de la perspective
Nom de la perspective utilisable par l'utilisateur
pour identifier la perspective
Classe de type IPerspectiveFactory qui
décrit comment la perspective doit être créée
Personnalisation de la perspective
Saisir les paramètres de la perspective créée
15Perspectives - M. Baron - Page
keul
keul
.blo
gspo
t.com
Perspectives : construction d'une extension
package eclipse.workbench.perspectiveexample;
public class EmptyPerspectiveFactory implements IPerspectiveFactory {
public void createInitialLayout(IPageLayout layout) {// Ceci est une perspective vide ...
}}
Créer la classe EmptyPerspectiveFactory en implémentant l'interface IPerspectiveFactory
Aucune vue ni éditeur n'ont été ajoutés dans cette
perspective
Seule la méthode createInitialLayoutdoit être implémentée
EmptyPerspectiveFactory.java du Projet PerspectiveExample
16Perspectives - M. Baron - Page
keul
keul
.blo
gspo
t.com
Perspectives : construction d'une extension
Comme prévu la perspective Empty Perspectivene contient aucune vue
Tester la perspective Empty Perspective …
Projet PerspectiveExemple
17Perspectives - M. Baron - Page
keul
keul
.blo
gspo
t.com
Perspectives : IPageLayout
Une perspective définit l'agencement des vues de différentes manières
View : ajoute une vue à la perspective
Place Folder : création d'un emplacement pour empiler de vues
Place Holder : définition d'un emplacement par défaut d'une vue sans l'afficher. A l'ouverture, celle-ci sera positionnée à l'emplacement défini
Fast View : ajoute une vue de manière flottante à la perspective
Standalone View : ajoute une vue qui ne peut être empilée avec d'autres vues (peut ne pas contenir de titre)
L'agencement des vues est obtenu par l'intermédiaire d'un objet de type IPageLayout
Dans la suite, ces différents agencements sont présentées ainsi que leurs mises en œuvre via IPageLayout
18Perspectives - M. Baron - Page
keul
keul
.blo
gspo
t.com
Perspectives : addView
Exemple : agencer trois vues dans une perspective
Projet PerspectiveExemple
La zone des éditeurs est utilisée comme référent pour l’agencement
des vues Bookmarks et TasksLa vue Bookmarks est
positionnée à la gauche de la zone des
éditeurs
La vue Tasks est positionnée au
dessous de la zone des éditeurs La vue Navigator est
positionnée au dessous de la vue Bookmarks
19Perspectives - M. Baron - Page
keul
keul
.blo
gspo
t.com
Perspectives : addView
Exemple (suite) : agencer trois vues dans une perspective
package eclipse.workbench.perspectiveexample.perspectives;
public class AddViewPerspectiveFactory implements IPerspectiveFactory {
public void createInitialLayout(IPageLayout layout) {String editorAreaId = layout.getEditorArea();
layout.addView(IPageLayout.ID_BOOKMARKS, IPageLayout.LEFT, 0.25f, editorAreaId);
layout.addView(IPageLayout.ID_TASK_LIST, IPageLayout.BOTTOM, 0.45f, editorAreaId);
layout.addView(IPageLayout.ID_RES_NAV, IPageLayout.BOTTOM, 0.45f,IPageLayout.ID_TASK_LIST);
}}
AddViewPerspectiveFactory.javadu Projet PerspectiveExample
Récupération de l’Idde la zone des éditeurs
La vue Bookmarks est positionnée à la gauche de la zone des éditeurs Ratio qui définit l’espace occupé par la vue
Bookmarks par rapport à son référent
Le référent peut également être une vue
Le référent est la zone des éditeurs
20Perspectives - M. Baron - Page
keul
keul
.blo
gspo
t.com
L’interface IPageLayout fournit des méthodes pour ajouter
de simples vues à une perspective
void addView(String viewId, int relationship, float ratio, String refId) :
ajoute une vue viewId à une perspective
viewId : identifiant de la vue à ajouter
relationship : position de la vue par rapport au référent (TOP,
BOTTOM, LEFT et RIGHT)
ratio : spécifie comment diviser l’espace entre la vue viewId et son
référent refId
refId : identifiant de la référence
String getEditorArea() : récupère l’identifiant de la zone des éditeurs
de la perspective
Perspectives : addView
21Perspectives - M. Baron - Page
keul
keul
.blo
gspo
t.com
Perspectives : addView (ratio)
L’argument ratio spécifie comment doit être occupé l’espace entre une vue et son référent
Selon l’orientation, le ratio porte sur la vue ou sur le référent
Pour une séparation verticale (TOP ou BOTTOM) le ratio s’applique sur l’élément du haut
Si ratio = 0.95, l’élément du haut occupera 95% de l’espace
Pour une séparation horizontale (LEFT ou RIGHT) le ratio s’applique sur l’élément de gauche
Si ratio = 0.95, l’élément de gauche occupera 95% de l’espace
La valeur ratio est comprise entre 0.05 et 0.95
layout.addView(IPageLayout.ID_BOOKMARKS, IPageLayout.LEFT, 0.25f, editorAreaId);...layout.addView(IPageLayout.ID_RES_NAV, IPageLayout.BOTTOM, 0.45f, IPageLayout.ID_TASK_LIST);
La vue Bookmarks occupera 25% de l’espace défini avec la zone des éditeurs
La vue Tasks occupera 45% de l’espace défini avec la vue Navigator
22Perspectives - M. Baron - Page
keul
keul
.blo
gspo
t.com
Perspectives : addView (ratio)
25% 75 %
55%
45%
45%
55%
Vue Bookmarksplacée à gauche
Editeur
Vue Tasks placée au dessous de la zone des éditeurs
Vue Navigator placée au dessous de la vue Tasks
23Perspectives - M. Baron - Page
keul
keul
.blo
gspo
t.com
Perspectives : addFastView
Exemple : ajouter deux vues FastView à une perspective
Projet PerspectiveExemple
La vue Bookmarks est FastView
Elle est affichée sans être figée à la perspective.
A la perte du focus la vue est automatiquement fermée
Les deux vues FastView ajoutées àla perspective sont affichable via les
raccourcis
24Perspectives - M. Baron - Page
keul
keul
.blo
gspo
t.com
Perspectives : addFastView
Caractéristiques d’une vue de type FastViewN’est pas « accrochée » à la perspective
Est fermée automatiquement quand la vue perd son focus
Toute vue d’une perspective peut devenir FastView
Ne s’applique pas aux éditeurs
Peut perdre son aspect FastView pour être accrochée àla perspective
L’interface IPageLayout fournit une méthode pour ajouter une vue de type FastView à une perspective
void addFastView(String viewId, float ratio)
viewId : identifiant de la vue à transformer en FastView
ratio : pourcentage de la fenêtre Workbench qu’occupera laFastView
25Perspectives - M. Baron - Page
keul
keul
.blo
gspo
t.com
Perspectives : addFastView
Exemple (suite) : ajouter deux vues FastView à une …
package eclipse.workbench.perspectiveexample.perspectives;
public class AddFastViewPerspectiveFactory implements IPerspectiveFactory {
public void createInitialLayout(IPageLayout layout) {String editorAreaId = layout.getEditorArea();
layout.addView(IPageLayout.ID_RES_NAV, IPageLayout.BOTTOM, 0.45f, editorAreaId);
layout.addFastView(IPageLayout.ID_BOOKMARKS, 0.50f);
layout.addFastView(IPageLayout.ID_TASK_LIST, 0.50f);}
}
AddFastViewPerspectiveFactory.javadu Projet PerspectiveExample
La vue Bookmarks et la vue Tasks sont définies
comme FastView
Une vue FastView ajoutée via addFastView ajoute des raccourcis
et ne montre pas la vue
Les vues FastView ne sont pas directement visibles
dans la perspective
26Perspectives - M. Baron - Page
keul
keul
.blo
gspo
t.com
Perspectives : addStandaloneView
Caractéristiques d’une vue de type StandaloneViewNe peut être empilée avec une autre vue
Sa barre de titre peut être masquée.
L’interface IPageLayout fournit une méthode pour ajouter une vue de type StandaloneView à une perspective
void addStandaloneView(String viewId, boolean showTitle, intrelationship, float ratio, String refPartId)
boolean showTitle : si TRUE affiche la barre sinon ne l’affiche pas
viewId : identifiant de la vue à ajouter
relationship : position de la vue par rapport au référent (TOP,BOTTOM, LEFT et RIGHT)
ratio : spécifie comment diviser l’espace entre la vue viewId et sonréférent refPartId
refPartId : identifiant de la référence
27Perspectives - M. Baron - Page
keul
keul
.blo
gspo
t.com
Perspectives : addStandaloneView
Exemple : agencer une vue StandaloneView avec des vues
Projet PerspectiveExemple
La vue Bookmarkset Tasks sont de
simples vues
La vue Navigator est une StandaloneView
La vue Bookmarks peut être empilée avec la
vue Tasks
La vue Bookmarks ne peut être empilée avec la vue Navigator
28Perspectives - M. Baron - Page
keul
keul
.blo
gspo
t.com
Perspectives : addStandaloneView
Exemple (suite) : agencer une vue StandaloneView …
package eclipse.workbench.perspectiveexample.perspectives;
public class AddStandaloneViewPerspectiveFactory1 implements IPerspectiveFactory {
public void createInitialLayout(IPageLayout layout) {String editorAreaId = layout.getEditorArea();
layout.addView(IPageLayout.ID_BOOKMARKS, IPageLayout.LEFT, 0.25f, editorAreaId);
layout.addView(IPageLayout.ID_TASK_LIST, IPageLayout.BOTTOM, 0.45f, editorAreaId);
layout.addStandaloneView(IPageLayout.ID_RES_NAV, true, IPageLayout.BOTTOM, 0.45f,IPageLayout.ID_TASK_LIST);
}}
AddStandaloneViewPerspectiveFactory1.javadu Projet PerspectiveExample
La vue Navigator est définie comme StandaloneView. La barre
de titre est affichée
29Perspectives - M. Baron - Page
keul
keul
.blo
gspo
t.com
Perspectives : addStandaloneView
Exemple : agencer une vue StandaloneView sans titre
Projet PerspectiveExemple
La vue Bookmarkset Tasks sont de
simples vues
La vue Navigator est de type StandaloneView
La vue Navigator ne dispose pas de titre
30Perspectives - M. Baron - Page
keul
keul
.blo
gspo
t.com
Perspectives : addStandaloneView
Exemple (suite) : agencer une vue StandaloneView sans titre
La vue Navigator avec sa barre de titre et ses commandes
associées
La même vue Navigator sans barre
de titre
Si la vue StandaloneView dispose de commandes, l’ensemble des
commandes sera affiché dans la barre d’outils de la WorkbenchWindow
Si vous utilisez une vue en mode StandaloneView pensez à
désactiver ses commandes
31Perspectives - M. Baron - Page
keul
keul
.blo
gspo
t.com
Perspectives : addStandaloneView
Exemple (suite) : agencer une vue StandaloneView sans titre
package eclipse.workbench.perspectiveexample.perspectives;
public class AddStandaloneViewPerspectiveFactory1 implements IPerspectiveFactory {
public void createInitialLayout(IPageLayout layout) {String editorAreaId = layout.getEditorArea();
layout.addView(IPageLayout.ID_BOOKMARKS, IPageLayout.LEFT, 0.25f, editorAreaId);
layout.addView(IPageLayout.ID_TASK_LIST, IPageLayout.BOTTOM, 0.45f, editorAreaId);
layout.addStandaloneView(IPageLayout.ID_RES_NAV, false, IPageLayout.BOTTOM, 0.45f,IPageLayout.ID_TASK_LIST);
}}
AddStandaloneViewPerspectiveFactory2.javadu Projet PerspectiveExample
La vue Navigator est définie comme StandaloneView. La barre
de titre est cachée
32Perspectives - M. Baron - Page
keul
keul
.blo
gspo
t.com
Perspectives : addPlaceholder
Un Place Holder ou emplacement prédéfini permet de définir
dans une perspective donnée un emplacement favori d’une
vue sans l’afficher directement
Les vues ajoutées à un Place Holder ne sont pas directe-
ment visibles, elles le sont à posteriori lorsqu’une demande
d’affichage de vue est réalisée
L’intérêt du Place Holder est de pouvoir fixer l’emplacement
d’une vue à l’avance
33Perspectives - M. Baron - Page
keul
keul
.blo
gspo
t.com
Perspectives : addPlaceholder
L’interface IPageLayout fournit des méthodes pour ajouter une vue à un Place Holder
void addPlaceholder(String viewId, int relationship, float ratio, String refPartId)
String viewId : identifiant de la vue à ajouter
relationship : position de la vue par rapport au référent (TOP,BOTTOM, LEFT et RIGHT)
ratio : spécifie comment diviser l’espace entre la vue viewId et son référent refPartId
refPartId : identifiant de la référence
void addStandaloneViewPlaceholder(String viewId, int relationship, float ratio, String refPartId, boolean showTitle)
Paramètres identiques à la précédente méthode
showTitle : si TRUE affiche la barre sinon ne l’affiche pas
34Perspectives - M. Baron - Page
keul
keul
.blo
gspo
t.com
Perspectives : addPlaceholder
Exemple : fixer l’emplacement de deux vues
AddPlaceholderViewPerspectiveFactory.javadu Projet PerspectiveExample
A l’ouverture de la perspective, une seule vue est affichée
Les emplacements des vues Tasks et Navigator (StandaloneView) ont été fixés. A l’ouverture, les vues sont positionnées à la position prédéfinie
35Perspectives - M. Baron - Page
keul
keul
.blo
gspo
t.com
Perspectives : addPlaceholder
Exemple (suite) : fixer l’emplacement de deux vues
package eclipse.workbench.perspectiveexample.perspectives;
public class AddPlaceholderViewPerspectiveFactory implements IPerspectiveFactory {
public void createInitialLayout(IPageLayout layout) {
String editorAreaId = layout.getEditorArea();
layout.addView(IPageLayout.ID_BOOKMARKS, IPageLayout.LEFT, 0.50f, editorAreaId);
layout.addPlaceholder(IPageLayout.ID_TASK_LIST, IPageLayout.BOTTOM, 0.45f,editorAreaId);
layout.addStandaloneViewPlaceholder(IPageLayout.ID_RES_NAV, IPageLayout.BOTTOM,0.45f, IPageLayout.ID_TASK_LIST, false);
}
}
AddPlaceholderViewPerspectiveFactory.javadu Projet PerspectiveExample
Ajout un vue de type StandaloneViewdans un Place Holder
Ajout d’une vue dans un Place Holder
36Perspectives - M. Baron - Page
keul
keul
.blo
gspo
t.com
Perspectives : createFolder
Un Place Folder ou emplacement à onglets permet d’empiler dans une perspective donnée des vues à un emplacement favori
Les vues peuvent être ajoutées au Place Folder
Les vues sont accessibles sous la forme d’un onglet et peuvent être détachées du Place Folder
La vue Bookmarks, Tasks et Navigatorsont ajoutées à un Place Folder
37Perspectives - M. Baron - Page
keul
keul
.blo
gspo
t.com
Perspectives : createFolder
L’interface IPageLayout fournit une méthode pour ajouter un Place Folder à une perspective
IFolderLayout createFolder(String folderId, int relationship, float ratio, String refPartId)
String folderId : identifiant du nouveau Placer Folder
relationship : position de la vue par rapport au référent (TOP,BOTTOM, LEFT et RIGHT)
ratio : spécifie comment diviser l’espace entre le Place FolderfolderId et son référent refPartIdrefPartId : identifiant de la référence
L’interface IFolderLayout permet d’ajouter des éléments au Place Folder (pas uniquement des vues)
void addView(String viewId) : ajout d’une vue identifiée par viewIdvoid addPlaceHolder(String phID) : ajout d’un Place Holder identifiépar phID
38Perspectives - M. Baron - Page
keul
keul
.blo
gspo
t.com
Perspectives : createFolder
Exemple : création d’un Place Folder et ajout de trois vues
La vue Bookmarks, Tasks et Navigatorsont ajoutées à un Place Folder
AddCreateFolderViewPerspectiveFactory.javadu Projet PerspectiveExample
39Perspectives - M. Baron - Page
keul
keul
.blo
gspo
t.com
Perspectives : createFolder
Exemple (suite) : création d’un Place Folder et ajout de trois vues
package eclipse.workbench.perspectiveexample.perspectives;
public class AddCreateFolderViewPerspectiveFactory implements IPerspectiveFactory {
public void createInitialLayout(IPageLayout layout) {
String editorArea = layout.getEditorArea();
IFolderLayout createFolder = layout.createFolder("bottomFolder",
IPageLayout.BOTTOM, 0.45f, editorArea);
createFolder.addView(IPageLayout.ID_BOOKMARKS);
createFolder.addView(IPageLayout.ID_TASK_LIST);
createFolder.addView(IPageLayout.ID_RES_NAV);
}
}
AddCreateFolderViewPerspectiveFactory.javadu Projet PerspectiveExample
Création d’un Place Folderidentifié bottomFolder
Ajout de trois vues dans le Place Folder
L’agencement du Place Folder est défini d’une
manière semblable à celui d’une vue
40Perspectives - M. Baron - Page
keul
keul
.blo
gspo
t.comPerspectives : createPlaceholderFolder
Un Place Holder Folder ou emplacement prédéfini à onglets
permet de définir un emplacement favori pour empiler des
vues sans les afficher directement
L’interface IPageLayout fournit une méthode pour créer un
Place Holder Folder à une perspective
IPlaceholderFolderLayout createPlaceholderFolder(String folderId, int
relationship, float ratio, String refPartId) : …
L’interface IPlaceholderFolderLayout permet d’ajouter des
vues comme emplacement prédéfini
void addPlaceholderFolder(String idView) : ajout de la vue idView
41Perspectives - M. Baron - Page
keul
keul
.blo
gspo
t.comPerspectives : createPlaceholderFolder
Exemple : création d’un Place Holder Folder
package eclipse.workbench.perspectiveexample.perspectives;
public class AddCreatePlaceholderFolderViewPerspectiveFactory implements
IPerspectiveFactory {
public void createInitialLayout(IPageLayout layout) {
String editorArea = layout.getEditorArea();
IPlaceholderFolderLayout createPlaceholderFolder = layout.createPlaceholderFolder("bottomFolder", IPageLayout.BOTTOM, 0.45f, editorArea);
createPlaceholderFolder.addPlaceholder(IPageLayout.ID_BOOKMARKS);
createPlaceholderFolder.addPlaceholder(IPageLayout.ID_TASK_LIST);
createPlaceholderFolder.addPlaceholder(IPageLayout.ID_RES_NAV);
}
}
AddCreatePlaceholderFolderViewPerspectiveFactory.javadu Projet PerspectiveExample
Création d’un Place Hodler Folder identifié bottomFolder
Ajout de trois vues au Place Holder Folder
42Perspectives - M. Baron - Page
keul
keul
.blo
gspo
t.com
Perspectives : raccourcis
Différents types de raccourcis peuvent être ajoutés à une perspective
Raccourcis sur des actions
Raccourcis pour changer la perspective
Raccourcis pour démarrer un assistant
Raccourcis pour ouvrir une vue
L’interface IPageLayout fournit des méthodes pour ajouter des raccourcis
void addActionSet(String actionId) : ajout d’un raccourci action
void addNewWizardShortcut(String wizardId) : ajout d’un raccourci assistant
void addPerspectiveShortcut(String perspId) : ajout d’un raccourci sur une perspecive
void addShowViewShortcut(String viewId) : ajout d’un raccourci sur une vue
Dans le cours Commands, on montrera comment
obtenir le même résultat avec les commandes
A éviter préférer les commandes
43Perspectives - M. Baron - Page
keul
keul
.blo
gspo
t.com
Perspectives : raccourcis
Exemple : création de raccourcis
Liste les raccourcis sur les assistants
Le raccourci sur l'assistant Création de Fichier a été
ajouté
Barre d'outils où seront ajoutés les raccourcis sur les
commandesLe raccourci sur la
commande Synchronisationa été ajouté
Liste les raccourcis sur les perspectives
Le raccourci sur la perspective Resource a
été ajouté
Liste les raccourcis sur les vues
Le raccourci sur la vue Console a été ajouté
CustomPerspectiveFactory1.java du Projet PerspectiveExample
44Perspectives - M. Baron - Page
keul
keul
.blo
gspo
t.com
Perspectives : raccourcis
Exemple (suite) : création de raccourcis
package eclipse.workbench.perspectiveexample.perspectives;
public class CustomPerspectiveFactory1 implements IPerspectiveFactory {
public void createInitialLayout(IPageLayout layout) {
String editorAreaId = layout.getEditorArea();
layout.addView(IPageLayout.ID_BOOKMARKS, IPageLayout.LEFT, 0.25f, editorAreaId);
layout.addActionSet("org.eclipse.team.ui.actionSet");
layout.addNewWizardShortcut("org.eclipse.ui.wizards.new.file");
layout.addPerspectiveShortcut("org.eclipse.ui.resourcePerspective");
layout.addShowViewShortcut(IConsoleConstants.ID_CONSOLE_VIEW);
}
}}
CustomPerspectiveFactory1.java du Projet PerspectiveExample
Ajout d’un raccourci Action Ajout d’un raccourci Assistant pour la création
de fichiers
Ajout d’un raccourci PerspectiveAjout d’un raccourci sur la vue Console
45Perspectives - M. Baron - Page
keul
keul
.blo
gspo
t.com
Perspectives : paramétrages
Possibilité de modifier certaines caractéristiques d’une perspective
void setEditorAreaVisible(boolean isVisible) : affiche ou pas la zone des éditeurs
void setFixed(boolean isFixed) : désactive l’agrandissement d’une vue
CustomPerspectiveFactory2.java du Projet PerspectiveExample
La zone des éditeurs n’est pas affichés
Exemple : pas de zone des éditeurs ni d’agrandissement …
46Perspectives - M. Baron - Page
keul
keul
.blo
gspo
t.com
Perspectives : paramétrages
Exemple (suite) : pas de zone des éditeurs ni agrandissement
Agrandissement non autorisé
Affichages quand l’agrandissement est autorisé
47Perspectives - M. Baron - Page
keul
keul
.blo
gspo
t.com
Perspectives : paramétrages
Exemple (suite) : pas de zone des éditeurs ni agrandissement
package eclipse.workbench.perspectiveexample.perspectives;
public class CustomPerspectiveFactory2 implements IPerspectiveFactory {
public void createInitialLayout(IPageLayout layout) {
String editorAreaId = layout.getEditorArea();
layout.addView(IPageLayout.ID_BOOKMARKS, IPageLayout.LEFT, 0.25f, editorAreaId);
layout.addView(IPageLayout.ID_TASK_LIST, IPageLayout.BOTTOM, 0.45f, editorAreaId);
layout.setEditorAreaVisible(false);
layout.setFixed(true);
}
}
CustomPerspectiveFactory2.java du Projet PerspectiveExample
Désactivation de la zone des éditeurs et de
l’agrandissement des vues
Même si la zone des éditeurs n’est plus visible, elle est utilisée comme référent pour ajouter les vues à la perspective
48Perspectives - M. Baron - Page
keul
keul
.blo
gspo
t.com
Perspectives : Perspective Extensions
Nous avons montré précédemment la construction d’une
perspective par l’intermédiaire du point d’extension
org.eclipse.ui.perspective
Construction d’une classe de type IPerspectiveFactory
L’agencement des vues se fait de manière programmatique
Ne peut étendre une perspective déjà existante
La plateforme Eclipse fournit un point d’extension
org.eclipse.ui.perspectiveExtensions permettant de
Construire déclarativement une perspective (agencer des vues, ajouter
des raccourcis, …) via l’outil PDE
Etendre une perspective existante
49Perspectives - M. Baron - Page
keul
keul
.blo
gspo
t.com
Perspectives : Perspective Extensions
Choisir le point d’extension perspectiveExtensions
Sélectionner le point org.eclipse.ui.perspectiveExtensions
50Perspectives - M. Baron - Page
keul
keul
.blo
gspo
t.com
Perspectives : Perspective Extensions
Définition de la perspective qui sera étendue
L’utilisation du point d’extension PerspectiveExtension nécessite qu’une
perspective existe (soit de la plateforme Eclipse soit explicitement)Onglet Extensions
51Perspectives - M. Baron - Page
keul
keul
.blo
gspo
t.com
Perspectives : Perspective Extensions
package eclipse.workbench.perspectiveexample.perspectives;
public class EmptyPerspectiveFactory implements IPerspectiveFactory {
public void createInitialLayout(IPageLayout layout) {
// Ceci est une perspective vide.
}
}
EmptyPerspectiveFactory.java du Projet PerspectiveExample
Aucune modification n’a étéapportée à la perspective
Nous aurions pu également utiliser une perspective
prédéfinie par la plateforme et contenant déjà des vues
52Perspectives - M. Baron - Page
keul
keul
.blo
gspo
t.com
Perspectives : Perspective Extensions
Possibilité d’ajouter des vues et des raccourcis àla perspective étendue
Onglet Extensions
showInPart permet d’ajouter des vues dans le menu Navigate -> Show In
53Perspectives - M. Baron - Page
keul
keul
.blo
gspo
t.com
Perspectives : Perspective Extensions
Ajout d’une vue dans la perspective étendue
Identifiant de la vue à ajouter
Emplacement de la vue
Par rapport àquelle autre vue
Ratio de division
La vue est-elle visible ou pas ?
La vue peut-elle être fermée ou pas ? La vue peut-elle être
déplacée ou pas ?S’agit-il d’une vue de
type Standalone ou pas ?Si elle est Standalonele titre est-il affiché ou
pas ?
Mêmes caractéristiques que pour l’approche par programmation
(voir précédemment)
54Perspectives - M. Baron - Page
keul
keul
.blo
gspo
t.com
Perspectives : Perspective Extensions
Exemple : refaire à l’identique AddViewPerspective
Trois vues sont ajoutées à la
perspective vide
55Perspectives - M. Baron - Page
keul
keul
.blo
gspo
t.comPerspectives : construction à l’exécution
Précédemment nous avons montré comment créer une
perspective au niveau de la phase de développement
Cette troisième solution permet de créer une perspective
en cours d’exécution de l’application
Démarche à entreprendre …
L’utilisateur choisit quelles sont les vues à afficher
dans la perspective et les agencent de manière
interactive
Il sauvegarde ensuite la perspective en lui
donnant un nom qui servira d’identifiant
Menu Window -> Save Perspective As …
56Perspectives - M. Baron - Page
keul
keul
.blo
gspo
t.comPerspectives : registre des perspectives
Le registre des perspectives est utilisé par le conteneur
Eclipse pour stocker l’intégralité des perspectives créées
Il n’existe qu’un seul registre de perspective géré par le
Workbench
A partir de ce registre il est possible de
Chercher une perspective
Supprimer une perspective
IPerspectiveRegistry perspRegistry = PlatformUI.getWorkbench().getPerspectiveRegistry();
L’interface IPerspectiveRegistry est détaillée dans la suite
Seules les perspectives construites à l’exécution
sont supprimables
57Perspectives - M. Baron - Page
keul
keul
.blo
gspo
t.comPerspectives : registre des perspectives
L’interface IPerspectiveRegistry fournit un ensemble de méthodes pour identifier et effacer des perspectives
IPerspectiveDescriptor clonePerspective(String id, String label, IPerspectiveDescriptor desc) : création d’un clone de la perspective desc avec un nouvel id et label
void deletePerspective(IPerspectiveDescriptor desc) : suppression d’une perspective (ne fonctionne pas pour les perspectives définies par une extension)
IPerspectiveDescriptor findPerspectiveWithId(String idPersp) : recherche une perspective à partir de son identifiant idPersp
IPerspectiveDescriptor[] getPerspectives() : retourne la liste complète des perspectives
String getDefaultPerspective() : retourne la perspective par défaut
void setDefaultPerspective(String id) : modifie la perspective par défaut
58Perspectives - M. Baron - Page
keul
keul
.blo
gspo
t.comPerspectives : registre des perspectives
Une perspective est définie via l’interface de programmation IPerspectiveDescriptor
Cette interface contient tous les accesseurs caractérisant une perspective
String getId() : l’identifiant de la perspective
Sting getLabel() : le nom de la perspective
String getDescription() : la description de la perspective
ImageDescriptor() : l’image de la perspective
Identifiant
Nom
Image
La description est définie comme un
sous élément d’une extension
59Perspectives - M. Baron - Page
keul
keul
.blo
gspo
t.comPerspectives : registre des perspectives
Exemple : manipuler le registre des perspectives
PerspectiveRegistryViewPart du Projet PerspectiveExample
Affiche les informations de la perspective
AddFastViewPerspective
Supprime la perspective CustomPerspective
Affiche toutes les perspectives du registre
La perspective CustomPerspective a été construite à l’exécution
60Perspectives - M. Baron - Page
keul
keul
.blo
gspo
t.comPerspectives : registre des perspectives
Exemple (suite) : manipuler le registre des perspectivespackage eclipse.workbench.perspectiveexample.views;
public class PerspectiveRegistryViewPart extends ViewPart {
public void createPartControl(Composite parent) {
...
Button searchPerspective = new Button(parent, SWT.FLAT);
searchPerspective.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
IPerspectiveRegistry perspectiveRegistry= PlatformUI.getWorkbench().getPerspectiveRegistry();IPerspectiveDescriptor findPerspectiveWithId =
perspectiveRegistry.findPerspectiveWithId("eclipse.workbench.PerspectiveExample.AddFastViewPerspective");
if (findPerspectiveWithId !=null) {
System.out.println(findPerspectiveWithId.getId());
System.out.println(findPerspectiveWithId.getLabel());
System.out.println(findPerspectiveWithId.getDescription());
}
}
});
searchPerspective.setText("Find : AddFastViewPerspective");
...
}
}
PerspectiveRegistryViewPart.java du Projet PerspectiveExample
Recherche une perspective à partir de
son identifiant
61Perspectives - M. Baron - Page
keul
keul
.blo
gspo
t.com
Perspectives : écouteurs
Tout changement réalisé par la perspective peut être écoutéActivation et désactivation d’une perspective
Ouverture et fermeture d’une perspective
Modification du contenu d’une perspective (nouvelle vue, …)
Enregistrement d’une perspective
L’abonnement se fait à partir du WorkbenchWindowrécupérable de deux manières
La méthode addPerspectiveListener(IPerspectiveListener p)est utilisée pour ajouter un écouteur sur la perspective
IWorkbenchWindow workbenchWindow = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
IWorkbenchWindow workbenchWindow = getSite().getWorkbenchWindow(); A n’utiliser que s’il n’existe qu’une fenêtre
dans l’applicationA utiliser dans une ViewPartou EditorPart
62Perspectives - M. Baron - Page
keul
keul
.blo
gspo
t.com
Perspectives : écouteurs
Plusieurs sous interfaces à IPerspectiveListener ont été
définies et sont apparues au fil des versions d’Eclipse
Interface IPerspectiveListener
void perspectiveActivated(IWorkbenchPage page,
IPerspectiveDescriptor perspective) : déclenchée quand perspective
devient active
void perspectiveChanged(IWorkbenchPage page,
IPerspectiveDescriptor perspective, String changeId) : déclenchée
quand perspective est modifiée (changeId décrit le changement)
Les valeurs possibles de changeId sont définit dans l’interface
IWorkbenchPage par les constantes CHANGE_*
63Perspectives - M. Baron - Page
keul
keul
.blo
gspo
t.com
Perspectives : écouteurs
Interface IPerspectiveListener2void perspectiveChanged(IWorkbenchPage page, IPerspectiveDescriptor perspective, IWorkbenchPartReference part, String changeId) : identique à la méthode précédente à part qu’il est possible de connaître la vue ou l’éditeur impactée
Interface IPerspectiveListener3void perspectiveClosed(IWorkbenchPage p, IPerspectiveDescriptor p) : déclenchée si la perspective est fermée
void perspectiveDeactivated(IWorkbenchPage p,IPerspectiveDescriptor pDesc) : déclenchée si pDesc est désactivée
void perspectiveOpened(IWorkbenchPage p, IPerspectiveDescriptorpDesc) : déclenchée si la perspective a été ouverte
void perspectiveSaveAs(IWorkbenchPage p, IPerspectiveDescriptorold, IPerspectiveDescriptor new) : déclenchée quand la perspective est sauvegardée
64Perspectives - M. Baron - Page
keul
keul
.blo
gspo
t.com
Perspectives : écouteurs
Interface IPerspectiveListener4
void perspectivePreDeactivate(IWorkbenchPage page,
IPerspectiveDescriptor perspective) : déclenchée avant que
perspective soit désactivée
Principales valeurs de changeId
CHANGE_ACTION_SET_HIDE/SHOW : action est cachée ou montrée
CHANGE_EDITOR_AREA_HIDE/SHOW : éditeur est caché ou montré
CHANGE_EDITOR_CLOSE/OPEN : éditeur fermé ou montré
CHANGE_FAST_VIEW_ADD/REMOVE : fastview ajoutée ou montrée
CHANGE_VIEW_HIDE/SHOW : vue cachée ou montrée
CHANGE_RESET : reset de la perspective ou pas
65Perspectives - M. Baron - Page
keul
keul
.blo
gspo
t.com
Perspectives : écouteurs
Exemple : écouter les changements d’une perspective
package eclipse.workbench.perspectiveexample;
public class Activator extends AbsractUIPlugin {
public void start(BundleContext context) throws Exception {super.start(context);plugin = this;
IWorkbenchWindow activeWorkbenchWindow = PlatformUI.getWorkbench().getActiveWorkbenchWindow();activeWorkbenchWindow.addPerspectiveListener(new IPerspectiveListener4() {
public void perspectiveActivated(IWorkbenchPage page, IPerspectiveDescriptor perspective) {System.out.println("Activated " + perspective.getId());
}
public void perspectiveChanged(IWorkbenchPage page, IPerspectiveDescriptor perspective, String changeId) {System.out.println("Changed " + perspective.getId() + " " + changeId);
}
...});
}}
Activator.java du Projet PerspectiveExample
Récupération de la fenêtre active
IWorkbenchWindow
66Perspectives - M. Baron - Page
keul
keul
.blo
gspo
t.com
Perspectives : principales opérations
La plateforme Eclipse fournit un ensemble d’opérations
prédéfinies sur des traitements concernant les perspectives
org.eclipse.ui.perspectives.showPerspective : montrer une
perspective en particulier
org.eclipse.ui.window.closeAllPerspectives : fermer toutes les
perspectives
org.eclipse.ui.window.closePerspective : fermer la perspective urante
org.eclipse.ui.window.customizePerspective : paramétrer la
perspective courante
org.eclipse.ui.window.nextPerspective : afficher la perspective
suivant la perspective courante
67Perspectives - M. Baron - Page
keul
keul
.blo
gspo
t.com
Perspectives : principales opérations
org.eclipse.ui.window.previousPerspective : afficher la perspective
précédent la perspective courante
org.eclipse.ui.window.resetPerspective : initialiser la perspective
courante
org.eclipse.ui.window.savePerspective : sauvegarder la perspective
courante
Ces opérations prédéfinies sont gérées par l’API Commands
qui sera étudiée dans un prochain support de cours du
Workbench
68Perspectives - M. Baron - Page
keul
keul
.blo
gspo
t.com
Perspectives : principales opérations
Exemple : exécuter une commande programmatiquement
package eclipse.workbench.perspectiveexample;
public class PerspectiveCommandsViewPart extends ViewPart {public void createPartControl(Composite parent) {
parent.setLayout(new GridLayout(2, true));
Button resetButton = new Button(parent, SWT.PUSH);resetButton.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {try {
IHandlerService hs = (IHandlerService) PlatformUI.getWorkbench().getService(IHandlerService.class);
hs.executeCommand("org.eclipse.ui.window.resetPerspective", null);} catch (Exception e1) {
e1.printStackTrace();}
}});resetButton.setText("Reset Perspective");
}}
PerspectiveCommandsViewPart.java du Projet PerspectiveExample
Exécution de la commande
« resetPerspective »par l’appui d’un bouton
69Perspectives - M. Baron - Page
keul
keul
.blo
gspo
t.com
Perspectives : principales opérations
Exemple : exécuter une commande dans la barre d’outils d’une vue Une commande dans la barre d’outils de la vue
(org.eclipse.ui.window.customizePerspective)
Une commande dans le menu localisé de la vue(org.eclipse.ui.perspectives.showPerspective)
PerspectiveCommandsViewPart.java du Projet PerspectiveExample
A voir dans la partie Commands, comment définir déclarativement
de nouveaux éléments à une barre d’outils et à un menu
localisé d’une vue