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