$30 off During Our Annual Pro Sale. View Details »

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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  8. 8
    Perspectives - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Généralités
    † Perspective Java

    View Slide

  9. 9
    Perspectives - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Généralités
    † Perspective Debug

    View Slide

  10. 10
    Perspectives - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Généralités
    † Perspective Java Browsing

    View Slide

  11. 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é

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  46. 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 …

    View Slide

  47. 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é

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  55. 55
    Perspectives - M. Baron - Page
    mickael-baron.fr mickaelbaron
    Perspective Extensions
    † Exemple : refaire à l’identique AddViewPerspective
    Trois vues sont
    ajoutées à la
    perspective vide

    View Slide

  56. 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 …

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide