diff options
author | Bob Brodt | 2016-09-30 16:32:19 +0000 |
---|---|---|
committer | Bob Brodt | 2016-09-30 16:32:19 +0000 |
commit | 1403c69b9219228878e166401d5d6a3ad431e9ca (patch) | |
tree | 48d214e41937d750999244a4df595ae63af475f8 | |
parent | 7b838dc84c6fca5975c1b978f9479de490ecb05b (diff) | |
download | org.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.java | 58 |
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 |