Nous avons abordé plusieurs points d'extension différents qui contribuent à divers menus et barres d'outils du plan de travail. Comment savoir lequel utiliser ? Le tableau ci-après résume les diverses contributions des menus et leur utilisation.
Nom du point d'extension |
Emplacement des actions |
Détails |
---|---|---|
viewActions |
Les actions apparaissent dans la barre d'outils locale et le menu déroulant local d'une vue spécifique. |
Font contribuer une classe d'actions qui implémente IViewActionDelegate. Spécifient l'ID de la contribution et l'ID de la vue cible qui doivent montrer l'action. Le libellé et l'image dictent l'aspect de l'action dans l'interface utilisateur. Le chemin d'accès spécifie l'emplacement par rapport aux options de menus et de la barre d'outils de la vue. |
editorActions |
Les actions sont associées à un éditeur et apparaissent dans le menu et/ou la barre d'outils du plan de travail. |
Font contribuer une classe d'actions qui implémente IEditorActionDelegate. Spécifient l'ID de la contribution et l'ID de l'éditeur cible qui entraînent l'affichage de l'action. Le libellé et l'image spécifient l'aspect de l'action dans l'interface utilisateur. Des chemins d'accès au menu et à la barre d'outils distincts spécifient l'existence et l'emplacement de la contribution dans le menu et la barre d'outils du plan de travail. |
popupMenu |
Les actions s'affichent dans le menu en incrustation d'un éditeur ou d'une vue. Les actions associées à un type d'objet apparaissent dans tous les menus en incrustation des vues et des éditeurs qui affichent le type d'objet. Les actions associées à un menu en incrustation spécifique apparaissent uniquement dans ce menu en incrustation. |
Les contributions d'objet spécifient le type d'objet pour lequel l'action doit apparaître dans un menu en incrustation. L'action apparaît dans tous les menus en incrustation des vues et des éditeurs qui contiennent le type d'objet. Fournissent une classe d'actions qui implémente IObjectActionDelegate. |
actionSets |
Les actions apparaissent dans les menus principaux et la barre d'outils du plan de travail. Elles sont regroupées en jeux d'actions. Toutes les actions d'un jeu d'actions apparaissent dans les menus et les barres d'outils du plan de travail en fonction des jeux d'actions sélectionnés par l'utilisateur et de la perspective courante affichée dans le plan de travail. |
Font contribuer une classe d'actions qui implémente IWorkbenchWindowActionDelegate ou IWorkbenchWindowPulldownDelegate. Spécifient le nom et l'id du jeu d'actions. Enumèrent la totalité des actions définies pour ce jeu d'actions. Pour chaque action, des chemins d'accès au menu et à la barre d'outils distincts spécifient l'existence et l'emplacement de la contribution dans le menu et la barre d'outils du plan de travail. |
Nous avons abordé de nombreuses contributions d'actions qui spécifient le chemin d'accès à l'emplacement de leur action. Examinons de plus près la signification de ces chemins d'accès. Pour ce faire, nous utiliserons le menu Aide du plan de travail.
Les emplacements d'insertion de nouveaux menus, options de menu ou éléments de barre d'outils sont définis à l'aide de groupes désignés. Vous pouvez considéré un groupe désigné comme un emplacement ou une marque de réservation qui vous permet d'insérer vos contributions de menu et de barre d'outils à certains points d'un menu ou d'une barre d'outils.
Le plan de travail définit tous les noms des emplacements de groupe dans la classe IWorkbenchActionConstants. Pour chaque menu du plan de travail, des groupes désignés sont placés dans le menu aux endroits où il est attendu que des plug-ins insèrent de nouvelles actions.
La description ci-dessous du menu d'aide est adaptée de la définition de la classe IWorkbenchActionConstants.
Standard Help menu actions
Start group HELP_START "start"
End group HELP_END "end"
About action ABOUT "About"
Le menu d'aide standard du plan de travail est constitué d'un groupe désigné appelé "start", suivi d'un groupe désigné appelé "end", suivi de l'action "About". Pourquoi deux groupes ? Pour fournir un contrôle aux plug-ins sur la profondeur avec laquelle ils apparaissent dans les niveaux du menu d'aide. Lorsque vous définissez un menu, vous pouvez définir autant d'emplacements que vous le souhaitez. L'ajout d'emplacements supplémentaires donne aux autres plug-ins plus de contrôle sur l'endroit où leurs contributions apparaissent par rapport aux contributions existantes.
Nous savons qu'il existe d'autres options de menu dans le menu Aide. Elles sont ajoutées par des plug-ins. Par exemple, le plug-in d'aide ajoute un jeu d'actions contenant le menu "Help Contents" au plan de travail. Les marques ci-dessous sont extraites du fichier plugin.xml du plug-in org.eclipse.help.ui.
<extension
point="org.eclipse.ui.actionSets">
<actionSet
id="org.eclipse.help.internal.ui.HelpActionSet"
label="%help"
visible="true">
<action id="org.eclipse.help.internal.ui.HelpAction"
menubarPath="help/helpEnd"
label="%helpcontents"
class="org.eclipse.help.internal.ui.ShowHelp"/>
</actionSet>
</extension>
La nouvelle action de l'aide sera placée dans le menu d'aide, dans le groupe helpEnd. Si aucun autre plug-in n'a contribué au menu d'aide, cela signifie que l'option de menu "Help Contents" apparaîtra comme première option du menu au dessus de l'option "About". Si un autre plug-in souhaite ajouter une option qui apparaît toujours au dessus de l'option "Help Contents", il peut spécifier le groupe helpStart dans son chemin d'accès.
Les chemins d'accès de la barre d'outils fonctionne de façon similaire. Chaque fois qu'un chemin d'accès est spécifié, il doit se terminer par le nom d'un groupe dans la barre d'outils.
Un chemin d'accès complet de menu ou de barre d'outil est simplement une liste de paires nom de menu et groupe désigné. Les noms de menu du plan de travail sont également définis dans IWorkbenchActionConstants. C'est comme cela que nous savons que le nom complet qualifié du chemin d'accès à notre action d'aide est "help/helpEnd."
Certains menus comportent des sous-menus imbriqués. C'est là qu'entrent en jeu les chemins d'accès plus longs. Si le menu d'aide a défini un sous-menu appelé "submenu" avec un groupe désigné appelé "submenuStart", le chemin d'accès complet qualifié du menu pour une action dans le nouveau sous-menu doit être "help/submenu/submenuStart."
L'exemple ci-dessus montre également une technique d'externalisation des chaînes qui apparaissent dans l'interface utilisateur. C'est utile pour traduire l'interface utilisateur du plug-in dans d'autres langues. Nous pouvons externaliser les chaînes dans les fichiers plugin.xml en remplaçant la chaîne par une clé (par exemple, %help, %helpcontents) et en créant des entrées dans le fichier plugin.properties de la forme suivante :
help = "Help"
helpContents = "Contenu de l'aide"
Ainsi, le fichier plugin.properties peut être traduit en différentes langues et le fichier plugin.xml n'a pas besoin d'être modifié.
Dans de nombreux exemples abordés jusque là, les actions fournies par les exemples de plug-ins ont été ajoutées aux groupes désignés existants dans des menus et des barres d'outils.
Les points d'extension actionSets, viewActions, editorActions et popupMenus permettent également de définir de nouveaux menus et groupes dans votre contribution. Ceci signifie que vous pouvez définir de nouveaux sous-menus ou de nouveaux menus déroulants et ajouter vos actions à ces nouveaux menus. Dans ce cas, le chemin d'accès de votre nouvelle action contient le nom du menu nouvellement défini.
Nous avons vu cette technique lorsque l'outil readme a défini un nouveau menu pour son jeu d'actions. Examinons encore une fois les marques, maintenant que nous avons détaillé les chemins d'accès au menu.
<extension
point = "org.eclipse.ui.actionSets">
<actionSet id="org_eclipse_ui_examples_readmetool_actionSet"
label="ReadMe Actions"
visible="true">
<menu id="org_eclipse_ui_examples_readmetool"
label="Readme &File Editor"
path="window/additions">
<separator
name="slot1"/>
<separator
name="slot2"/>
<separator
name="slot3"/>
</menu>
<action id="org_eclipse_ui_examples_readmetool_readmeAction"
menubarPath="window/org_eclipse_ui_examples_readmetool/slot1"
toolbarPath="readme"
label="&Open Readme Browser@Ctrl+R"
tooltip="Open
Readme Browser"
helpContextId="org.eclipse.ui.examples.readmetool.open_browser_action_context"
icon="icons/basic/ctool16/openbrwsr.gif"
class="org.eclipse.ui.examples.readmetool.WindowActionDelegate"
enablesFor="1">
<selection
class="org.eclipse.core.resources.IFile"
name="*.readme">
</selection>
</action>
</actionSet>
</extension>
Nous avons ajouté un nouveau menu appelé "org_eclipse_ui_examples_readmetool". Son libellé est la chaîne "Readme &File Editor". Dans ce menu, nous définissons trois groupes désignés : "slot1", "slot2" et "slot3". Nous ajoutons ce nouveau menu au chemin d'accès "window/additions".
Si nous revenons à IWorkbenchActionConstants, nous voyons cette définition du menu Fenêtre dans la documentation Java :
* <h3>Standard Window menu actions</h3>
* <ul>
* <li>Extra Window-like action group (<code>WINDOW_EXT</code>)</li>
Si nous examinons encore plus la définition de la classe, nous trouvons les définitions connexes suivantes :
public static final String MENU_PREFIX = "";
...
public static final String M_WINDOW = MENU_PREFIX+"window";
...
public static final String MB_ADDITIONS = "additions"; // Group.
...
public static final String WINDOW_EXT = MB_ADDITIONS; // Group.
A partir de ces informations, nous pouvons rassembler les éléments du chemin d'accès pour ajouter quelque chose au menu "Fenêtre" (Window) du plan de travail. Le menu lui-même est appelé "window" et il définit un emplacement appelé "additions". Nous utilisons le chemin d'accès "window/additions" pour ajouter notre nouveau menu.
Dans la déclaration du jeu d'actions, nous ajoutons une action à notre menu nouvellement défini, à l'aide du chemin d'accès "window/org_eclipse_ui_examples_readmetool/slot1".
D'autres plug-ins peuvent contribuer à notre menu en utilisant le même chemin d'accès (ou peut-être l'un des autres emplacements) pour ajouter un de leurs propres menus.
En règle générale, il n'est pas judicieux de contribuer au menu ou à la barre d'outils d'un autre plug-in en faisant dériver le nom du chemin d'accès du fichier plugin.xml. Il est possible qu'une version future du plug-in change les noms des chemins d'accès. La pratique recommandée consiste à définir une interface publique (un peu comme IWorkbenchActionConstants) qui spécifie exactement quels menus, groupes de barre d'outils et emplacements sont considérés aptes à être utilisés par d'autres plug-ins.