From 27d838d28e86ab5d79d20d7eeda638e258666d70 Mon Sep 17 00:00:00 2001
From: Marco Descher
Date: Thu, 6 Dec 2012 15:17:54 -0500
Subject: Bug 389063 - Dynamic menu contribution call back similar to Eclipse 3
org.ui.menus dynamic ContributionItem
Allow a dynamic model element to insert model contributions during
menu about to show.
---
bundles/org.eclipse.e4.ui.di/META-INF/MANIFEST.MF | 2 +-
bundles/org.eclipse.e4.ui.di/pom.xml | 2 +-
.../src/org/eclipse/e4/ui/di/AboutToHide.java | 33 +++
.../src/org/eclipse/e4/ui/di/AboutToShow.java | 33 +++
.../META-INF/MANIFEST.MF | 2 +-
...tContainer_children_DynamicMenuContribution.gif | Bin 0 -> 223 bytes
...ndow_sharedElements_DynamicMenuContribution.gif | Bin 0 -> 223 bytes
.../icons/full/obj16/DynamicMenuContribution.gif | Bin 0 -> 129 bytes
.../plugin.properties | 1 +
.../org.eclipse.e4.ui.model.workbench.edit/pom.xml | 2 +-
.../provider/ApplicationItemProvider.java | 5 +
.../provider/PerspectiveStackItemProvider.java | 5 +
.../ui/basic/provider/WindowItemProvider.java | 10 +
.../DynamicMenuContributionItemProvider.java | 178 ++++++++++++
.../ui/menu/provider/MenuItemProvider.java | 5 +
.../provider/MenuItemProviderAdapterFactory.java | 24 ++
.../ui/provider/ElementContainerItemProvider.java | 5 +
.../META-INF/MANIFEST.MF | 2 +-
.../model/UIElements.ecore | 1 +
bundles/org.eclipse.e4.ui.model.workbench/pom.xml | 2 +-
.../commands/impl/CommandsFactoryImpl.java | 1 +
.../commands/util/CommandsAdapterFactory.java | 1 +
.../application/commands/util/CommandsSwitch.java | 1 +
.../descriptor/basic/impl/BasicFactoryImpl.java | 1 +
.../descriptor/basic/util/BasicAdapterFactory.java | 1 +
.../descriptor/basic/util/BasicSwitch.java | 1 +
.../application/impl/ApplicationFactoryImpl.java | 1 +
.../ui/advanced/impl/AdvancedFactoryImpl.java | 1 +
.../ui/advanced/util/AdvancedAdapterFactory.java | 1 +
.../ui/advanced/util/AdvancedSwitch.java | 1 +
.../ui/basic/impl/BasicFactoryImpl.java | 1 +
.../ui/basic/util/BasicAdapterFactory.java | 1 +
.../application/ui/basic/util/BasicSwitch.java | 1 +
.../model/application/ui/impl/UiFactoryImpl.java | 1 +
.../ui/menu/MDynamicMenuContribution.java | 25 ++
.../ui/model/application/ui/menu/MMenuFactory.java | 9 +
.../ui/menu/impl/DynamicMenuContributionImpl.java | 261 +++++++++++++++++
.../application/ui/menu/impl/MenuFactoryImpl.java | 12 +
.../application/ui/menu/impl/MenuPackageImpl.java | 319 ++++++++++++++++++++-
.../ui/menu/util/MenuAdapterFactory.java | 19 ++
.../model/application/ui/menu/util/MenuSwitch.java | 29 ++
.../application/ui/util/UiAdapterFactory.java | 1 +
.../e4/ui/model/application/ui/util/UiSwitch.java | 1 +
.../util/ApplicationAdapterFactory.java | 1 +
.../model/application/util/ApplicationSwitch.java | 1 +
.../renderers/swt/MenuManagerHideProcessor.java | 52 ++++
.../renderers/swt/MenuManagerRenderer.java | 20 ++
.../renderers/swt/MenuManagerShowProcessor.java | 87 ++++++
48 files changed, 1156 insertions(+), 7 deletions(-)
create mode 100644 bundles/org.eclipse.e4.ui.di/src/org/eclipse/e4/ui/di/AboutToHide.java
create mode 100644 bundles/org.eclipse.e4.ui.di/src/org/eclipse/e4/ui/di/AboutToShow.java
create mode 100644 bundles/org.eclipse.e4.ui.model.workbench.edit/icons/full/ctool16/CreateElementContainer_children_DynamicMenuContribution.gif
create mode 100644 bundles/org.eclipse.e4.ui.model.workbench.edit/icons/full/ctool16/CreateWindow_sharedElements_DynamicMenuContribution.gif
create mode 100644 bundles/org.eclipse.e4.ui.model.workbench.edit/icons/full/obj16/DynamicMenuContribution.gif
create mode 100644 bundles/org.eclipse.e4.ui.model.workbench.edit/src/org/eclipse/e4/ui/model/application/ui/menu/provider/DynamicMenuContributionItemProvider.java
create mode 100644 bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/ui/menu/MDynamicMenuContribution.java
create mode 100644 bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/ui/menu/impl/DynamicMenuContributionImpl.java
diff --git a/bundles/org.eclipse.e4.ui.di/META-INF/MANIFEST.MF b/bundles/org.eclipse.e4.ui.di/META-INF/MANIFEST.MF
index b00330d9c04..1f7d98785f7 100644
--- a/bundles/org.eclipse.e4.ui.di/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.e4.ui.di/META-INF/MANIFEST.MF
@@ -4,7 +4,7 @@ Bundle-Name: %pluginName
Bundle-Vendor: %providerName
Bundle-Localization: plugin
Bundle-SymbolicName: org.eclipse.e4.ui.di
-Bundle-Version: 0.10.1.qualifier
+Bundle-Version: 0.11.0.qualifier
Bundle-RequiredExecutionEnvironment: J2SE-1.5
Bundle-ActivationPolicy: lazy
Import-Package: javax.inject;version="1.0.0"
diff --git a/bundles/org.eclipse.e4.ui.di/pom.xml b/bundles/org.eclipse.e4.ui.di/pom.xml
index f236a7ad6b2..804f6c598b2 100644
--- a/bundles/org.eclipse.e4.ui.di/pom.xml
+++ b/bundles/org.eclipse.e4.ui.di/pom.xml
@@ -21,6 +21,6 @@
eclipse.platform.uiorg.eclipse.e4.ui.di
- 0.10.1-SNAPSHOT
+ 0.11.0-SNAPSHOTeclipse-plugin
diff --git a/bundles/org.eclipse.e4.ui.di/src/org/eclipse/e4/ui/di/AboutToHide.java b/bundles/org.eclipse.e4.ui.di/src/org/eclipse/e4/ui/di/AboutToHide.java
new file mode 100644
index 00000000000..11fbfa09e85
--- /dev/null
+++ b/bundles/org.eclipse.e4.ui.di/src/org/eclipse/e4/ui/di/AboutToHide.java
@@ -0,0 +1,33 @@
+/*******************************************************************************
+ * Copyright (c) 2012 MEDEVIT, FHV and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Marco Descher - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.e4.ui.di;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Use this annotation to act on to the list of dynamically shown entries within
+ * a DynamicMenuContributionItem. Usage in contribution class:
+ *
+ * {@literal @}AboutToHide
+ * public void aboutToHide(List<MMenuElement> items) { }
+ *
+ * @see org.eclipse.jface.action.IMenuListener2
+ */
+@Documented
+@Target({ ElementType.METHOD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface AboutToHide {
+ // intentionally left empty
+}
\ No newline at end of file
diff --git a/bundles/org.eclipse.e4.ui.di/src/org/eclipse/e4/ui/di/AboutToShow.java b/bundles/org.eclipse.e4.ui.di/src/org/eclipse/e4/ui/di/AboutToShow.java
new file mode 100644
index 00000000000..b3a74115d05
--- /dev/null
+++ b/bundles/org.eclipse.e4.ui.di/src/org/eclipse/e4/ui/di/AboutToShow.java
@@ -0,0 +1,33 @@
+/*******************************************************************************
+ * Copyright (c) 2012 MEDEVIT, FHV and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Marco Descher - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.e4.ui.di;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Use this annotation to provide MMenuElements to the list of dynamically shown entries
+ * within a DynamicMenuContributionItem. Usage in contribution class:
+ *
+ * {@literal @}AboutToShow
+ * public void aboutToShow(List<MMenuElement> items) { }
+ *
+ * @see org.eclipse.jface.action.IMenuListener
+ */
+@Documented
+@Target({ ElementType.METHOD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface AboutToShow {
+ // intentionally left empty
+}
\ No newline at end of file
diff --git a/bundles/org.eclipse.e4.ui.model.workbench.edit/META-INF/MANIFEST.MF b/bundles/org.eclipse.e4.ui.model.workbench.edit/META-INF/MANIFEST.MF
index a3af1298283..78e17b28290 100644
--- a/bundles/org.eclipse.e4.ui.model.workbench.edit/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.e4.ui.model.workbench.edit/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.e4.ui.model.workbench.edit;singleton:=true
-Bundle-Version: 0.10.1.qualifier
+Bundle-Version: 0.11.0.qualifier
Bundle-ClassPath: .
Bundle-Activator: org.eclipse.e4.ui.model.application.provider.UIElementsEditPlugin$Implementation
Bundle-Vendor: %providerName
diff --git a/bundles/org.eclipse.e4.ui.model.workbench.edit/icons/full/ctool16/CreateElementContainer_children_DynamicMenuContribution.gif b/bundles/org.eclipse.e4.ui.model.workbench.edit/icons/full/ctool16/CreateElementContainer_children_DynamicMenuContribution.gif
new file mode 100644
index 00000000000..4f1420c5598
Binary files /dev/null and b/bundles/org.eclipse.e4.ui.model.workbench.edit/icons/full/ctool16/CreateElementContainer_children_DynamicMenuContribution.gif differ
diff --git a/bundles/org.eclipse.e4.ui.model.workbench.edit/icons/full/ctool16/CreateWindow_sharedElements_DynamicMenuContribution.gif b/bundles/org.eclipse.e4.ui.model.workbench.edit/icons/full/ctool16/CreateWindow_sharedElements_DynamicMenuContribution.gif
new file mode 100644
index 00000000000..6b9afeaec63
Binary files /dev/null and b/bundles/org.eclipse.e4.ui.model.workbench.edit/icons/full/ctool16/CreateWindow_sharedElements_DynamicMenuContribution.gif differ
diff --git a/bundles/org.eclipse.e4.ui.model.workbench.edit/icons/full/obj16/DynamicMenuContribution.gif b/bundles/org.eclipse.e4.ui.model.workbench.edit/icons/full/obj16/DynamicMenuContribution.gif
new file mode 100644
index 00000000000..5a2614a83b0
Binary files /dev/null and b/bundles/org.eclipse.e4.ui.model.workbench.edit/icons/full/obj16/DynamicMenuContribution.gif differ
diff --git a/bundles/org.eclipse.e4.ui.model.workbench.edit/plugin.properties b/bundles/org.eclipse.e4.ui.model.workbench.edit/plugin.properties
index 13f120aee82..bb1f5837b8f 100644
--- a/bundles/org.eclipse.e4.ui.model.workbench.edit/plugin.properties
+++ b/bundles/org.eclipse.e4.ui.model.workbench.edit/plugin.properties
@@ -282,3 +282,4 @@ _UI_StringToObjectMap_value_feature = Value
_UI_SnippetContainer_type = Snippet Container
_UI_SnippetContainer_snippets_feature = Snippets
_UI_ApplicationElement_persistedState_feature = Persisted State
+_UI_DynamicMenuContribution_type = Dynamic Menu Contribution
diff --git a/bundles/org.eclipse.e4.ui.model.workbench.edit/pom.xml b/bundles/org.eclipse.e4.ui.model.workbench.edit/pom.xml
index e3fc86e0f16..7a42ee0259d 100644
--- a/bundles/org.eclipse.e4.ui.model.workbench.edit/pom.xml
+++ b/bundles/org.eclipse.e4.ui.model.workbench.edit/pom.xml
@@ -21,6 +21,6 @@
eclipse.platform.uiorg.eclipse.e4.ui.model.workbench.edit
- 0.10.1-SNAPSHOT
+ 0.11.0-SNAPSHOTeclipse-plugin
diff --git a/bundles/org.eclipse.e4.ui.model.workbench.edit/src/org/eclipse/e4/ui/model/application/provider/ApplicationItemProvider.java b/bundles/org.eclipse.e4.ui.model.workbench.edit/src/org/eclipse/e4/ui/model/application/provider/ApplicationItemProvider.java
index 290d29a4bec..fddbc758fae 100644
--- a/bundles/org.eclipse.e4.ui.model.workbench.edit/src/org/eclipse/e4/ui/model/application/provider/ApplicationItemProvider.java
+++ b/bundles/org.eclipse.e4.ui.model.workbench.edit/src/org/eclipse/e4/ui/model/application/provider/ApplicationItemProvider.java
@@ -399,6 +399,11 @@ public class ApplicationItemProvider extends ElementContainerItemProvider
(UiPackageImpl.Literals.SNIPPET_CONTAINER__SNIPPETS,
MMenuFactory.INSTANCE.createOpaqueMenu()));
+ newChildDescriptors.add
+ (createChildParameter
+ (UiPackageImpl.Literals.SNIPPET_CONTAINER__SNIPPETS,
+ MMenuFactory.INSTANCE.createDynamicMenuContribution()));
+
newChildDescriptors.add
(createChildParameter
(UiPackageImpl.Literals.SNIPPET_CONTAINER__SNIPPETS,
diff --git a/bundles/org.eclipse.e4.ui.model.workbench.edit/src/org/eclipse/e4/ui/model/application/ui/advanced/provider/PerspectiveStackItemProvider.java b/bundles/org.eclipse.e4.ui.model.workbench.edit/src/org/eclipse/e4/ui/model/application/ui/advanced/provider/PerspectiveStackItemProvider.java
index c3143e7d0d8..7688d48d02a 100644
--- a/bundles/org.eclipse.e4.ui.model.workbench.edit/src/org/eclipse/e4/ui/model/application/ui/advanced/provider/PerspectiveStackItemProvider.java
+++ b/bundles/org.eclipse.e4.ui.model.workbench.edit/src/org/eclipse/e4/ui/model/application/ui/advanced/provider/PerspectiveStackItemProvider.java
@@ -308,6 +308,11 @@ public class PerspectiveStackItemProvider
(UiPackageImpl.Literals.ELEMENT_CONTAINER__CHILDREN,
MMenuFactory.INSTANCE.createOpaqueMenu()));
+ newChildDescriptors.add
+ (createChildParameter
+ (UiPackageImpl.Literals.ELEMENT_CONTAINER__CHILDREN,
+ MMenuFactory.INSTANCE.createDynamicMenuContribution()));
+
newChildDescriptors.add
(createChildParameter
(UiPackageImpl.Literals.ELEMENT_CONTAINER__CHILDREN,
diff --git a/bundles/org.eclipse.e4.ui.model.workbench.edit/src/org/eclipse/e4/ui/model/application/ui/basic/provider/WindowItemProvider.java b/bundles/org.eclipse.e4.ui.model.workbench.edit/src/org/eclipse/e4/ui/model/application/ui/basic/provider/WindowItemProvider.java
index c1f245d0bdf..712fb5fdc2d 100644
--- a/bundles/org.eclipse.e4.ui.model.workbench.edit/src/org/eclipse/e4/ui/model/application/ui/basic/provider/WindowItemProvider.java
+++ b/bundles/org.eclipse.e4.ui.model.workbench.edit/src/org/eclipse/e4/ui/model/application/ui/basic/provider/WindowItemProvider.java
@@ -589,6 +589,11 @@ public class WindowItemProvider
(UiPackageImpl.Literals.SNIPPET_CONTAINER__SNIPPETS,
MMenuFactory.INSTANCE.createOpaqueMenu()));
+ newChildDescriptors.add
+ (createChildParameter
+ (UiPackageImpl.Literals.SNIPPET_CONTAINER__SNIPPETS,
+ MMenuFactory.INSTANCE.createDynamicMenuContribution()));
+
newChildDescriptors.add
(createChildParameter
(UiPackageImpl.Literals.SNIPPET_CONTAINER__SNIPPETS,
@@ -779,6 +784,11 @@ public class WindowItemProvider
(BasicPackageImpl.Literals.WINDOW__SHARED_ELEMENTS,
MMenuFactory.INSTANCE.createOpaqueMenu()));
+ newChildDescriptors.add
+ (createChildParameter
+ (BasicPackageImpl.Literals.WINDOW__SHARED_ELEMENTS,
+ MMenuFactory.INSTANCE.createDynamicMenuContribution()));
+
newChildDescriptors.add
(createChildParameter
(BasicPackageImpl.Literals.WINDOW__SHARED_ELEMENTS,
diff --git a/bundles/org.eclipse.e4.ui.model.workbench.edit/src/org/eclipse/e4/ui/model/application/ui/menu/provider/DynamicMenuContributionItemProvider.java b/bundles/org.eclipse.e4.ui.model.workbench.edit/src/org/eclipse/e4/ui/model/application/ui/menu/provider/DynamicMenuContributionItemProvider.java
new file mode 100644
index 00000000000..3e16e1ef576
--- /dev/null
+++ b/bundles/org.eclipse.e4.ui.model.workbench.edit/src/org/eclipse/e4/ui/model/application/ui/menu/provider/DynamicMenuContributionItemProvider.java
@@ -0,0 +1,178 @@
+/**
+ * Copyright (c) 2008, 2012 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ */
+package org.eclipse.e4.ui.model.application.ui.menu.provider;
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.e4.ui.model.application.impl.ApplicationPackageImpl;
+
+import org.eclipse.e4.ui.model.application.ui.menu.MDynamicMenuContribution;
+
+import org.eclipse.e4.ui.model.application.ui.menu.impl.MenuPackageImpl;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.e4.ui.model.application.ui.menu.MDynamicMenuContribution} object.
+ *
+ *
+ * @generated
+ */
+public class DynamicMenuContributionItemProvider
+ extends MenuItemItemProvider
+ implements
+ IEditingDomainItemProvider,
+ IStructuredItemContentProvider,
+ ITreeItemContentProvider,
+ IItemLabelProvider,
+ IItemPropertySource {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ *
+ *
+ * @generated
+ */
+ public DynamicMenuContributionItemProvider(AdapterFactory adapterFactory) {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public List getPropertyDescriptors(Object object) {
+ if (itemPropertyDescriptors == null) {
+ super.getPropertyDescriptors(object);
+
+ addContributionURIPropertyDescriptor(object);
+ addObjectPropertyDescriptor(object);
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This adds a property descriptor for the Contribution URI feature.
+ *
+ *
+ * @generated
+ */
+ protected void addContributionURIPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_Contribution_contributionURI_feature"), //$NON-NLS-1$
+ getString("_UI_PropertyDescriptor_description", "_UI_Contribution_contributionURI_feature", "_UI_Contribution_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ ApplicationPackageImpl.Literals.CONTRIBUTION__CONTRIBUTION_URI,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Object feature.
+ *
+ *
+ * @generated
+ */
+ protected void addObjectPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_Contribution_object_feature"), //$NON-NLS-1$
+ getString("_UI_PropertyDescriptor_description", "_UI_Contribution_object_feature", "_UI_Contribution_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ ApplicationPackageImpl.Literals.CONTRIBUTION__OBJECT,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This returns DynamicMenuContribution.gif.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/DynamicMenuContribution")); //$NON-NLS-1$
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((MDynamicMenuContribution)object).getElementId();
+ return label == null || label.length() == 0 ?
+ getString("_UI_DynamicMenuContribution_type") : //$NON-NLS-1$
+ getString("_UI_DynamicMenuContribution_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+ }
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification) {
+ updateChildren(notification);
+
+ switch (notification.getFeatureID(MDynamicMenuContribution.class)) {
+ case MenuPackageImpl.DYNAMIC_MENU_CONTRIBUTION__CONTRIBUTION_URI:
+ case MenuPackageImpl.DYNAMIC_MENU_CONTRIBUTION__OBJECT:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+ return;
+ }
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection
+ *
+ * @generated
+ */
+public class DynamicMenuContributionImpl extends MenuItemImpl implements MDynamicMenuContribution {
+ /**
+ * The default value of the '{@link #getContributionURI() Contribution URI}' attribute.
+ *
+ *
+ * @see #getContributionURI()
+ * @generated
+ * @ordered
+ */
+ protected static final String CONTRIBUTION_URI_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getContributionURI() Contribution URI}' attribute.
+ *
+ *
+ * @see #getContributionURI()
+ * @generated
+ * @ordered
+ */
+ protected String contributionURI = CONTRIBUTION_URI_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #getObject() Object}' attribute.
+ *
+ *
+ * @see #getObject()
+ * @generated
+ * @ordered
+ */
+ protected static final Object OBJECT_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getObject() Object}' attribute.
+ *
+ *
+ * @see #getObject()
+ * @generated
+ * @ordered
+ */
+ protected Object object = OBJECT_EDEFAULT;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected DynamicMenuContributionImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return MenuPackageImpl.Literals.DYNAMIC_MENU_CONTRIBUTION;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public String getContributionURI() {
+ return contributionURI;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setContributionURI(String newContributionURI) {
+ String oldContributionURI = contributionURI;
+ contributionURI = newContributionURI;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, MenuPackageImpl.DYNAMIC_MENU_CONTRIBUTION__CONTRIBUTION_URI, oldContributionURI, contributionURI));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public Object getObject() {
+ return object;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setObject(Object newObject) {
+ Object oldObject = object;
+ object = newObject;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, MenuPackageImpl.DYNAMIC_MENU_CONTRIBUTION__OBJECT, oldObject, object));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case MenuPackageImpl.DYNAMIC_MENU_CONTRIBUTION__CONTRIBUTION_URI:
+ return getContributionURI();
+ case MenuPackageImpl.DYNAMIC_MENU_CONTRIBUTION__OBJECT:
+ return getObject();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case MenuPackageImpl.DYNAMIC_MENU_CONTRIBUTION__CONTRIBUTION_URI:
+ setContributionURI((String)newValue);
+ return;
+ case MenuPackageImpl.DYNAMIC_MENU_CONTRIBUTION__OBJECT:
+ setObject(newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case MenuPackageImpl.DYNAMIC_MENU_CONTRIBUTION__CONTRIBUTION_URI:
+ setContributionURI(CONTRIBUTION_URI_EDEFAULT);
+ return;
+ case MenuPackageImpl.DYNAMIC_MENU_CONTRIBUTION__OBJECT:
+ setObject(OBJECT_EDEFAULT);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case MenuPackageImpl.DYNAMIC_MENU_CONTRIBUTION__CONTRIBUTION_URI:
+ return CONTRIBUTION_URI_EDEFAULT == null ? contributionURI != null : !CONTRIBUTION_URI_EDEFAULT.equals(contributionURI);
+ case MenuPackageImpl.DYNAMIC_MENU_CONTRIBUTION__OBJECT:
+ return OBJECT_EDEFAULT == null ? object != null : !OBJECT_EDEFAULT.equals(object);
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public int eBaseStructuralFeatureID(int derivedFeatureID, Class> baseClass) {
+ if (baseClass == MContribution.class) {
+ switch (derivedFeatureID) {
+ case MenuPackageImpl.DYNAMIC_MENU_CONTRIBUTION__CONTRIBUTION_URI: return ApplicationPackageImpl.CONTRIBUTION__CONTRIBUTION_URI;
+ case MenuPackageImpl.DYNAMIC_MENU_CONTRIBUTION__OBJECT: return ApplicationPackageImpl.CONTRIBUTION__OBJECT;
+ default: return -1;
+ }
+ }
+ return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public int eDerivedStructuralFeatureID(int baseFeatureID, Class> baseClass) {
+ if (baseClass == MContribution.class) {
+ switch (baseFeatureID) {
+ case ApplicationPackageImpl.CONTRIBUTION__CONTRIBUTION_URI: return MenuPackageImpl.DYNAMIC_MENU_CONTRIBUTION__CONTRIBUTION_URI;
+ case ApplicationPackageImpl.CONTRIBUTION__OBJECT: return MenuPackageImpl.DYNAMIC_MENU_CONTRIBUTION__OBJECT;
+ default: return -1;
+ }
+ }
+ return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (eIsProxy()) return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (contributionURI: "); //$NON-NLS-1$
+ result.append(contributionURI);
+ result.append(", object: "); //$NON-NLS-1$
+ result.append(object);
+ result.append(')');
+ return result.toString();
+ }
+
+} //DynamicMenuContributionImpl
diff --git a/bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/ui/menu/impl/MenuFactoryImpl.java b/bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/ui/menu/impl/MenuFactoryImpl.java
index 674df3da96e..713e7374103 100644
--- a/bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/ui/menu/impl/MenuFactoryImpl.java
+++ b/bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/ui/menu/impl/MenuFactoryImpl.java
@@ -10,6 +10,7 @@
*/
package org.eclipse.e4.ui.model.application.ui.menu.impl;
+import org.eclipse.e4.ui.model.application.ui.menu.*;
import org.eclipse.e4.ui.model.application.ui.menu.ItemType;
import org.eclipse.e4.ui.model.application.ui.menu.MDirectMenuItem;
import org.eclipse.e4.ui.model.application.ui.menu.MDirectToolItem;
@@ -111,6 +112,7 @@ public class MenuFactoryImpl extends EFactoryImpl implements MMenuFactory {
case MenuPackageImpl.OPAQUE_MENU_ITEM: return (EObject)createOpaqueMenuItem();
case MenuPackageImpl.OPAQUE_MENU_SEPARATOR: return (EObject)createOpaqueMenuSeparator();
case MenuPackageImpl.OPAQUE_MENU: return (EObject)createOpaqueMenu();
+ case MenuPackageImpl.DYNAMIC_MENU_CONTRIBUTION: return (EObject)createDynamicMenuContribution();
default:
throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier"); //$NON-NLS-1$ //$NON-NLS-2$
}
@@ -346,6 +348,16 @@ public class MenuFactoryImpl extends EFactoryImpl implements MMenuFactory {
return opaqueMenu;
}
+ /**
+ *
+ *
+ * @generated
+ */
+ public MDynamicMenuContribution createDynamicMenuContribution() {
+ DynamicMenuContributionImpl dynamicMenuContribution = new DynamicMenuContributionImpl();
+ return dynamicMenuContribution;
+ }
+
/**
*
*
diff --git a/bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/ui/menu/impl/MenuPackageImpl.java b/bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/ui/menu/impl/MenuPackageImpl.java
index bec00b844d7..0d946004f37 100644
--- a/bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/ui/menu/impl/MenuPackageImpl.java
+++ b/bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/ui/menu/impl/MenuPackageImpl.java
@@ -18,6 +18,7 @@ import org.eclipse.e4.ui.model.application.ui.impl.UiPackageImpl;
import org.eclipse.e4.ui.model.application.ui.menu.ItemType;
import org.eclipse.e4.ui.model.application.ui.menu.MDirectMenuItem;
import org.eclipse.e4.ui.model.application.ui.menu.MDirectToolItem;
+import org.eclipse.e4.ui.model.application.ui.menu.MDynamicMenuContribution;
import org.eclipse.e4.ui.model.application.ui.menu.MHandledItem;
import org.eclipse.e4.ui.model.application.ui.menu.MHandledMenuItem;
import org.eclipse.e4.ui.model.application.ui.menu.MHandledToolItem;
@@ -6514,6 +6515,286 @@ public class MenuPackageImpl extends EPackageImpl {
*/
public static final int OPAQUE_MENU_OPERATION_COUNT = MENU_OPERATION_COUNT + 0;
+ /**
+ * The meta object id for the '{@link org.eclipse.e4.ui.model.application.ui.menu.impl.DynamicMenuContributionImpl Dynamic Menu Contribution}' class.
+ *
+ *
+ * @see org.eclipse.e4.ui.model.application.ui.menu.impl.DynamicMenuContributionImpl
+ * @see org.eclipse.e4.ui.model.application.ui.menu.impl.MenuPackageImpl#getDynamicMenuContribution()
+ * @generated
+ */
+ public static final int DYNAMIC_MENU_CONTRIBUTION = 29;
+
+ /**
+ * The feature id for the 'Element Id' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ public static final int DYNAMIC_MENU_CONTRIBUTION__ELEMENT_ID = MENU_ITEM__ELEMENT_ID;
+
+ /**
+ * The feature id for the 'Persisted State' map.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ public static final int DYNAMIC_MENU_CONTRIBUTION__PERSISTED_STATE = MENU_ITEM__PERSISTED_STATE;
+
+ /**
+ * The feature id for the 'Tags' attribute list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ public static final int DYNAMIC_MENU_CONTRIBUTION__TAGS = MENU_ITEM__TAGS;
+
+ /**
+ * The feature id for the 'Contributor URI' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ public static final int DYNAMIC_MENU_CONTRIBUTION__CONTRIBUTOR_URI = MENU_ITEM__CONTRIBUTOR_URI;
+
+ /**
+ * The feature id for the 'Transient Data' map.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ public static final int DYNAMIC_MENU_CONTRIBUTION__TRANSIENT_DATA = MENU_ITEM__TRANSIENT_DATA;
+
+ /**
+ * The feature id for the 'Widget' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ public static final int DYNAMIC_MENU_CONTRIBUTION__WIDGET = MENU_ITEM__WIDGET;
+
+ /**
+ * The feature id for the 'Renderer' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ public static final int DYNAMIC_MENU_CONTRIBUTION__RENDERER = MENU_ITEM__RENDERER;
+
+ /**
+ * The feature id for the 'To Be Rendered' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ public static final int DYNAMIC_MENU_CONTRIBUTION__TO_BE_RENDERED = MENU_ITEM__TO_BE_RENDERED;
+
+ /**
+ * The feature id for the 'On Top' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ public static final int DYNAMIC_MENU_CONTRIBUTION__ON_TOP = MENU_ITEM__ON_TOP;
+
+ /**
+ * The feature id for the 'Visible' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ public static final int DYNAMIC_MENU_CONTRIBUTION__VISIBLE = MENU_ITEM__VISIBLE;
+
+ /**
+ * The feature id for the 'Parent' container reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ public static final int DYNAMIC_MENU_CONTRIBUTION__PARENT = MENU_ITEM__PARENT;
+
+ /**
+ * The feature id for the 'Container Data' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ public static final int DYNAMIC_MENU_CONTRIBUTION__CONTAINER_DATA = MENU_ITEM__CONTAINER_DATA;
+
+ /**
+ * The feature id for the 'Cur Shared Ref' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ public static final int DYNAMIC_MENU_CONTRIBUTION__CUR_SHARED_REF = MENU_ITEM__CUR_SHARED_REF;
+
+ /**
+ * The feature id for the 'Visible When' containment reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ public static final int DYNAMIC_MENU_CONTRIBUTION__VISIBLE_WHEN = MENU_ITEM__VISIBLE_WHEN;
+
+ /**
+ * The feature id for the 'Accessibility Phrase' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ public static final int DYNAMIC_MENU_CONTRIBUTION__ACCESSIBILITY_PHRASE = MENU_ITEM__ACCESSIBILITY_PHRASE;
+
+ /**
+ * The feature id for the 'Label' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ public static final int DYNAMIC_MENU_CONTRIBUTION__LABEL = MENU_ITEM__LABEL;
+
+ /**
+ * The feature id for the 'Icon URI' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ public static final int DYNAMIC_MENU_CONTRIBUTION__ICON_URI = MENU_ITEM__ICON_URI;
+
+ /**
+ * The feature id for the 'Tooltip' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ public static final int DYNAMIC_MENU_CONTRIBUTION__TOOLTIP = MENU_ITEM__TOOLTIP;
+
+ /**
+ * The feature id for the 'Enabled' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ public static final int DYNAMIC_MENU_CONTRIBUTION__ENABLED = MENU_ITEM__ENABLED;
+
+ /**
+ * The feature id for the 'Selected' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ public static final int DYNAMIC_MENU_CONTRIBUTION__SELECTED = MENU_ITEM__SELECTED;
+
+ /**
+ * The feature id for the 'Type' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ public static final int DYNAMIC_MENU_CONTRIBUTION__TYPE = MENU_ITEM__TYPE;
+
+ /**
+ * The feature id for the 'Mnemonics' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ public static final int DYNAMIC_MENU_CONTRIBUTION__MNEMONICS = MENU_ITEM__MNEMONICS;
+
+ /**
+ * The feature id for the 'Contribution URI' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ public static final int DYNAMIC_MENU_CONTRIBUTION__CONTRIBUTION_URI = MENU_ITEM_FEATURE_COUNT + 0;
+
+ /**
+ * The feature id for the 'Object' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ public static final int DYNAMIC_MENU_CONTRIBUTION__OBJECT = MENU_ITEM_FEATURE_COUNT + 1;
+
+ /**
+ * The number of structural features of the 'Dynamic Menu Contribution' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ public static final int DYNAMIC_MENU_CONTRIBUTION_FEATURE_COUNT = MENU_ITEM_FEATURE_COUNT + 2;
+
+ /**
+ * The operation id for the 'Get Localized Accessibility Phrase' operation.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ public static final int DYNAMIC_MENU_CONTRIBUTION___GET_LOCALIZED_ACCESSIBILITY_PHRASE = MENU_ITEM___GET_LOCALIZED_ACCESSIBILITY_PHRASE;
+
+ /**
+ * The operation id for the 'Get Localized Label' operation.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ public static final int DYNAMIC_MENU_CONTRIBUTION___GET_LOCALIZED_LABEL = MENU_ITEM___GET_LOCALIZED_LABEL;
+
+ /**
+ * The operation id for the 'Get Localized Tooltip' operation.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ public static final int DYNAMIC_MENU_CONTRIBUTION___GET_LOCALIZED_TOOLTIP = MENU_ITEM___GET_LOCALIZED_TOOLTIP;
+
+ /**
+ * The operation id for the 'Get Localized Mnemonics' operation.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ public static final int DYNAMIC_MENU_CONTRIBUTION___GET_LOCALIZED_MNEMONICS = MENU_ITEM___GET_LOCALIZED_MNEMONICS;
+
+ /**
+ * The number of operations of the 'Dynamic Menu Contribution' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ public static final int DYNAMIC_MENU_CONTRIBUTION_OPERATION_COUNT = MENU_ITEM_OPERATION_COUNT + 0;
+
/**
* The meta object id for the '{@link org.eclipse.e4.ui.model.application.ui.menu.ItemType Item Type}' enum.
*
@@ -6522,7 +6803,7 @@ public class MenuPackageImpl extends EPackageImpl {
* @see org.eclipse.e4.ui.model.application.ui.menu.impl.MenuPackageImpl#getItemType()
* @generated
*/
- public static final int ITEM_TYPE = 29;
+ public static final int ITEM_TYPE = 30;
/**
*
@@ -6727,6 +7008,13 @@ public class MenuPackageImpl extends EPackageImpl {
*/
private EClass opaqueMenuEClass = null;
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass dynamicMenuContributionEClass = null;
+
/**
*
*
@@ -7520,6 +7808,19 @@ public class MenuPackageImpl extends EPackageImpl {
}
+ /**
+ * Returns the meta object for class '{@link org.eclipse.e4.ui.model.application.ui.menu.MDynamicMenuContribution Dynamic Menu Contribution}'.
+ *
+ *
+ * @return the meta object for class 'Dynamic Menu Contribution'.
+ * @see org.eclipse.e4.ui.model.application.ui.menu.MDynamicMenuContribution
+ * @generated
+ */
+ public EClass getDynamicMenuContribution() {
+ return dynamicMenuContributionEClass;
+ }
+
+
/**
* Returns the meta object for enum '{@link org.eclipse.e4.ui.model.application.ui.menu.ItemType Item Type}'.
*
@@ -7645,6 +7946,8 @@ public class MenuPackageImpl extends EPackageImpl {
opaqueMenuEClass = createEClass(OPAQUE_MENU);
+ dynamicMenuContributionEClass = createEClass(DYNAMIC_MENU_CONTRIBUTION);
+
// Create enums
itemTypeEEnum = createEEnum(ITEM_TYPE);
}
@@ -7739,6 +8042,8 @@ public class MenuPackageImpl extends EPackageImpl {
opaqueMenuItemEClass.getESuperTypes().add(this.getMenuItem());
opaqueMenuSeparatorEClass.getESuperTypes().add(this.getMenuSeparator());
opaqueMenuEClass.getESuperTypes().add(this.getMenu());
+ dynamicMenuContributionEClass.getESuperTypes().add(this.getMenuItem());
+ dynamicMenuContributionEClass.getESuperTypes().add(theApplicationPackage.getContribution());
// Initialize classes, features, and operations; add parameters
initEClass(itemEClass, MItem.class, "Item", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
@@ -7825,6 +8130,8 @@ public class MenuPackageImpl extends EPackageImpl {
initEClass(opaqueMenuEClass, MOpaqueMenu.class, "OpaqueMenu", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+ initEClass(dynamicMenuContributionEClass, MDynamicMenuContribution.class, "DynamicMenuContribution", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
// Initialize enums and add enum literals
initEEnum(itemTypeEEnum, ItemType.class, "ItemType"); //$NON-NLS-1$
addEEnumLiteral(itemTypeEEnum, ItemType.PUSH);
@@ -8335,6 +8642,16 @@ public class MenuPackageImpl extends EPackageImpl {
*/
public static final EClass OPAQUE_MENU = eINSTANCE.getOpaqueMenu();
+ /**
+ * The meta object literal for the '{@link org.eclipse.e4.ui.model.application.ui.menu.impl.DynamicMenuContributionImpl Dynamic Menu Contribution}' class.
+ *
+ *
+ * @see org.eclipse.e4.ui.model.application.ui.menu.impl.DynamicMenuContributionImpl
+ * @see org.eclipse.e4.ui.model.application.ui.menu.impl.MenuPackageImpl#getDynamicMenuContribution()
+ * @generated
+ */
+ public static final EClass DYNAMIC_MENU_CONTRIBUTION = eINSTANCE.getDynamicMenuContribution();
+
/**
* The meta object literal for the '{@link org.eclipse.e4.ui.model.application.ui.menu.ItemType Item Type}' enum.
*
diff --git a/bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/ui/menu/util/MenuAdapterFactory.java b/bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/ui/menu/util/MenuAdapterFactory.java
index c50d3f984df..a47eb6b642b 100644
--- a/bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/ui/menu/util/MenuAdapterFactory.java
+++ b/bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/ui/menu/util/MenuAdapterFactory.java
@@ -17,6 +17,7 @@ import org.eclipse.e4.ui.model.application.ui.MElementContainer;
import org.eclipse.e4.ui.model.application.ui.MUIElement;
import org.eclipse.e4.ui.model.application.ui.MUILabel;
import org.eclipse.e4.ui.model.application.ui.basic.MTrimElement;
+import org.eclipse.e4.ui.model.application.ui.menu.*;
import org.eclipse.e4.ui.model.application.ui.menu.MDirectMenuItem;
import org.eclipse.e4.ui.model.application.ui.menu.MDirectToolItem;
import org.eclipse.e4.ui.model.application.ui.menu.MHandledItem;
@@ -225,6 +226,10 @@ public class MenuAdapterFactory extends AdapterFactoryImpl {
return createOpaqueMenuAdapter();
}
@Override
+ public Adapter caseDynamicMenuContribution(MDynamicMenuContribution object) {
+ return createDynamicMenuContributionAdapter();
+ }
+ @Override
public Adapter caseApplicationElement(MApplicationElement object) {
return createApplicationElementAdapter();
}
@@ -678,6 +683,20 @@ public class MenuAdapterFactory extends AdapterFactoryImpl {
return null;
}
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.e4.ui.model.application.ui.menu.MDynamicMenuContribution Dynamic Menu Contribution}'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see org.eclipse.e4.ui.model.application.ui.menu.MDynamicMenuContribution
+ * @generated
+ */
+ public Adapter createDynamicMenuContributionAdapter() {
+ return null;
+ }
+
/**
* Creates a new adapter for an object of class '{@link org.eclipse.e4.ui.model.application.MApplicationElement Element}'.
*
diff --git a/bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/ui/menu/util/MenuSwitch.java b/bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/ui/menu/util/MenuSwitch.java
index 23acb3499ca..8e4e4737cc7 100644
--- a/bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/ui/menu/util/MenuSwitch.java
+++ b/bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/ui/menu/util/MenuSwitch.java
@@ -17,6 +17,7 @@ import org.eclipse.e4.ui.model.application.ui.MElementContainer;
import org.eclipse.e4.ui.model.application.ui.MUIElement;
import org.eclipse.e4.ui.model.application.ui.MUILabel;
import org.eclipse.e4.ui.model.application.ui.basic.MTrimElement;
+import org.eclipse.e4.ui.model.application.ui.menu.*;
import org.eclipse.e4.ui.model.application.ui.menu.MDirectMenuItem;
import org.eclipse.e4.ui.model.application.ui.menu.MDirectToolItem;
import org.eclipse.e4.ui.model.application.ui.menu.MHandledItem;
@@ -409,6 +410,19 @@ public class MenuSwitch extends Switch {
if (result == null) result = defaultCase(theEObject);
return result;
}
+ case MenuPackageImpl.DYNAMIC_MENU_CONTRIBUTION: {
+ MDynamicMenuContribution dynamicMenuContribution = (MDynamicMenuContribution)theEObject;
+ T1 result = caseDynamicMenuContribution(dynamicMenuContribution);
+ if (result == null) result = caseMenuItem(dynamicMenuContribution);
+ if (result == null) result = caseContribution(dynamicMenuContribution);
+ if (result == null) result = caseItem(dynamicMenuContribution);
+ if (result == null) result = caseMenuElement(dynamicMenuContribution);
+ if (result == null) result = caseUIElement(dynamicMenuContribution);
+ if (result == null) result = caseUILabel(dynamicMenuContribution);
+ if (result == null) result = caseApplicationElement(dynamicMenuContribution);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
default: return defaultCase(theEObject);
}
}
@@ -848,6 +862,21 @@ public class MenuSwitch extends Switch {
return null;
}
+ /**
+ * Returns the result of interpreting the object as an instance of 'Dynamic Menu Contribution'.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Dynamic Menu Contribution'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T1 caseDynamicMenuContribution(MDynamicMenuContribution object) {
+ return null;
+ }
+
/**
* Returns the result of interpreting the object as an instance of 'Element'.
*
diff --git a/bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/ui/util/UiAdapterFactory.java b/bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/ui/util/UiAdapterFactory.java
index dd37f9ea67d..67cdedd9c8e 100644
--- a/bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/ui/util/UiAdapterFactory.java
+++ b/bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/ui/util/UiAdapterFactory.java
@@ -11,6 +11,7 @@
package org.eclipse.e4.ui.model.application.ui.util;
import org.eclipse.e4.ui.model.application.MApplicationElement;
+import org.eclipse.e4.ui.model.application.ui.*;
import org.eclipse.e4.ui.model.application.ui.MContext;
import org.eclipse.e4.ui.model.application.ui.MCoreExpression;
import org.eclipse.e4.ui.model.application.ui.MDirtyable;
diff --git a/bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/ui/util/UiSwitch.java b/bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/ui/util/UiSwitch.java
index b8ffb094309..faec4486c4a 100644
--- a/bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/ui/util/UiSwitch.java
+++ b/bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/ui/util/UiSwitch.java
@@ -11,6 +11,7 @@
package org.eclipse.e4.ui.model.application.ui.util;
import org.eclipse.e4.ui.model.application.MApplicationElement;
+import org.eclipse.e4.ui.model.application.ui.*;
import org.eclipse.e4.ui.model.application.ui.MContext;
import org.eclipse.e4.ui.model.application.ui.MCoreExpression;
import org.eclipse.e4.ui.model.application.ui.MDirtyable;
diff --git a/bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/util/ApplicationAdapterFactory.java b/bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/util/ApplicationAdapterFactory.java
index 4f818b0e1a4..6f000f1ffa8 100644
--- a/bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/util/ApplicationAdapterFactory.java
+++ b/bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/util/ApplicationAdapterFactory.java
@@ -11,6 +11,7 @@
package org.eclipse.e4.ui.model.application.util;
import java.util.Map;
+import org.eclipse.e4.ui.model.application.*;
import org.eclipse.e4.ui.model.application.MAddon;
import org.eclipse.e4.ui.model.application.MApplication;
import org.eclipse.e4.ui.model.application.MApplicationElement;
diff --git a/bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/util/ApplicationSwitch.java b/bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/util/ApplicationSwitch.java
index 1aa07699452..2555ff84a1d 100644
--- a/bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/util/ApplicationSwitch.java
+++ b/bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/application/util/ApplicationSwitch.java
@@ -11,6 +11,7 @@
package org.eclipse.e4.ui.model.application.util;
import java.util.Map;
+import org.eclipse.e4.ui.model.application.*;
import org.eclipse.e4.ui.model.application.MAddon;
import org.eclipse.e4.ui.model.application.MApplication;
import org.eclipse.e4.ui.model.application.MApplicationElement;
diff --git a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/MenuManagerHideProcessor.java b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/MenuManagerHideProcessor.java
index f066a6df04a..4b6814250e2 100644
--- a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/MenuManagerHideProcessor.java
+++ b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/MenuManagerHideProcessor.java
@@ -10,9 +10,16 @@
*******************************************************************************/
package org.eclipse.e4.ui.workbench.renderers.swt;
+import java.util.ArrayList;
+import java.util.List;
import javax.inject.Inject;
+import org.eclipse.e4.core.contexts.ContextInjectionFactory;
+import org.eclipse.e4.core.contexts.EclipseContextFactory;
import org.eclipse.e4.core.contexts.IEclipseContext;
+import org.eclipse.e4.ui.di.AboutToHide;
+import org.eclipse.e4.ui.model.application.ui.menu.MDynamicMenuContribution;
import org.eclipse.e4.ui.model.application.ui.menu.MMenu;
+import org.eclipse.e4.ui.model.application.ui.menu.MMenuElement;
import org.eclipse.e4.ui.model.application.ui.menu.MPopupMenu;
import org.eclipse.e4.ui.workbench.modeling.EModelService;
import org.eclipse.e4.ui.workbench.swt.factories.IRendererFactory;
@@ -44,6 +51,8 @@ public class MenuManagerHideProcessor implements IMenuListener2 {
* @see
* org.eclipse.jface.action.IMenuListener#menuAboutToShow(org.eclipse.jface
* .action.IMenuManager)
+ *
+ * SWT.Hide pre-processing method for MenuManager
*/
public void menuAboutToShow(IMenuManager manager) {
if (!(manager instanceof MenuManager)) {
@@ -55,6 +64,49 @@ public class MenuManagerHideProcessor implements IMenuListener2 {
if (menuModel instanceof MPopupMenu) {
hidePopup(menu, (MPopupMenu) menuModel, menuManager);
}
+ if (menuModel != null && menu != null)
+ processDynamicElements(menu, menuModel);
+ }
+
+ /**
+ * Process dynamic menu contributions provided by
+ * {@link MDynamicMenuContribution} application model elements
+ *
+ * @param menu
+ * @param menuModel
+ *
+ */
+ private void processDynamicElements(Menu menu, final MMenu menuModel) {
+ if (!menu.isDisposed()) {
+ menu.getDisplay().asyncExec(new Runnable() {
+ public void run() {
+
+ MMenuElement[] ml = menuModel.getChildren().toArray(
+ new MMenuElement[menuModel.getChildren().size()]);
+ for (int i = 0; i < ml.length; i++) {
+
+ MMenuElement currentMenuElement = ml[i];
+ if (currentMenuElement instanceof MDynamicMenuContribution) {
+ Object contribution = ((MDynamicMenuContribution) currentMenuElement)
+ .getObject();
+
+ IEclipseContext dynamicMenuContext = EclipseContextFactory
+ .create();
+ @SuppressWarnings("unchecked")
+ ArrayList mel = (ArrayList) currentMenuElement
+ .getTransientData()
+ .get(MenuManagerShowProcessor.DYNAMIC_ELEMENT_STORAGE_KEY);
+ dynamicMenuContext.set(List.class, mel);
+ ContextInjectionFactory.invoke(contribution,
+ AboutToHide.class, dynamicMenuContext);
+ }
+
+ }
+
+ }
+ });
+ }
+
}
/*
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 f4d21bff7fa..c5f3befcdba 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
@@ -7,6 +7,7 @@
*
* Contributors:
* IBM Corporation - initial API and implementation
+ * Marco Descher - Bug 389063 Dynamic Menu Contribution
*******************************************************************************/
package org.eclipse.e4.ui.workbench.renderers.swt;
@@ -36,6 +37,7 @@ import org.eclipse.e4.ui.model.application.ui.MUILabel;
import org.eclipse.e4.ui.model.application.ui.basic.MPart;
import org.eclipse.e4.ui.model.application.ui.basic.MWindow;
import org.eclipse.e4.ui.model.application.ui.menu.MDirectMenuItem;
+import org.eclipse.e4.ui.model.application.ui.menu.MDynamicMenuContribution;
import org.eclipse.e4.ui.model.application.ui.menu.MHandledMenuItem;
import org.eclipse.e4.ui.model.application.ui.menu.MMenu;
import org.eclipse.e4.ui.model.application.ui.menu.MMenuContribution;
@@ -946,4 +948,22 @@ public class MenuManagerRenderer extends SWTPartRenderer {
menuManager.markDirty();
}
}
+
+ /**
+ * Clean dynamic menu contributions provided by
+ * {@link MDynamicMenuContribution} application model elements
+ *
+ * @param menuManager
+ * @param menuModel
+ * @param dump
+ */
+ public void removeDynamicMenuContributions(MenuManager menuManager,
+ MMenu menuModel, ArrayList dump) {
+ removeMenuContributions(menuModel, dump);
+ for (MMenuElement mMenuElement : dump) {
+ IContributionItem ici = getContribution(mMenuElement);
+ menuManager.remove(ici);
+ clearModelToContribution(menuModel, ici);
+ }
+ }
}
diff --git a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/MenuManagerShowProcessor.java b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/MenuManagerShowProcessor.java
index e10afdd4bab..b22cb04d625 100644
--- a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/MenuManagerShowProcessor.java
+++ b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/MenuManagerShowProcessor.java
@@ -7,17 +7,27 @@
*
* Contributors:
* IBM Corporation - initial API and implementation
+ * Marco Descher - Bug 389063 Dynamic Menu Contribution
*******************************************************************************/
package org.eclipse.e4.ui.workbench.renderers.swt;
+import java.util.ArrayList;
import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
import javax.inject.Inject;
+import org.eclipse.e4.core.contexts.ContextInjectionFactory;
+import org.eclipse.e4.core.contexts.EclipseContextFactory;
import org.eclipse.e4.core.contexts.IEclipseContext;
+import org.eclipse.e4.core.services.contributions.IContributionFactory;
+import org.eclipse.e4.ui.di.AboutToShow;
import org.eclipse.e4.ui.internal.workbench.swt.AbstractPartRenderer;
import org.eclipse.e4.ui.internal.workbench.swt.Policy;
import org.eclipse.e4.ui.internal.workbench.swt.WorkbenchSWTActivator;
import org.eclipse.e4.ui.model.application.ui.MContext;
+import org.eclipse.e4.ui.model.application.ui.menu.MDynamicMenuContribution;
import org.eclipse.e4.ui.model.application.ui.menu.MMenu;
+import org.eclipse.e4.ui.model.application.ui.menu.MMenuElement;
import org.eclipse.e4.ui.model.application.ui.menu.MPopupMenu;
import org.eclipse.e4.ui.workbench.modeling.EModelService;
import org.eclipse.e4.ui.workbench.swt.factories.IRendererFactory;
@@ -49,6 +59,9 @@ public class MenuManagerShowProcessor implements IMenuListener2 {
@Inject
private MenuManagerRenderer renderer;
+ @Inject
+ private IContributionFactory contributionFactory;
+
private HashMap