From b9bb5d8c09a62c1ee65016ed03fff7d5821042c8 Mon Sep 17 00:00:00 2001
From: Florian Hoelzl <hoelzl@fortiss.org>
Date: Mon, 28 Mar 2011 12:40:21 +0000
Subject: [PATCH] trial implementation of context menu service

---
 org.fortiss.tooling.kernel/trunk/plugin.xml   |  2 +-
 .../interfaces/ICustomMenuContributor.java    |  7 ++++++-
 .../kernel/internal/ContextMenuService.java   |  7 ++++++-
 .../internal/navigator/NavigatorViewPart.java | 20 +++++++++++++++++--
 4 files changed, 31 insertions(+), 5 deletions(-)

diff --git a/org.fortiss.tooling.kernel/trunk/plugin.xml b/org.fortiss.tooling.kernel/trunk/plugin.xml
index f5fb82f82..2b9379055 100644
--- a/org.fortiss.tooling.kernel/trunk/plugin.xml
+++ b/org.fortiss.tooling.kernel/trunk/plugin.xml
@@ -48,7 +48,7 @@
          
       <menuContribution
             allPopups="false"
-            locationURI="popup:org.fortiss.tooling.kernel.model.navigator?before=custom">
+            locationURI="popup:org.fortiss.tooling.kernel.model.navigator2?before=custom">
          <menu
                icon="icons/add.png"
                id="org.fortiss.tooling.kernel.model.navigator.newmenu"
diff --git a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/interfaces/ICustomMenuContributor.java b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/interfaces/ICustomMenuContributor.java
index 9f9704e41..f09a38b71 100644
--- a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/interfaces/ICustomMenuContributor.java
+++ b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/interfaces/ICustomMenuContributor.java
@@ -17,6 +17,9 @@ $Id$
 +--------------------------------------------------------------------------*/
 package org.fortiss.tooling.kernel.interfaces;
 
+import java.util.List;
+
+import org.eclipse.jface.action.IContributionItem;
 import org.fortiss.tooling.kernel.services.IContextMenuService;
 
 /**
@@ -29,5 +32,7 @@ import org.fortiss.tooling.kernel.services.IContextMenuService;
  * @levd.rating RED Rev:
  */
 public interface ICustomMenuContributor {
-	// TODO (FH): implement
+
+	/** Returns the contributed items, i.e., actions or menus. */
+	List<IContributionItem> getContributedItems();
 }
diff --git a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/ContextMenuService.java b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/ContextMenuService.java
index 5114c99b8..e3b5f5216 100644
--- a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/ContextMenuService.java
+++ b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/ContextMenuService.java
@@ -17,6 +17,7 @@ $Id$
 +--------------------------------------------------------------------------*/
 package org.fortiss.tooling.kernel.internal;
 
+import org.eclipse.jface.action.IContributionItem;
 import org.eclipse.jface.action.IMenuListener;
 import org.eclipse.jface.action.IMenuManager;
 import org.eclipse.jface.action.MenuManager;
@@ -75,7 +76,11 @@ public class ContextMenuService implements IContextMenuService {
 			addVisibleSectionSeparator(menu,
 					IWorkbenchActionConstants.MB_ADDITIONS);
 
-			// TODO (FH): add custom menu to custom section
+			if (contributor != null) {
+				for (IContributionItem item : contributor.getContributedItems()) {
+					menu.appendToGroup(CUSTOM_MENU_SEPARATOR_ID, item);
+				}
+			}
 			IActionService.INSTANCE.addGlobalDefaultActionSectionToMenu(menu);
 		}
 	}
diff --git a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/navigator/NavigatorViewPart.java b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/navigator/NavigatorViewPart.java
index 568ca7101..aee683c18 100644
--- a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/navigator/NavigatorViewPart.java
+++ b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/navigator/NavigatorViewPart.java
@@ -17,6 +17,9 @@ $Id$
 +--------------------------------------------------------------------------*/
 package org.fortiss.tooling.kernel.internal.navigator;
 
+import java.util.ArrayList;
+import java.util.List;
+
 import org.conqat.ide.commons.ui.logging.LoggingUtils;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
@@ -24,6 +27,7 @@ import org.eclipse.core.runtime.Status;
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.common.notify.impl.AdapterImpl;
 import org.eclipse.emf.ecore.EObject;
+import org.eclipse.jface.action.IContributionItem;
 import org.eclipse.jface.action.MenuManager;
 import org.eclipse.jface.viewers.DecoratingLabelProvider;
 import org.eclipse.jface.viewers.DoubleClickEvent;
@@ -44,6 +48,7 @@ import org.eclipse.ui.views.properties.IPropertySheetPage;
 import org.eclipse.ui.views.properties.tabbed.ITabbedPropertySheetPageContributor;
 import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage;
 import org.fortiss.tooling.kernel.ToolingKernelActivator;
+import org.fortiss.tooling.kernel.interfaces.ICustomMenuContributor;
 import org.fortiss.tooling.kernel.internal.NavigatorService;
 import org.fortiss.tooling.kernel.services.IActionService;
 import org.fortiss.tooling.kernel.services.IContextMenuService;
@@ -68,7 +73,7 @@ import org.unicase.ecp.model.workSpaceModel.WorkSpaceModelPackage;
  */
 public final class NavigatorViewPart extends ViewPart implements
 		ISelectionListener, IDoubleClickListener,
-		ITabbedPropertySheetPageContributor {
+		ITabbedPropertySheetPageContributor, ICustomMenuContributor {
 
 	/** Stores the TreeViewer. */
 	private TreeViewer viewer;
@@ -208,7 +213,7 @@ public final class NavigatorViewPart extends ViewPart implements
 	/** Creates the context menu. */
 	private void createContextMenu() {
 		menuManager = IContextMenuService.INSTANCE
-				.createDefaultContextMenu(null);
+				.createDefaultContextMenu(this);
 
 		Menu contextMenu = menuManager.createContextMenu(viewer.getControl());
 		viewer.getControl().setMenu(contextMenu);
@@ -296,4 +301,15 @@ public final class NavigatorViewPart extends ViewPart implements
 		}
 		return super.getAdapter(adapter);
 	}
+
+	/** {@inheritDoc} */
+	@Override
+	public List<IContributionItem> getContributedItems() {
+		List<IContributionItem> result = new ArrayList<IContributionItem>();
+		// FIXME (FH): provide a wrapper menu with the new menu
+		// currently, only the entries are shown, but not a sub-menu
+		result.add(new NewMenu());
+		return result;
+	}
+
 }
-- 
GitLab