From 9b7dccb4f53782bf4fca73de5842e85ce5092def Mon Sep 17 00:00:00 2001
From: Sebastian Bergemann <bergemann@fortiss.org>
Date: Tue, 19 Sep 2023 12:15:36 +0200
Subject: [PATCH] Split reuse elements into separate menu (within editor
 context menu)

Issue-Ref: 4323
Issue-Url: https://git.fortiss.org/af3/af3/-/issues/4323

Signed-off-by: Sebastian Bergemann <bergemann@fortiss.org>
---
 .../META-INF/MANIFEST.MF                      |  3 ++-
 .../base/ui/utils/ContextMenuUtils.java       | 21 ++++++++++++++++---
 2 files changed, 20 insertions(+), 4 deletions(-)

diff --git a/org.fortiss.tooling.base.ui/META-INF/MANIFEST.MF b/org.fortiss.tooling.base.ui/META-INF/MANIFEST.MF
index 1e4971a47..a1387ca8e 100644
--- a/org.fortiss.tooling.base.ui/META-INF/MANIFEST.MF
+++ b/org.fortiss.tooling.base.ui/META-INF/MANIFEST.MF
@@ -7,7 +7,8 @@ Bundle-Activator: org.fortiss.tooling.base.ui.ToolingBaseUIActivator
 Require-Bundle: org.fortiss.tooling.base;bundle-version="2.23.0";visibility:=reexport,
  org.fortiss.tooling.kernel.ui;bundle-version="2.23.0";visibility:=reexport,
  org.eclipse.swt,
- org.fortiss.tooling.common.ui
+ org.fortiss.tooling.common.ui,
+ org.fortiss.tooling.ext.reuse
 Bundle-ActivationPolicy: lazy
 Bundle-RequiredExecutionEnvironment: JavaSE-11
 Bundle-Vendor: fortiss GmbH
diff --git a/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/utils/ContextMenuUtils.java b/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/utils/ContextMenuUtils.java
index a55ceed42..ebe9cdc0b 100644
--- a/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/utils/ContextMenuUtils.java
+++ b/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/utils/ContextMenuUtils.java
@@ -16,6 +16,7 @@
 package org.fortiss.tooling.base.ui.utils;
 
 import static org.fortiss.tooling.base.utils.LayoutModelElementFactory.createPoint;
+import static org.fortiss.tooling.ext.reuse.utils.ReuseLibraryUtilsBasics.isCorrectReuseElement;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -70,6 +71,8 @@ public final class ContextMenuUtils {
 
 		List<MenuItem> result = new ArrayList<>();
 		Menu newMenu = new Menu("New ...");
+		Menu reuseMenu = new Menu("Reuse ...");
+
 		List<Prototype> protos = pers.getComposablePrototypes(target.getClass());
 		for(Prototype p : protos) {
 			EObject prototypeCopy = p.getPrototypeCopy();
@@ -79,18 +82,30 @@ public final class ContextMenuUtils {
 			if((!onlyForEditedObject || isMenuForEditedObject ||
 					prototypeCopy instanceof IConnector) &&
 					ecs.canCompose(target, prototypeCopy, context)) {
-				MenuItem mi = new MenuItem(p.getName());
-				mi.setOnAction(evt -> {
+				MenuItem menuItem = new MenuItem(p.getName());
+				menuItem.setOnAction(evt -> {
 					css.runAsCommand(target, () -> {
 						ecs.compose(target, prototypeCopy, context);
 					});
 				});
-				newMenu.getItems().add(mi);
+
+				if(isCorrectReuseElement(prototypeCopy)) {
+					// TODO 4323: add library name to item name
+					reuseMenu.getItems().add(menuItem);
+				} else {
+					newMenu.getItems().add(menuItem);
+				}
+				// TODO 4323: add priority system to prototypes (not only categories) and use it
+				// here to sort the newMenu list
 			}
 		}
+
 		if(!newMenu.getItems().isEmpty()) {
 			result.add(newMenu);
 		}
+		if(!reuseMenu.getItems().isEmpty()) {
+			result.add(reuseMenu);
+		}
 
 		return result;
 	}
-- 
GitLab