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

Construction de perspectives avec la plateforme Eclipse

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

Page 1: Construction de perspectives avec la plateforme Eclipse

Développement de clients riches : Plateforme Eclipse

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

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

Workbench : Perspectives

Page 2: Construction de perspectives avec la plateforme Eclipse

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

Page 3: Construction de perspectives avec la plateforme Eclipse

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

Page 4: Construction de perspectives avec la plateforme Eclipse

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

Page 5: Construction de perspectives avec la plateforme Eclipse

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

Page 6: Construction de perspectives avec la plateforme Eclipse

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

Page 7: Construction de perspectives avec la plateforme Eclipse

7Perspectives - M. Baron - Page

keul

keul

.blo

gspo

t.com

Perspectives : généralités

Perspective Java

Page 8: Construction de perspectives avec la plateforme Eclipse

8Perspectives - M. Baron - Page

keul

keul

.blo

gspo

t.com

Perspectives : généralités

Perspective Debug

Page 9: Construction de perspectives avec la plateforme Eclipse

9Perspectives - M. Baron - Page

keul

keul

.blo

gspo

t.com

Perspectives : généralités

Perspective Java Browsing

Page 10: Construction de perspectives avec la plateforme Eclipse

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é

Page 11: Construction de perspectives avec la plateforme Eclipse

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

Page 12: Construction de perspectives avec la plateforme Eclipse

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

Page 13: Construction de perspectives avec la plateforme Eclipse

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

Page 14: Construction de perspectives avec la plateforme Eclipse

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

Page 15: Construction de perspectives avec la plateforme Eclipse

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

Page 16: Construction de perspectives avec la plateforme Eclipse

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

Page 17: Construction de perspectives avec la plateforme Eclipse

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

Page 18: Construction de perspectives avec la plateforme Eclipse

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

Page 19: Construction de perspectives avec la plateforme Eclipse

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

Page 20: Construction de perspectives avec la plateforme Eclipse

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

Page 21: Construction de perspectives avec la plateforme Eclipse

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

Page 22: Construction de perspectives avec la plateforme Eclipse

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

Page 23: Construction de perspectives avec la plateforme Eclipse

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

Page 24: Construction de perspectives avec la plateforme Eclipse

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

Page 25: Construction de perspectives avec la plateforme Eclipse

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

Page 26: Construction de perspectives avec la plateforme Eclipse

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

Page 27: Construction de perspectives avec la plateforme Eclipse

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

Page 28: Construction de perspectives avec la plateforme Eclipse

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

Page 29: Construction de perspectives avec la plateforme Eclipse

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

Page 30: Construction de perspectives avec la plateforme Eclipse

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

Page 31: Construction de perspectives avec la plateforme Eclipse

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

Page 32: Construction de perspectives avec la plateforme Eclipse

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

Page 33: Construction de perspectives avec la plateforme Eclipse

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

Page 34: Construction de perspectives avec la plateforme Eclipse

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

Page 35: Construction de perspectives avec la plateforme Eclipse

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

Page 36: Construction de perspectives avec la plateforme Eclipse

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

Page 37: Construction de perspectives avec la plateforme Eclipse

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

Page 38: Construction de perspectives avec la plateforme Eclipse

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

Page 39: Construction de perspectives avec la plateforme Eclipse

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

Page 40: Construction de perspectives avec la plateforme Eclipse

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

Page 41: Construction de perspectives avec la plateforme Eclipse

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

Page 42: Construction de perspectives avec la plateforme Eclipse

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

Page 43: Construction de perspectives avec la plateforme Eclipse

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

Page 44: Construction de perspectives avec la plateforme Eclipse

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

Page 45: Construction de perspectives avec la plateforme Eclipse

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 …

Page 46: Construction de perspectives avec la plateforme Eclipse

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é

Page 47: Construction de perspectives avec la plateforme Eclipse

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

Page 48: Construction de perspectives avec la plateforme Eclipse

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

Page 49: Construction de perspectives avec la plateforme Eclipse

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

Page 50: Construction de perspectives avec la plateforme Eclipse

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

Page 51: Construction de perspectives avec la plateforme Eclipse

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

Page 52: Construction de perspectives avec la plateforme Eclipse

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

Page 53: Construction de perspectives avec la plateforme Eclipse

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)

Page 54: Construction de perspectives avec la plateforme Eclipse

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

Page 55: Construction de perspectives avec la plateforme Eclipse

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 …

Page 56: Construction de perspectives avec la plateforme Eclipse

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

Page 57: Construction de perspectives avec la plateforme Eclipse

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

Page 58: Construction de perspectives avec la plateforme Eclipse

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

Page 59: Construction de perspectives avec la plateforme Eclipse

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

Page 60: Construction de perspectives avec la plateforme Eclipse

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

Page 61: Construction de perspectives avec la plateforme Eclipse

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

Page 62: Construction de perspectives avec la plateforme Eclipse

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_*

Page 63: Construction de perspectives avec la plateforme Eclipse

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

Page 64: Construction de perspectives avec la plateforme Eclipse

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

Page 65: Construction de perspectives avec la plateforme Eclipse

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

Page 66: Construction de perspectives avec la plateforme Eclipse

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

Page 67: Construction de perspectives avec la plateforme Eclipse

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

Page 68: Construction de perspectives avec la plateforme Eclipse

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

Page 69: Construction de perspectives avec la plateforme Eclipse

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