diff options
author | Sopot Cela | 2013-11-19 11:13:09 +0000 |
---|---|---|
committer | Gerrit Code Review @ Eclipse.org | 2013-11-27 20:26:43 +0000 |
commit | 2d66e04c48991203af1c624a69877928796b40e8 (patch) | |
tree | ae629b4da6ead83e7a8d7a2f59c2a21d9cfc93ea | |
parent | 1337593288b15da51af8ec09b2a051478563a17c (diff) | |
download | eclipse.platform.ui-2d66e04c48991203af1c624a69877928796b40e8.tar.gz eclipse.platform.ui-2d66e04c48991203af1c624a69877928796b40e8.tar.xz eclipse.platform.ui-2d66e04c48991203af1c624a69877928796b40e8.zip |
Bug 391430 - Dynamically creating / deleting menu items in Menu and
MPopupMenu doesn't work
Change-Id: I0257600c4aa8f2f4fba8944787f401a7d205f804
Signed-off-by: Sopot Cela <sopotcela@gmail.com>
-rw-r--r-- | bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/MenuManagerRenderer.java | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/MenuManagerRenderer.java b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/MenuManagerRenderer.java index 349c94262ed..49ffbd75a6d 100644 --- a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/MenuManagerRenderer.java +++ b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/MenuManagerRenderer.java @@ -250,6 +250,29 @@ public class MenuManagerRenderer extends SWTPartRenderer { } }; + private EventHandler childrenUpdater = new EventHandler() { + + public void handleEvent(Event event) { + Object changedObj = event.getProperty(UIEvents.EventTags.ELEMENT); + if (changedObj instanceof MMenu) { + MMenu menuModel = (MMenu) changedObj; + MenuManager manager = getManager(menuModel); + if (manager == null) + return; + if (UIEvents.isREMOVE(event)) { + MMenuElement menuElement = (MMenuElement) event + .getProperty(UIEvents.EventTags.OLD_VALUE); + handleMenuElementRemove(manager, menuElement); + } else if (UIEvents.isADD(event)) { + MMenuElement menuElement = (MMenuElement) event + .getProperty(UIEvents.EventTags.NEW_VALUE); + handleMenuElementAdd(manager, menuElement); + } + } + + } + }; + private MenuManagerRendererFilter rendererFilter; @PostConstruct @@ -260,6 +283,8 @@ public class MenuManagerRenderer extends SWTPartRenderer { eventBroker.subscribe(UIEvents.Item.TOPIC_ENABLED, enabledUpdater); eventBroker .subscribe(UIEvents.UIElement.TOPIC_ALL, toBeRenderedUpdater); + eventBroker.subscribe(UIEvents.ElementContainer.TOPIC_CHILDREN, + childrenUpdater); context.set(MenuManagerRenderer.class, this); Display display = context.get(Display.class); @@ -276,6 +301,29 @@ public class MenuManagerRenderer extends SWTPartRenderer { } + /** + * @param manager + * @param menuElement + */ + protected void handleMenuElementAdd(MenuManager manager, + MMenuElement menuElement) { + modelProcessSwitch(manager, menuElement); + } + + /** + * @param manager + * @param menuElement + */ + protected void handleMenuElementRemove(MenuManager manager, + MMenuElement menuElement) { + if (menuElement instanceof MMenu) { + MMenu menuModel = (MMenu) menuElement; + manager.remove(getManager(menuModel)); + } else + manager.remove(getContribution(menuElement)); + manager.update(false); + } + @PreDestroy public void contextDisposed() { eventBroker.unsubscribe(itemUpdater); @@ -283,6 +331,7 @@ public class MenuManagerRenderer extends SWTPartRenderer { eventBroker.unsubscribe(selectionUpdater); eventBroker.unsubscribe(enabledUpdater); eventBroker.unsubscribe(toBeRenderedUpdater); + eventBroker.unsubscribe(childrenUpdater); ContextInjectionFactory.uninject(MenuManagerEventHelper.showHelper, context); |