Tutorial: GEF (Graphical Editing Framework) [Part 8]
Par Jean Charles MAMMANA, mercredi 13 juin 2007 à 13:47 :: Programmation :: #17 :: rss
Dans cette partie du tutorial, on va ajouter un menu contextuel au click droit.
La première chose a faire est de créer la class du menu.
C'est une class qui hérite de ContextMenuProvider et qui se construit globalement de la même manière que la toolbar.
On ajoute les actions "delete" et undo/redo au menu :
Puis il ne reste qu'a appliquer le menu la ou on souhaite l'avoir.
Nous allons l'appliquer pour l'arbre et pour le graph.
Le résultat tant attendu :
Archive ICI
C'est une class qui hérite de ContextMenuProvider et qui se construit globalement de la même manière que la toolbar.
On ajoute les actions "delete" et undo/redo au menu :
public class AppContextMenuProvider extends ContextMenuProvider{
private ActionRegistry actionRegistry;
public AppContextMenuProvider(EditPartViewer viewer, ActionRegistry registry) {
super(viewer);
setActionRegistry(registry);
}
@Override
public void buildContextMenu(IMenuManager menu) {
IAction action;
GEFActionConstants.addStandardActionGroups(menu);
action = getActionRegistry().getAction(ActionFactory.UNDO.getId());
menu.appendToGroup(GEFActionConstants.GROUP_UNDO, action);
action = getActionRegistry().getAction(ActionFactory.REDO.getId());
menu.appendToGroup(GEFActionConstants.GROUP_UNDO, action);
action = getActionRegistry().getAction(ActionFactory.DELETE.getId());
menu.appendToGroup(GEFActionConstants.GROUP_EDIT, action);
}
private ActionRegistry getActionRegistry() {
return actionRegistry;
}
private void setActionRegistry(ActionRegistry registry) {
actionRegistry = registry;
}
}
private ActionRegistry actionRegistry;
public AppContextMenuProvider(EditPartViewer viewer, ActionRegistry registry) {
super(viewer);
setActionRegistry(registry);
}
@Override
public void buildContextMenu(IMenuManager menu) {
IAction action;
GEFActionConstants.addStandardActionGroups(menu);
action = getActionRegistry().getAction(ActionFactory.UNDO.getId());
menu.appendToGroup(GEFActionConstants.GROUP_UNDO, action);
action = getActionRegistry().getAction(ActionFactory.REDO.getId());
menu.appendToGroup(GEFActionConstants.GROUP_UNDO, action);
action = getActionRegistry().getAction(ActionFactory.DELETE.getId());
menu.appendToGroup(GEFActionConstants.GROUP_EDIT, action);
}
private ActionRegistry getActionRegistry() {
return actionRegistry;
}
private void setActionRegistry(ActionRegistry registry) {
actionRegistry = registry;
}
}
Puis il ne reste qu'a appliquer le menu la ou on souhaite l'avoir.
Nous allons l'appliquer pour l'arbre et pour le graph.
public class MyGraphicalEditor extends GraphicalEditor {
(...)
protected class OutlinePage extends ContentOutlinePage{
(...)
public void init(IPageSite pageSite) {
(...)
// On ajoute notre menu a la vue outline.
ContextMenuProvider provider = new AppContextMenuProvider(getViewer(), getActionRegistry());
getViewer().setContextMenu(provider);
}
(...)
}
(...)
protected void configureGraphicalViewer() {
(...)
// On ajoute notre menu a l'editeur.
ContextMenuProvider provider = new AppContextMenuProvider(viewer, getActionRegistry());
viewer.setContextMenu(provider);
}
(...)
}
(...)
protected class OutlinePage extends ContentOutlinePage{
(...)
public void init(IPageSite pageSite) {
(...)
// On ajoute notre menu a la vue outline.
ContextMenuProvider provider = new AppContextMenuProvider(getViewer(), getActionRegistry());
getViewer().setContextMenu(provider);
}
(...)
}
(...)
protected void configureGraphicalViewer() {
(...)
// On ajoute notre menu a l'editeur.
ContextMenuProvider provider = new AppContextMenuProvider(viewer, getActionRegistry());
viewer.setContextMenu(provider);
}
(...)
}
Le résultat tant attendu :

Archive ICI

Commentaires
Aucun commentaire pour le moment.
Ajouter un commentaire