Bonjour,
j'ai une vue avec des opérations undo/redo qui fonctionnent.
Les labels des actions undo/redo du menu contextuel se mettent à jour parfaitement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72 public class ZoneExplorerTreeView extends ViewPart { /** * Les actions annuler et refaire */ private UndoActionHandler undoAction; private RedoActionHandler redoAction; /** * Le contexte d'annulation privé pour l'explorateur de zone */ private IUndoContext undoContext ; /** * Cette méthode est appelé lors de la création de la vue * et permet d'initialiser celle-ci */ @Override public void createPartControl(Composite parent) { //...... //Création des commandes d'undo/redo createGlobalActionHandlers(); //Création du menu contextuel hookContextMenu(); } /** * Création des commandes d'undo/redo */ private void createGlobalActionHandlers() { undoContext = PlatformUI.getWorkbench().getOperationSupport().getUndoContext(); // set up action handlers that operate on the current context undoAction = new UndoActionHandler(this.getSite(), undoContext); redoAction = new RedoActionHandler(this.getSite(), undoContext); IActionBars actionBars = getViewSite().getActionBars(); actionBars.setGlobalActionHandler(ActionFactory.UNDO.getId(), undoAction); actionBars.setGlobalActionHandler(ActionFactory.REDO.getId(), redoAction); } /** * Ajoute le menu contextuel la vue */ private void hookContextMenu() { MenuManager menuMgr = new MenuManager("#PopupMenu"); menuMgr.setRemoveAllWhenShown(true); menuMgr.addMenuListener(new IMenuListener() { public void menuAboutToShow(IMenuManager manager) { ZoneExplorerTreeView.this.fillContextMenu(manager); } }); Menu menu = menuMgr.createContextMenu(treeViewer.getControl()); treeViewer.getControl().setMenu(menu); getSite().registerContextMenu(menuMgr, treeViewer); } /** * Ajoute les actions undo et redo au menu contextuel. */ private void fillContextMenu(IMenuManager manager) { manager.add(undoAction); manager.add(redoAction); manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); } .... }
J'ai ajouté les undo/redo au menu principal et au menu contextuel de ma vue
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37<extension point="org.eclipse.ui.menus"> <menuContribution locationURI="menu:org.eclipse.ui.main.menu"> <menu label="Edition"> <command commandId="org.eclipse.ui.edit.undo" icon="icons/undo.gif" label="Undo" style="push"> </command> <command commandId="org.eclipse.ui.edit.redo" icon="icons/redo.gif" label="Redo" style="push"> </command> </menu> </menuContribution> <menuContribution locationURI="popup:org.pegase.ui.views.zoneExplorerTreeView"> <command commandId="org.eclipse.ui.edit.undo" icon="icons/undo.gif" label="Undo" style="push"> </command> <command commandId="org.eclipse.ui.edit.redo" icon="icons/redo.gif" label="Redo" style="push"> </command> </menuContribution> </extension>
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 public class ApplicationActionBarAdvisor extends ActionBarAdvisor { public ApplicationActionBarAdvisor(IActionBarConfigurer configurer) { super(configurer); } @Override protected void makeActions(final IWorkbenchWindow window) { IWorkbenchAction undoAction = ActionFactory.UNDO.create(window); register(undoAction); IWorkbenchAction redoAction = ActionFactory.REDO.create(window); register(redoAction); } protected void fillMenuBar(IMenuManager menuBar) { } }
Les commandes ajoutées via les extensions fonctionnent mais les labels ne sont pas mis à jours suivant l'opération à annuler/refaire
Voir la pièce jointe. En Haut, les menu ajoutés directement dans ma vue.
En bas, (icônes verts) les menu ajoutés via les extensions
D'avance merci pour votre aide.








Répondre avec citation






Partager