Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Eclipse : développement de perspectives

Eclipse : développement de perspectives

Ce support de cours s'intéresse à détailler la construction de perspectives avec la plateforme Eclipse. 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.

Mickael BARON

January 26, 2013
Tweet

More Decks by Mickael BARON

Other Decks in Programming

Transcript

  1. Développement de clients riches : Plateforme Eclipse Mickaël BARON -

    2009 mailto:[email protected] ou mailto:[email protected] mickael-baron.fr mickaelbaron Chapitre 3 : Conception de plug-ins Workbench : Perspectives
  2. 2 Perspectives - M. Baron - Page mickael-baron.fr mickaelbaron Creative

    Commons Contrat Paternité Partage des Conditions Initiales à l'Identique 2.0 France http://creativecommons.org/licenses/by-sa/2.0/fr Licence
  3. 3 Perspectives - M. Baron - Page mickael-baron.fr mickaelbaron 3

    À propos de l’auteur … † Mickaël BARON † Ingénieur de Recherche au LIAS † https://www.lias-lab.fr † Equipe : Ingénierie des Données et des Modèles † Responsable des plateformes logicielles, « coach » technique † Ancien responsable Java de Developpez.com (2011-2021) † Communauté Francophone dédiée au développement informatique † https://java.developpez.com † 4 millions de visiteurs uniques et 12 millions de pages vues par mois † 750 00 membres, 2000 forums et jusqu'à 5000 messages par jour mickael-baron.fr mickaelbaron
  4. 4 Perspectives - M. Baron - Page mickael-baron.fr mickaelbaron Organisation

    du cours sur le Workbench : Perspectives Tous les exemples du cours sont disponibles directement à l’adresse mickael-baron.fr/eclipse/perspectives † Construction déclarative † Ajout de vues † Paramétrage † Etendre une perspective existante † Registre des perspectives † Ecouter les changements † Principales opérations
  5. 5 Perspectives - M. Baron - Page mickael-baron.fr mickaelbaron Déroulement

    du cours † Pédagogie du cours † Illustration avec de nombreux exemples qui sont disponibles à l’adresse mickael-baron.fr/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
  6. 6 Perspectives - M. Baron - Page mickael-baron.fr mickaelbaron 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
  7. 7 Perspectives - M. Baron - Page mickael-baron.fr mickaelbaron 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 † 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
  8. 11 Perspectives - M. Baron - Page mickael-baron.fr mickaelbaron 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é
  9. 12 Perspectives - M. Baron - Page mickael-baron.fr mickaelbaron 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 † 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
  10. 13 Perspectives - M. Baron - Page mickael-baron.fr mickaelbaron Construction

    d'une extension † Sélectionner le point d’extension org.eclipse.ui.perspectives Point d'extension à créer
  11. 14 Perspectives - M. Baron - Page mickael-baron.fr mickaelbaron Construction

    d'une extension Onglet Extensions Ajout d'une nouvelle perspective † Ajouter une nouvelle perspective Projet PerspectiveExemple
  12. 15 Perspectives - M. Baron - Page mickael-baron.fr mickaelbaron 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
  13. 16 Perspectives - M. Baron - Page mickael-baron.fr mickaelbaron 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 createInitialLayout doit être implémentée EmptyPerspectiveFactory.java du Projet PerspectiveExample
  14. 17 Perspectives - M. Baron - Page mickael-baron.fr mickaelbaron Construction

    d'une extension Comme prévu la perspective Empty Perspective ne contient aucune vue † Tester la perspective Empty Perspective … Projet PerspectiveExemple
  15. 18 Perspectives - M. Baron - Page mickael-baron.fr mickaelbaron 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
  16. 19 Perspectives - M. Baron - Page mickael-baron.fr mickaelbaron 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 dessous de la zone des éditeurs La vue Navigator est positionnée au dessous de la vue Bookmarks
  17. 20 Perspectives - M. Baron - Page mickael-baron.fr mickaelbaron 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.java du Projet PerspectiveExample Récupération de l’Id de 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
  18. 21 Perspectives - M. Baron - Page mickael-baron.fr mickaelbaron †

    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 addView
  19. 22 Perspectives - M. Baron - Page mickael-baron.fr mickaelbaron 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
  20. 23 Perspectives - M. Baron - Page mickael-baron.fr mickaelbaron addView

    (ratio) 25% 75 % 55% 45% 45% 55% Vue Bookmarks placée à gauche Editeur Vue Tasks placée au dessous de la zone des éditeurs Vue Navigator placée au dessous de la vue Tasks
  21. 24 Perspectives - M. Baron - Page mickael-baron.fr mickaelbaron 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
  22. 25 Perspectives - M. Baron - Page mickael-baron.fr mickaelbaron 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 † 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
  23. 26 Perspectives - M. Baron - Page mickael-baron.fr mickaelbaron 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.java du 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
  24. 27 Perspectives - M. Baron - Page mickael-baron.fr mickaelbaron 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, 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
  25. 28 Perspectives - M. Baron - Page mickael-baron.fr mickaelbaron addStandaloneView

    † Exemple : agencer une vue StandaloneView avec des vues Projet PerspectiveExemple La vue Bookmarks et 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
  26. 29 Perspectives - M. Baron - Page mickael-baron.fr mickaelbaron 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.java du Projet PerspectiveExample La vue Navigator est définie comme StandaloneView. La barre de titre est affichée
  27. 30 Perspectives - M. Baron - Page mickael-baron.fr mickaelbaron addStandaloneView

    † Exemple : agencer une vue StandaloneView sans titre Projet PerspectiveExemple La vue Bookmarks et Tasks sont de simples vues La vue Navigator est de type StandaloneView La vue Navigator ne dispose pas de titre
  28. 31 Perspectives - M. Baron - Page mickael-baron.fr mickaelbaron 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
  29. 32 Perspectives - M. Baron - Page mickael-baron.fr mickaelbaron 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.java du Projet PerspectiveExample La vue Navigator est définie comme StandaloneView. La barre de titre est cachée
  30. 33 Perspectives - M. Baron - Page mickael-baron.fr mickaelbaron 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
  31. 34 Perspectives - M. Baron - Page mickael-baron.fr mickaelbaron 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
  32. 35 Perspectives - M. Baron - Page mickael-baron.fr mickaelbaron addPlaceholder

    † Exemple : fixer l’emplacement de deux vues AddPlaceholderViewPerspectiveFactory.java du 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
  33. 36 Perspectives - M. Baron - Page mickael-baron.fr mickaelbaron 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.java du Projet PerspectiveExample Ajout un vue de type StandaloneView dans un Place Holder Ajout d’une vue dans un Place Holder
  34. 37 Perspectives - M. Baron - Page mickael-baron.fr mickaelbaron 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 Navigator sont ajoutées à un Place Folder
  35. 38 Perspectives - M. Baron - Page mickael-baron.fr mickaelbaron 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 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
  36. 39 Perspectives - M. Baron - Page mickael-baron.fr mickaelbaron 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 du Projet PerspectiveExample
  37. 40 Perspectives - M. Baron - Page mickael-baron.fr mickaelbaron 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.java du Projet PerspectiveExample Création d’un Place Folder identifié 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
  38. 41 Perspectives - M. Baron - Page mickael-baron.fr mickaelbaron 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
  39. 42 Perspectives - M. Baron - Page mickael-baron.fr mickaelbaron 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.java du Projet PerspectiveExample Création d’un Place Hodler Folder identifié bottomFolder Ajout de trois vues au Place Holder Folder
  40. 43 Perspectives - M. Baron - Page mickael-baron.fr mickaelbaron 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
  41. 44 Perspectives - M. Baron - Page mickael-baron.fr mickaelbaron 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 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é CustomPerspectiveFactory1.java du Projet PerspectiveExample
  42. 45 Perspectives - M. Baron - Page mickael-baron.fr mickaelbaron 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 Perspective Ajout d’un raccourci sur la vue Console
  43. 46 Perspectives - M. Baron - Page mickael-baron.fr mickaelbaron Paramétrages

    d’une perspective † 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 …
  44. 47 Perspectives - M. Baron - Page mickael-baron.fr mickaelbaron Paramétrages

    d’une perspective † Exemple (suite) : pas de zone des éditeurs ni agrandissement Agrandissement non autorisé Affichages quand l’agrandissement est autorisé
  45. 48 Perspectives - M. Baron - Page mickael-baron.fr mickaelbaron Paramétrages

    d’une perspective † 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
  46. 49 Perspectives - M. Baron - Page mickael-baron.fr mickaelbaron 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
  47. 50 Perspectives - M. Baron - Page mickael-baron.fr mickaelbaron Perspective

    Extensions Choisir le point d’extension perspectiveExtensions † Sélectionner le point org.eclipse.ui.perspectiveExtensions
  48. 51 Perspectives - M. Baron - Page mickael-baron.fr mickaelbaron 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
  49. 52 Perspectives - M. Baron - Page mickael-baron.fr mickaelbaron 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
  50. 53 Perspectives - M. Baron - Page mickael-baron.fr mickaelbaron 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
  51. 54 Perspectives - M. Baron - Page mickael-baron.fr mickaelbaron 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 Standalone le titre est-il affiché ou pas ? Mêmes caractéristiques que pour l’approche par programmation (voir précédemment)
  52. 55 Perspectives - M. Baron - Page mickael-baron.fr mickaelbaron Perspective

    Extensions † Exemple : refaire à l’identique AddViewPerspective Trois vues sont ajoutées à la perspective vide
  53. 56 Perspectives - M. Baron - Page mickael-baron.fr mickaelbaron 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 …
  54. 57 Perspectives - M. Baron - Page mickael-baron.fr mickaelbaron 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
  55. 58 Perspectives - M. Baron - Page mickael-baron.fr mickaelbaron 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
  56. 59 Perspectives - M. Baron - Page mickael-baron.fr mickaelbaron 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
  57. 60 Perspectives - M. Baron - Page mickael-baron.fr mickaelbaron 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
  58. 61 Perspectives - M. Baron - Page mickael-baron.fr mickaelbaron 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()); } } }); searchPerspective.setText("Find : AddFastViewPerspective"); ... } } PerspectiveRegistryViewPart.java du Projet PerspectiveExample Recherche une perspective à partir de son identifiant
  59. 62 Perspectives - M. Baron - Page mickael-baron.fr mickaelbaron Ecouteurs

    † 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 † 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’application A utiliser dans une ViewPart ou EditorPart
  60. 63 Perspectives - M. Baron - Page mickael-baron.fr mickaelbaron Ecouteurs

    † 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_*
  61. 64 Perspectives - M. Baron - Page mickael-baron.fr mickaelbaron Ecouteurs

    † 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 † 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
  62. 65 Perspectives - M. Baron - Page mickael-baron.fr mickaelbaron Ecouteurs

    † 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
  63. 66 Perspectives - M. Baron - Page mickael-baron.fr mickaelbaron Ecouteurs

    † 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
  64. 67 Perspectives - M. Baron - Page mickael-baron.fr mickaelbaron 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
  65. 68 Perspectives - M. Baron - Page mickael-baron.fr mickaelbaron 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
  66. 69 Perspectives - M. Baron - Page mickael-baron.fr mickaelbaron 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
  67. 70 Perspectives - M. Baron - Page mickael-baron.fr mickaelbaron 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