Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBob Brodt2016-09-30 16:32:19 +0000
committerBob Brodt2016-09-30 16:32:19 +0000
commit1403c69b9219228878e166401d5d6a3ad431e9ca (patch)
tree48d214e41937d750999244a4df595ae63af475f8
parent7b838dc84c6fca5975c1b978f9479de490ecb05b (diff)
downloadorg.eclipse.bpmn2-modeler-1403c69b9219228878e166401d5d6a3ad431e9ca.tar.gz
org.eclipse.bpmn2-modeler-1403c69b9219228878e166401d5d6a3ad431e9ca.tar.xz
org.eclipse.bpmn2-modeler-1403c69b9219228878e166401d5d6a3ad431e9ca.zip
https://issues.jboss.org/browse/RHBPMS-4283
Context menu 'Morph Activity' is not consistent with other options
-rw-r--r--plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/AbstractMorphNodeFeature.java58
1 files changed, 57 insertions, 1 deletions
diff --git a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/AbstractMorphNodeFeature.java b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/AbstractMorphNodeFeature.java
index 63b43a37..22d495ba 100644
--- a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/AbstractMorphNodeFeature.java
+++ b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/AbstractMorphNodeFeature.java
@@ -27,6 +27,7 @@ import org.eclipse.bpmn2.di.BPMNShape;
import org.eclipse.bpmn2.modeler.core.features.CustomShapeFeatureContainer.CreateCustomShapeFeature;
import org.eclipse.bpmn2.modeler.core.features.GraphitiConstants;
import org.eclipse.bpmn2.modeler.core.features.IBpmn2CreateFeature;
+import org.eclipse.bpmn2.modeler.core.features.SubMenuCustomFeature;
import org.eclipse.bpmn2.modeler.core.preferences.Bpmn2Preferences;
import org.eclipse.bpmn2.modeler.core.preferences.ModelEnablements;
import org.eclipse.bpmn2.modeler.core.preferences.ShapeStyle;
@@ -67,6 +68,8 @@ import org.eclipse.graphiti.palette.IToolEntry;
import org.eclipse.graphiti.palette.impl.ObjectCreationToolEntry;
import org.eclipse.graphiti.services.Graphiti;
import org.eclipse.graphiti.services.ILayoutService;
+import org.eclipse.graphiti.tb.ContextMenuEntry;
+import org.eclipse.graphiti.tb.IContextMenuEntry;
import org.eclipse.graphiti.tb.IToolBehaviorProvider;
import org.eclipse.graphiti.ui.editor.DiagramEditor;
import org.eclipse.graphiti.ui.internal.util.ui.PopupMenu;
@@ -129,7 +132,60 @@ public abstract class AbstractMorphNodeFeature<T extends FlowNode> extends Abstr
@Override
public boolean canExecute(ICustomContext context) {
- return getTools(context).size()>0;
+ List<IToolEntry> tools = getTools(context);
+ if (tools.size()==0)
+ return false;
+ String key = GraphitiConstants.CONTEXT_MENU_ENTRY + this.getName();
+ IContextMenuEntry contextMenuEntry = (IContextMenuEntry) context.getProperty(key);
+ if (contextMenuEntry!=null) {
+ if (contextMenuEntry.getChildren().length == 0) {
+ Bpmn2ToolBehaviorProvider toolProvider = getToolProvider();
+ LinkedHashMap<IPaletteCompartmentEntry, ContextMenuEntry> categories = new LinkedHashMap<IPaletteCompartmentEntry, ContextMenuEntry>();
+ ContextMenuEntry cme = null;
+
+ for (IToolEntry tool : tools) {
+ IPaletteCompartmentEntry ce = toolProvider.getCategory(tool);
+ if (ce!=null) {
+ if (categories.containsKey(ce)) {
+ cme = categories.get(ce);
+ }
+ else {
+ cme = new ContextMenuEntry(this, context);
+ cme.setText(ce.getLabel());
+ categories.put(ce, cme);
+ }
+ }
+ }
+ if (categories.size()>1) {
+ List<ContextMenuEntry> entries = new ArrayList<ContextMenuEntry>();
+ for (IToolEntry tool : tools) {
+ IPaletteCompartmentEntry ce = toolProvider.getCategory(tool);
+ if (ce!=null) {
+ ICreateFeature feature = ((ObjectCreationToolEntry)tool).getCreateFeature();
+ SubMenuCustomFeature submenuFeature = new SubMenuCustomFeature(this, feature);
+ cme = categories.get(ce);
+ ContextMenuEntry e = new ContextMenuEntry(submenuFeature, context);
+ e.setText(tool.getLabel());
+ cme.add(e);
+ if (!entries.contains(cme)) {
+ contextMenuEntry.add(cme);
+ entries.add(cme);
+ }
+ }
+ }
+ }
+ else {
+ for (IToolEntry tool : tools) {
+ ICreateFeature feature = ((ObjectCreationToolEntry)tool).getCreateFeature();
+ SubMenuCustomFeature submenuFeature = new SubMenuCustomFeature(this, feature);
+ cme = new ContextMenuEntry(submenuFeature, context);
+ cme.setText(tool.getLabel());
+ contextMenuEntry.add(cme);
+ }
+ }
+ }
+ }
+ return true;
}
@Override

Back to the top