• Like
Construction de perspectives avec la plateforme Eclipse
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

Construction de perspectives avec la plateforme Eclipse

  • 3,819 views
Published

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 …

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.

Published in Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
3,819
On SlideShare
0
From Embeds
0
Number of Embeds
7

Actions

Shares
Downloads
89
Comments
0
Likes
1

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Développement de clients riches : Plateforme Eclipse Chapitre 3 : Conception de plug-ins Workbench : Perspectives Mickaël BARON - 2009 mailto:baron.mickael@gmail.com ou mailto:baron@ensma.fr
  • 2. Licence Creative Commons Contrat Paternité Partage des Conditions Initiales à l'Identique 2.0 France keulkeul.blogspot.com http://creativecommons.org/licenses/by-sa/2.0/fr Perspectives - M. Baron - Page 2
  • 3. Organisation du cours sur le Workbench : Perspectives Construction déclarative Ajout de vues Paramétrage Etendre une perspective existante Registre des perspectives Ecouter les changements keulkeul.blogspot.com Principales opérations Tous les exemples du cours sont disponibles directement à l’adresse mbaron.developpez.com/eclipse/perspectives Perspectives - M. Baron - Page 3
  • 4. 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 Ceci est une astuce Eclipse 3.4.2 Ganymede Ceci est une alerte Pré-requis Connaître la structure d’un plug-ins et savoir créer une extension keulkeul.blogspot.com Généralités sur le Workbench Remerciement Developpez.com : djo.mos (Jawher MOUSSA) Perspectives - M. Baron - Page 4
  • 5. Workbench 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 keulkeul.blogspot.com Perspectives - M. Baron - Page 5
  • 6. Perspectives : généralités Une perspective est un regroupement de vues, d’éditeurs et 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 Les commandes Raccourcis pour changer la perspective remplacent les actions, Raccourcis pour démarrer un assistant voir le cours Commands keulkeul.blogspot.com pour des détails Raccourcis pour ouvrir une vue supplémentaires Exemples des perspectives prédéfinies du développeur Java Java, Debug, Java Browsing … Perspectives - M. Baron - Page 6
  • 7. Perspectives : généralités Perspective Java keulkeul.blogspot.com Perspectives - M. Baron - Page 7
  • 8. Perspectives : généralités Perspective Debug keulkeul.blogspot.com Perspectives - M. Baron - Page 8
  • 9. Perspectives : généralités Perspective Java Browsing keulkeul.blogspot.com Perspectives - M. Baron - Page 9
  • 10. Perspectives : généralités Personnalisation des raccourcis d'une perspective Barre d'outils où seront Liste les raccourcis sur les ajoutés les raccourcis sur les perspectives Liste les raccourcis sur les commandes. Le raccourci sur la assistants Le raccourci sur la commande perspective Resource a Le raccourci sur l'assistant Synchronisation a été ajouté été ajouté Création de Fichier a été ajouté keulkeul.blogspot.com Liste les raccourcis sur les vues Le raccourci sur la vue Console a été ajouté Perspectives - M. Baron - Page 10
  • 11. Perspectives : généralités La construction d’une perspective peut être réalisée de trois manières différentes Programmatiquement Utilisation du point d’extension org.eclipse.ui.perspective Nécessite la construction d’une classe de type IPerspectiveFactory L’agencement des vues et de l’éditeur est codé dans cette classe Déclarativement Utilisation du point d’extension org.eclipse.ui.perspectiveExtensions L’agencement est défini au travers de l’outil PDE via les paramètres de l’extension keulkeul.blogspot.com En cours d’exécution La construction se fait pendant l’exécution de l’application L’utilisateur agence ses vues puis sauvegarde une nouvelle perspective personnalisée Perspectives - M. Baron - Page 11
  • 12. Perspectives : construction d'une extension Sélectionner le point d’extension org.eclipse.ui.perspectives Point d'extension à créer keulkeul.blogspot.com Perspectives - M. Baron - Page 12
  • 13. Perspectives : construction d'une extension Ajouter une nouvelle perspective Ajout d'une nouvelle perspective keulkeul.blogspot.com Projet PerspectiveExemple Onglet Extensions Perspectives - M. Baron - Page 13
  • 14. Perspectives : construction d'une extension Saisir les paramètres de la perspective créée 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 keulkeul.blogspot.com perspective doit être créée Personnalisation de la perspective Perspectives - M. Baron - Page 14
  • 15. Perspectives : construction d'une extension Créer la classe EmptyPerspectiveFactory en implémentant l'interface IPerspectiveFactory EmptyPerspectiveFactory.java du Projet PerspectiveExample package eclipse.workbench.perspectiveexample; public class EmptyPerspectiveFactory implements IPerspectiveFactory { public void createInitialLayout(IPageLayout layout) { // Ceci est une perspective vide ... } } keulkeul.blogspot.com Seule la méthode createInitialLayout Aucune vue ni éditeur n'ont doit être implémentée été ajoutés dans cette perspective Perspectives - M. Baron - Page 15
  • 16. Perspectives : construction d'une extension Tester la perspective Empty Perspective … keulkeul.blogspot.com Projet Comme prévu la perspective Empty Perspective PerspectiveExemple ne contient aucune vue Perspectives - M. Baron - Page 16
  • 17. 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) keulkeul.blogspot.com 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 - M. Baron - Page Perspectives 17
  • 18. 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 Tasks La vue Bookmarks est positionnée à la gauche de la zone des éditeurs La vue Tasks est positionnée au keulkeul.blogspot.com dessous de la zone des éditeurs La vue Navigator est positionnée au dessous de la vue Bookmarks Perspectives - M. Baron - Page 18
  • 19. Perspectives : addView Exemple (suite) : agencer trois vues dans une perspective AddViewPerspectiveFactory.java du Projet PerspectiveExample package eclipse.workbench.perspectiveexample.perspectives; public class AddViewPerspectiveFactory implements IPerspectiveFactory { public void createInitialLayout(IPageLayout layout) { Récupération de l’Id String editorAreaId = layout.getEditorArea(); de la zone des éditeurs layout.addView(IPageLayout.ID_BOOKMARKS, IPageLayout.LEFT, 0.25f, editorAreaId); 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 layout.addView(IPageLayout.ID_TASK_LIST, IPageLayout.BOTTOM, 0.45f, editorAreaId); keulkeul.blogspot.com layout.addView(IPageLayout.ID_RES_NAV, IPageLayout.BOTTOM, 0.45f, IPageLayout.ID_TASK_LIST); } Le référent est la zone } des éditeurs Le référent peut également être une vue Perspectives - M. Baron - Page 19
  • 20. Perspectives : addView 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 keulkeul.blogspot.com 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 - M. Baron - Page 20
  • 21. 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 keulkeul.blogspot.com La vue Bookmarks occupera 25% de l’espace défini avec la zone des éditeurs 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 Tasks occupera 45% de l’espace défini avec la vue Navigator Perspectives - M. Baron - Page 21
  • 22. Perspectives : addView (ratio) Editeur 25% 45% 75 % Vue Bookmarks placée à gauche 45% 55% Vue Tasks placée au dessous de la keulkeul.blogspot.com zone des éditeurs Vue Navigator 55% placée au dessous de la vue Tasks Perspectives - M. Baron - Page 22
  • 23. Perspectives : addFastView Exemple : ajouter deux vues FastView à une perspective Projet PerspectiveExemple La vue Bookmarks est FastView keulkeul.blogspot.com Les deux vues Elle est affichée sans être FastView ajoutées à figée à la perspective. la perspective sont A la perte du focus la vue est affichable via les automatiquement fermée raccourcis Perspectives - M. Baron - Page 23
  • 24. Perspectives : addFastView Caractéristiques d’une vue de type FastView N’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 keulkeul.blogspot.com void addFastView(String viewId, float ratio) viewId : identifiant de la vue à transformer en FastView ratio : pourcentage de la fenêtre Workbench qu’occupera la FastView Perspectives - M. Baron - Page 24
  • 25. Perspectives : addFastView Exemple (suite) : ajouter deux vues FastView à une … AddFastViewPerspectiveFactory.java du Projet PerspectiveExample 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); La vue Bookmarks et la vue Tasks sont définies layout.addFastView(IPageLayout.ID_TASK_LIST, 0.50f); } comme FastView keulkeul.blogspot.com } Une vue FastView ajoutée via Les vues FastView ne sont addFastView ajoute des raccourcis pas directement visibles et ne montre pas la vue dans la perspective Perspectives - M. Baron - Page 25
  • 26. Perspectives : addStandaloneView Caractéristiques d’une vue de type StandaloneView Ne 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, int relationship, 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, keulkeul.blogspot.com 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 Perspectives - M. Baron - Page 26
  • 27. Perspectives : addStandaloneView Exemple : agencer une vue StandaloneView avec des vues Projet PerspectiveExemple La vue Bookmarks peut être empilée avec la vue Tasks La vue Bookmarks La vue Navigator est et Tasks sont de une StandaloneView simples vues keulkeul.blogspot.com La vue Bookmarks ne peut être empilée avec la vue Navigator Perspectives - M. Baron - Page 27
  • 28. Perspectives : addStandaloneView Exemple (suite) : agencer une vue StandaloneView … AddStandaloneViewPerspectiveFactory1.java du Projet PerspectiveExample 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); keulkeul.blogspot.com } } La vue Navigator est définie comme StandaloneView. La barre de titre est affichée Perspectives - M. Baron - Page 28
  • 29. Perspectives : addStandaloneView Exemple : agencer une vue StandaloneView sans titre Projet PerspectiveExemple La vue Navigator est de La vue Bookmarks type StandaloneView et Tasks sont de simples vues keulkeul.blogspot.com La vue Navigator ne dispose pas de titre Perspectives - M. Baron - Page 29
  • 30. Perspectives : addStandaloneView Exemple (suite) : agencer une vue StandaloneView sans 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 keulkeul.blogspot.com La vue Navigator avec sa barre La même vue de titre et ses commandes Navigator sans barre associées de titre Perspectives - M. Baron - Page 30
  • 31. Perspectives : addStandaloneView Exemple (suite) : agencer une vue StandaloneView sans titre AddStandaloneViewPerspectiveFactory2.java du Projet PerspectiveExample 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); keulkeul.blogspot.com } } La vue Navigator est définie comme StandaloneView. La barre de titre est cachée Perspectives - M. Baron - Page 31
  • 32. 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 keulkeul.blogspot.com L’intérêt du Place Holder est de pouvoir fixer l’emplacement d’une vue à l’avance Perspectives - M. Baron - Page 32
  • 33. 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 keulkeul.blogspot.com 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 Perspectives - M. Baron - Page 33
  • 34. Perspectives : addPlaceholder Exemple : fixer l’emplacement de deux vues AddPlaceholderViewPerspectiveFactory.java du Projet PerspectiveExample A l’ouverture de la perspective, une keulkeul.blogspot.com 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 Perspectives - M. Baron - Page 34
  • 35. Perspectives : addPlaceholder Exemple (suite) : fixer l’emplacement de deux vues AddPlaceholderViewPerspectiveFactory.java du Projet PerspectiveExample 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); Ajout d’une vue dans un Place Holder keulkeul.blogspot.com layout.addStandaloneViewPlaceholder(IPageLayout.ID_RES_NAV, IPageLayout.BOTTOM, 0.45f, IPageLayout.ID_TASK_LIST, false); } } Ajout un vue de type StandaloneView dans un Place Holder Perspectives - M. Baron - Page 35
  • 36. 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 keulkeul.blogspot.com La vue Bookmarks, Tasks et Navigator sont ajoutées à un Place Folder Perspectives - M. Baron - Page 36
  • 37. 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 Folder folderId et son référent refPartId refPartId : identifiant de la référence L’interface IFolderLayout permet d’ajouter des éléments au keulkeul.blogspot.com Place Folder (pas uniquement des vues) void addView(String viewId) : ajout d’une vue identifiée par viewId void addPlaceHolder(String phID) : ajout d’un Place Holder identifié par phID Perspectives - M. Baron - Page 37
  • 38. Perspectives : createFolder Exemple : création d’un Place Folder et ajout de trois vues La vue Bookmarks, Tasks et Navigator sont ajoutées à un Place Folder AddCreateFolderViewPerspectiveFactory.java keulkeul.blogspot.com du Projet PerspectiveExample Perspectives - M. Baron - Page 38
  • 39. Perspectives : createFolder Exemple (suite) : création d’un Place Folder et ajout de trois vues AddCreateFolderViewPerspectiveFactory.java du Projet PerspectiveExample package eclipse.workbench.perspectiveexample.perspectives; public class AddCreateFolderViewPerspectiveFactory implements IPerspectiveFactory { public void createInitialLayout(IPageLayout layout) { String editorArea = layout.getEditorArea(); Création d’un Place Folder identifié bottomFolder IFolderLayout createFolder = layout.createFolder("bottomFolder", IPageLayout.BOTTOM, 0.45f, editorArea); L’agencement du createFolder.addView(IPageLayout.ID_BOOKMARKS); Place Folder est défini d’une manière semblable à celui keulkeul.blogspot.com createFolder.addView(IPageLayout.ID_TASK_LIST); d’une vue createFolder.addView(IPageLayout.ID_RES_NAV); } } Ajout de trois vues dans le Place Folder Perspectives - M. Baron - Page 39
  • 40. Perspectives : 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) : … keulkeul.blogspot.com L’interface IPlaceholderFolderLayout permet d’ajouter des vues comme emplacement prédéfini void addPlaceholderFolder(String idView) : ajout de la vue idView Perspectives - M. Baron - Page 40
  • 41. Perspectives : createPlaceholderFolder Exemple : création d’un Place Holder Folder AddCreatePlaceholderFolderViewPerspectiveFactory.java du Projet PerspectiveExample package eclipse.workbench.perspectiveexample.perspectives; public class AddCreatePlaceholderFolderViewPerspectiveFactory implements IPerspectiveFactory { public void createInitialLayout(IPageLayout layout) { String editorArea = layout.getEditorArea(); Création d’un Place Hodler Folder identifié bottomFolder IPlaceholderFolderLayout createPlaceholderFolder = layout.createPlaceholderFolder("bottomFolder", IPageLayout.BOTTOM, 0.45f, editorArea); keulkeul.blogspot.com createPlaceholderFolder.addPlaceholder(IPageLayout.ID_BOOKMARKS); createPlaceholderFolder.addPlaceholder(IPageLayout.ID_TASK_LIST); createPlaceholderFolder.addPlaceholder(IPageLayout.ID_RES_NAV); } Ajout de trois vues au } Place Holder Folder Perspectives - M. Baron - Page 41
  • 42. Perspectives : raccourcis Différents types de raccourcis peuvent être ajoutés à une perspective Raccourcis sur des actions Dans le cours Commands, Raccourcis pour changer la perspective on montrera comment obtenir le même résultat Raccourcis pour démarrer un assistant avec les commandes Raccourcis pour ouvrir une vue L’interface IPageLayout fournit des méthodes pour ajouter des raccourcis A éviter préférer les commandes void addActionSet(String actionId) : ajout d’un raccourci action void addNewWizardShortcut(String wizardId) : ajout d’un raccourci keulkeul.blogspot.com assistant void addPerspectiveShortcut(String perspId) : ajout d’un raccourci sur une perspecive void addShowViewShortcut(String viewId) : ajout d’un raccourci sur une vue Perspectives - M. Baron - Page 42
  • 43. Perspectives : raccourcis Exemple : création de raccourcis Barre d'outils où seront Liste les raccourcis sur les ajoutés les raccourcis sur les perspectives Liste les raccourcis sur les commandes Le raccourci sur la assistants Le raccourci sur la perspective Resource a Le raccourci sur l'assistant commande Synchronisation été ajouté Création de Fichier a été a été ajouté ajouté keulkeul.blogspot.com CustomPerspectiveFactory1.java du Projet PerspectiveExample Liste les raccourcis sur les vues Le raccourci sur la vue Console a été ajouté Perspectives - M. Baron - Page 43
  • 44. Perspectives : raccourcis Exemple (suite) : création de raccourcis CustomPerspectiveFactory1.java du Projet PerspectiveExample 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); Ajout d’un raccourci Action Ajout d’un raccourci layout.addActionSet("org.eclipse.team.ui.actionSet"); Assistant pour la création de fichiers layout.addNewWizardShortcut("org.eclipse.ui.wizards.new.file"); keulkeul.blogspot.com layout.addPerspectiveShortcut("org.eclipse.ui.resourcePerspective"); layout.addShowViewShortcut(IConsoleConstants.ID_CONSOLE_VIEW); } Ajout d’un raccourci }} Ajout d’un raccourci sur la vue Console Perspective Perspectives - M. Baron - Page 44
  • 45. 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 Exemple : pas de zone des éditeurs ni d’agrandissement … La zone des éditeurs n’est pas affichés keulkeul.blogspot.com CustomPerspectiveFactory2.java du Projet PerspectiveExample Perspectives - M. Baron - Page 45
  • 46. Perspectives : paramétrages Exemple (suite) : pas de zone des éditeurs ni agrandissement Agrandissement non autorisé keulkeul.blogspot.com Affichages quand l’agrandissement est autorisé Perspectives - M. Baron - Page 46
  • 47. Perspectives : paramétrages Exemple (suite) : pas de zone des éditeurs ni agrandissement CustomPerspectiveFactory2.java du Projet PerspectiveExample 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); Même si la zone des éditeurs n’est plus keulkeul.blogspot.com } visible, elle est utilisée comme référent } pour ajouter les vues à la perspective Désactivation de la zone des éditeurs et de l’agrandissement des vues Perspectives - M. Baron - Page 47
  • 48. 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 keulkeul.blogspot.com Construire déclarativement une perspective (agencer des vues, ajouter des raccourcis, …) via l’outil PDE Etendre une perspective existante Perspectives - M. Baron - Page 48
  • 49. Perspectives : Perspective Extensions Sélectionner le point org.eclipse.ui.perspectiveExtensions Choisir le point d’extension perspectiveExtensions keulkeul.blogspot.com Perspectives - M. Baron - Page 49
  • 50. Perspectives : Perspective Extensions Définition de la perspective qui sera étendue keulkeul.blogspot.com L’utilisation du point d’extension PerspectiveExtension nécessite qu’une perspective existe (soit de la plateforme Onglet Extensions Eclipse soit explicitement) Perspectives - M. Baron - Page 50
  • 51. Perspectives : Perspective Extensions EmptyPerspectiveFactory.java du Projet PerspectiveExample package eclipse.workbench.perspectiveexample.perspectives; public class EmptyPerspectiveFactory implements IPerspectiveFactory { public void createInitialLayout(IPageLayout layout) { // Ceci est une perspective vide. } } Aucune modification n’a été apportée à la perspective keulkeul.blogspot.com Nous aurions pu également utiliser une perspective prédéfinie par la plateforme et contenant déjà des vues Perspectives - M. Baron - Page 51
  • 52. Perspectives : Perspective Extensions Possibilité d’ajouter des vues et des raccourcis à la perspective étendue showInPart permet d’ajouter des vues dans le menu Navigate -> Show In keulkeul.blogspot.com Onglet Extensions Perspectives - M. Baron - Page 52
  • 53. Perspectives : Perspective Extensions Ajout d’une vue dans la perspective étendue Identifiant de la Mêmes caractéristiques vue à ajouter que pour l’approche par programmation Emplacement (voir précédemment) de la vue Par rapport à quelle autre vue Ratio de division La vue est-elle visible ou pas ? keulkeul.blogspot.com La vue peut-elle être fermée ou pas ? La vue peut-elle être S’agit-il d’une vue de Si elle est Standalone déplacée ou pas ? type Standalone ou pas ? le titre est-il affiché ou pas ? Perspectives - M. Baron - Page 53
  • 54. Perspectives : Perspective Extensions Exemple : refaire à l’identique AddViewPerspective Trois vues sont ajoutées à la perspective vide keulkeul.blogspot.com Perspectives - M. Baron - Page 54
  • 55. Perspectives : 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 keulkeul.blogspot.com Il sauvegarde ensuite la perspective en lui donnant un nom qui servira d’identifiant Menu Window -> Save Perspective As … Perspectives - M. Baron - Page 55
  • 56. Perspectives : 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 Seules les perspectives construites à l’exécution Supprimer une perspective sont supprimables keulkeul.blogspot.com IPerspectiveRegistry perspRegistry = PlatformUI.getWorkbench().getPerspectiveRegistry(); L’interface IPerspectiveRegistry est détaillée dans la suite Perspectives - M. Baron - Page 56
  • 57. Perspectives : 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 keulkeul.blogspot.com complète des perspectives String getDefaultPerspective() : retourne la perspective par défaut void setDefaultPerspective(String id) : modifie la perspective par défaut Perspectives - M. Baron - Page 57
  • 58. Perspectives : 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 La description est définie comme un keulkeul.blogspot.com sous élément d’une Nom extension Image Perspectives - M. Baron - Page 58
  • 59. Perspectives : registre des perspectives Exemple : manipuler le registre des perspectives PerspectiveRegistryViewPart du Projet PerspectiveExample Affiche les informations Supprime la perspective Affiche toutes les de la perspective CustomPerspective perspectives du registre AddFastViewPerspective keulkeul.blogspot.com La perspective CustomPerspective a été construite à l’exécution Perspectives - M. Baron - Page 59
  • 60. Perspectives : registre des perspectives Exemple (suite) : manipuler le registre des perspectives package 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()); Recherche une perspective à partir de } } son identifiant keulkeul.blogspot.com }); searchPerspective.setText("Find : AddFastViewPerspective"); ... } } PerspectiveRegistryViewPart.java du Projet PerspectiveExample Perspectives - M. Baron - Page 60
  • 61. 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 WorkbenchWindow récupérable de deux manières IWorkbenchWindow workbenchWindow = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); IWorkbenchWindow workbenchWindow = getSite().getWorkbenchWindow(); A n’utiliser que s’il keulkeul.blogspot.com n’existe qu’une fenêtre A utiliser dans une ViewPart dans l’application ou EditorPart La méthode addPerspectiveListener(IPerspectiveListener p) est utilisée pour ajouter un écouteur sur la perspective Perspectives - M. Baron - Page 61
  • 62. 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 keulkeul.blogspot.com 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_* Perspectives - M. Baron - Page 62
  • 63. Perspectives : écouteurs Interface IPerspectiveListener2 void 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 IPerspectiveListener3 void 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 keulkeul.blogspot.com void perspectiveOpened(IWorkbenchPage p, IPerspectiveDescriptor pDesc) : déclenchée si la perspective a été ouverte void perspectiveSaveAs(IWorkbenchPage p, IPerspectiveDescriptor old, IPerspectiveDescriptor new) : déclenchée quand la perspective est sauvegardée Perspectives - M. Baron - Page 63
  • 64. 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é keulkeul.blogspot.com 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 Perspectives - M. Baron - Page 64
  • 65. Perspectives : écouteurs Exemple : écouter les changements d’une perspective Activator.java du Projet PerspectiveExample package eclipse.workbench.perspectiveexample; public class Activator extends AbsractUIPlugin { Récupération de la fenêtre active public void start(BundleContext context) throws Exception { super.start(context); IWorkbenchWindow 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); } keulkeul.blogspot.com ... }); } } Perspectives - M. Baron - Page 65
  • 66. 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 keulkeul.blogspot.com perspective courante org.eclipse.ui.window.nextPerspective : afficher la perspective suivant la perspective courante Perspectives - M. Baron - Page 66
  • 67. 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 keulkeul.blogspot.com qui sera étudiée dans un prochain support de cours du Workbench Perspectives - M. Baron - Page 67
  • 68. Perspectives : principales opérations Exemple : exécuter une commande programmatiquement package eclipse.workbench.perspectiveexample; public class PerspectiveCommandsViewPart extends ViewPart { Exécution de la public void createPartControl(Composite parent) { commande parent.setLayout(new GridLayout(2, true)); « resetPerspective » Button resetButton = new Button(parent, SWT.PUSH); par l’appui d’un bouton 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"); keulkeul.blogspot.com } } PerspectiveCommandsViewPart.java du Projet PerspectiveExample Perspectives - M. Baron - Page 68
  • 69. 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) keulkeul.blogspot.com A voir dans la partie Commands, comment définir déclarativement PerspectiveCommandsViewPart.java du de nouveaux éléments à une Projet PerspectiveExample barre d’outils et à un menu localisé d’une vue Perspectives - M. Baron - Page 69