Merge branch 'develop' into X-multipage
diff --git a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/activity/AbstractAddActivityFeature.java b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/activity/AbstractAddActivityFeature.java
index 731e269..d7866e6 100644
--- a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/activity/AbstractAddActivityFeature.java
+++ b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/activity/AbstractAddActivityFeature.java
@@ -89,12 +89,12 @@
decorateActivityRectangle(rect);
peService.setPropertyValue(rectShape, IS_ACTIVITY, Boolean.toString(true));
- ContainerShape markerContainer = peService.createContainerShape(containerShape, false);
- Rectangle markerInvisibleRect = gaService.createInvisibleRectangle(markerContainer);
- int h = 10;
- y = height - h - 3 - getMarkerContainerOffset();
- gaService.setLocationAndSize(markerInvisibleRect, 0, y, invisibleRect.getWidth(), h);
- peService.setPropertyValue(markerContainer, GraphicsUtil.ACTIVITY_MARKER_CONTAINER, Boolean.toString(true));
+// ContainerShape markerContainer = peService.createContainerShape(containerShape, false);
+// Rectangle markerInvisibleRect = gaService.createInvisibleRectangle(markerContainer);
+// int h = 10;
+// y = height - h - 3 - getMarkerContainerOffset();
+// gaService.setLocationAndSize(markerInvisibleRect, 0, y, invisibleRect.getWidth(), h);
+// peService.setPropertyValue(markerContainer, GraphicsUtil.ACTIVITY_MARKER_CONTAINER, Boolean.toString(true));
hook(activity, containerShape, context, width, height); // hook for subclasses to inject extra code
diff --git a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/activity/AbstractUpdateMarkerFeature.java b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/activity/AbstractUpdateMarkerFeature.java
index 63350ef..6b3fa28 100644
--- a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/activity/AbstractUpdateMarkerFeature.java
+++ b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/activity/AbstractUpdateMarkerFeature.java
@@ -59,35 +59,12 @@
ContainerShape container = (ContainerShape) context.getPictogramElement();
T element = (T) getBusinessObjectForPictogramElement(context.getPictogramElement());
- ContainerShape markerContainer = null;
- if (isMarkerContainer(container))
- markerContainer = container;
- Iterator<Shape> iterator = peService.getAllContainedShapes(container).iterator();
- while (iterator.hasNext()) {
- Shape shape = (Shape) iterator.next();
- if (isMarkerContainer(shape)) {
- markerContainer = (ContainerShape) shape;
- break;
- }
- }
-
+ ContainerShape markerContainer = GraphicsUtil.getActivityMarkerContainer(container);
doUpdate(element, markerContainer);
peService.setPropertyValue(container, getPropertyKey(), convertPropertyToString(element));
return true;
}
- private boolean isMarkerContainer(Shape shape) {
- String property = Graphiti.getPeService().getPropertyValue(shape, GraphicsUtil.ACTIVITY_MARKER_CONTAINER);
- if(property != null && new Boolean(property)) {
- return shape instanceof ContainerShape;
- }
- property = Graphiti.getPeService().getPropertyValue(shape, GraphicsUtil.EVENT_MARKER_CONTAINER);
- if(property != null && new Boolean(property)) {
- return shape instanceof ContainerShape;
- }
- return false;
- }
-
protected abstract String getPropertyKey();
protected abstract boolean isPropertyChanged(T element, String propertyValue);
diff --git a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/activity/LayoutActivityFeature.java b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/activity/LayoutActivityFeature.java
index 15c603a..d2c13ca 100644
--- a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/activity/LayoutActivityFeature.java
+++ b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/activity/LayoutActivityFeature.java
@@ -51,24 +51,27 @@
public boolean layout(ILayoutContext context) {
ContainerShape containerShape = (ContainerShape) context.getPictogramElement();
GraphicsAlgorithm parentGa = containerShape.getGraphicsAlgorithm();
+ int newWidth = parentGa.getWidth();
+ int newHeight = parentGa.getHeight();
+ GraphicsUtil.setActivityMarkerOffest(containerShape, getMarkerContainerOffset());
+ GraphicsUtil.layoutActivityMarkerContainer(containerShape);
+
Iterator<Shape> iterator = Graphiti.getPeService().getAllContainedShapes(containerShape).iterator();
while (iterator.hasNext()) {
Shape shape = iterator.next();
GraphicsAlgorithm ga = shape.getGraphicsAlgorithm();
IGaService gaService = Graphiti.getGaService();
- int newWidth = parentGa.getWidth();
- int newHeight = parentGa.getHeight();
- String markerProperty = Graphiti.getPeService().getPropertyValue(shape,
- GraphicsUtil.ACTIVITY_MARKER_CONTAINER);
- if (markerProperty != null && new Boolean(markerProperty)) {
- int x = (newWidth / 2) - (ga.getWidth() / 2);
- int y = newHeight - ga.getHeight() - 3 - getMarkerContainerOffset();
- gaService.setLocation(ga, x, y);
- continue;
- }
+// String markerProperty = Graphiti.getPeService().getPropertyValue(shape,
+// GraphicsUtil.ACTIVITY_MARKER_CONTAINER);
+// if (markerProperty != null && new Boolean(markerProperty)) {
+// int x = (newWidth / 2) - (ga.getWidth() / 2);
+// int y = newHeight - ga.getHeight() - 3 - getMarkerContainerOffset();
+// gaService.setLocation(ga, x, y);
+// continue;
+// }
Shape rectShape = FeatureSupport.getShape(containerShape, IS_ACTIVITY, Boolean.toString(true));
gaService.setSize(rectShape.getGraphicsAlgorithm(), newWidth, newHeight);
diff --git a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/activity/UpdateActivityCompensateMarkerFeature.java b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/activity/UpdateActivityCompensateMarkerFeature.java
index feeb510..55e4344 100644
--- a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/activity/UpdateActivityCompensateMarkerFeature.java
+++ b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/activity/UpdateActivityCompensateMarkerFeature.java
@@ -40,11 +40,9 @@
@Override
protected void doUpdate(Activity activity, ContainerShape markerContainer) {
if (activity.isIsForCompensation()) {
- Compensation compensation = GraphicsUtil.createActivityMarkerCompensate(markerContainer);
- compensation.arrow1.setForeground(manageColor(StyleUtil.CLASS_FOREGROUND));
- compensation.arrow2.setForeground(manageColor(StyleUtil.CLASS_FOREGROUND));
+ GraphicsUtil.showActivityMarker(markerContainer, GraphicsUtil.ACTIVITY_MARKER_COMPENSATE);
} else {
- GraphicsUtil.clearActivityMarker(markerContainer, GraphicsUtil.ACTIVITY_MARKER_COMPENSATE);
+ GraphicsUtil.hideActivityMarker(markerContainer, GraphicsUtil.ACTIVITY_MARKER_COMPENSATE);
}
}
diff --git a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/activity/UpdateActivityLoopAndMultiInstanceMarkerFeature.java b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/activity/UpdateActivityLoopAndMultiInstanceMarkerFeature.java
index 2382457..cd039ea 100644
--- a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/activity/UpdateActivityLoopAndMultiInstanceMarkerFeature.java
+++ b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/activity/UpdateActivityLoopAndMultiInstanceMarkerFeature.java
@@ -64,25 +64,26 @@
@Override
protected void doUpdate(Activity activity, ContainerShape markerContainer) {
- GraphicsUtil.clearActivityMarker(markerContainer, GraphicsUtil.ACTIVITY_MARKER_LOOP_CHARACTERISTIC);
switch (getLoopCharacteristicsValue(activity)) {
case LOOP:
- Loop loop = GraphicsUtil.createActivityMarkerStandardLoop(markerContainer);
- loop.circle.setForeground(manageColor(StyleUtil.CLASS_FOREGROUND));
- loop.arrow.setForeground(manageColor(StyleUtil.CLASS_FOREGROUND));
+ GraphicsUtil.showActivityMarker(markerContainer, GraphicsUtil.ACTIVITY_MARKER_LC_STANDARD);
+ GraphicsUtil.hideActivityMarker(markerContainer, GraphicsUtil.ACTIVITY_MARKER_LC_MULTI_PARALLEL);
+ GraphicsUtil.hideActivityMarker(markerContainer, GraphicsUtil.ACTIVITY_MARKER_LC_MULTI_SEQUENTIAL);
break;
case MULTI_PARALLEL:
- MultiInstance multiParallel = GraphicsUtil.createActivityMarkerMultiParallel(markerContainer);
- multiParallel.line1.setForeground(manageColor(StyleUtil.CLASS_FOREGROUND));
- multiParallel.line2.setForeground(manageColor(StyleUtil.CLASS_FOREGROUND));
- multiParallel.line3.setForeground(manageColor(StyleUtil.CLASS_FOREGROUND));
+ GraphicsUtil.hideActivityMarker(markerContainer, GraphicsUtil.ACTIVITY_MARKER_LC_STANDARD);
+ GraphicsUtil.showActivityMarker(markerContainer, GraphicsUtil.ACTIVITY_MARKER_LC_MULTI_PARALLEL);
+ GraphicsUtil.hideActivityMarker(markerContainer, GraphicsUtil.ACTIVITY_MARKER_LC_MULTI_SEQUENTIAL);
break;
case MULTI_SEQUENTIAL:
- MultiInstance multiSeq = GraphicsUtil.createActivityMarkerMultiSequential(markerContainer);
- multiSeq.line1.setForeground(manageColor(StyleUtil.CLASS_FOREGROUND));
- multiSeq.line2.setForeground(manageColor(StyleUtil.CLASS_FOREGROUND));
- multiSeq.line3.setForeground(manageColor(StyleUtil.CLASS_FOREGROUND));
+ GraphicsUtil.hideActivityMarker(markerContainer, GraphicsUtil.ACTIVITY_MARKER_LC_STANDARD);
+ GraphicsUtil.hideActivityMarker(markerContainer, GraphicsUtil.ACTIVITY_MARKER_LC_MULTI_PARALLEL);
+ GraphicsUtil.showActivityMarker(markerContainer, GraphicsUtil.ACTIVITY_MARKER_LC_MULTI_SEQUENTIAL);
break;
+ default:
+ GraphicsUtil.hideActivityMarker(markerContainer, GraphicsUtil.ACTIVITY_MARKER_LC_STANDARD);
+ GraphicsUtil.hideActivityMarker(markerContainer, GraphicsUtil.ACTIVITY_MARKER_LC_MULTI_PARALLEL);
+ GraphicsUtil.hideActivityMarker(markerContainer, GraphicsUtil.ACTIVITY_MARKER_LC_MULTI_SEQUENTIAL);
}
}
diff --git a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/utils/GraphicsUtil.java b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/utils/GraphicsUtil.java
index 689edc3..b1339f8 100644
--- a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/utils/GraphicsUtil.java
+++ b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/utils/GraphicsUtil.java
@@ -16,6 +16,7 @@
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
+import java.util.List;
import java.util.Map;
import org.eclipse.bpmn2.EventDefinition;
@@ -33,6 +34,7 @@
import org.eclipse.graphiti.mm.algorithms.Polygon;
import org.eclipse.graphiti.mm.algorithms.Polyline;
import org.eclipse.graphiti.mm.algorithms.Rectangle;
+import org.eclipse.graphiti.mm.algorithms.styles.Color;
import org.eclipse.graphiti.mm.algorithms.styles.Point;
import org.eclipse.graphiti.mm.pictograms.ContainerShape;
import org.eclipse.graphiti.mm.pictograms.Diagram;
@@ -43,6 +45,7 @@
import org.eclipse.graphiti.services.ILayoutService;
import org.eclipse.graphiti.services.IPeService;
import org.eclipse.graphiti.ui.services.GraphitiUi;
+import org.eclipse.graphiti.util.IColorConstant;
public class GraphicsUtil {
@@ -239,7 +242,7 @@
return shape.getGraphicsAlgorithm().getWidth();
}
- public static Shape getShape(ContainerShape container, String propertyKey) {
+ public static Shape getContainedShape(ContainerShape container, String propertyKey) {
IPeService peService = Graphiti.getPeService();
Iterator<Shape> iterator = peService.getAllContainedShapes(container).iterator();
while (iterator.hasNext()) {
@@ -251,6 +254,20 @@
}
return null;
}
+
+ public static List<PictogramElement> getContainedPictogramElements(PictogramElement container, String propertyKey) {
+ List<PictogramElement> pictogramElements = new ArrayList<PictogramElement>();
+ IPeService peService = Graphiti.getPeService();
+ Iterator<PictogramElement> iterator = peService.getAllContainedPictogramElements(container).iterator();
+ while (iterator.hasNext()) {
+ PictogramElement pe = iterator.next();
+ String property = peService.getPropertyValue(pe, propertyKey);
+ if (property != null && new Boolean(property)) {
+ pictogramElements.add(pe);
+ }
+ }
+ return pictogramElements;
+ }
// private static final int[] GATEWAY = { 0, GATEWAY_RADIUS, GATEWAY_RADIUS, 0, 2 * GATEWAY_RADIUS, GATEWAY_RADIUS,
// GATEWAY_RADIUS, 2 * GATEWAY_RADIUS };
@@ -486,13 +503,8 @@
}
public static void clearGateway(PictogramElement element) {
- Iterator<PictogramElement> iterator = peService.getAllContainedPictogramElements(element).iterator();
- while (iterator.hasNext()) {
- PictogramElement childElement = iterator.next();
- boolean deletable = Boolean.parseBoolean(peService.getPropertyValue(childElement, DELETABLE_PROPERTY));
- if (deletable) {
- peService.deletePictogramElement(childElement);
- }
+ for (PictogramElement pe : getContainedPictogramElements(element, DELETABLE_PROPERTY)) {
+ peService.deletePictogramElement(pe);
}
}
@@ -793,22 +805,28 @@
public static final int MARKER_WIDTH = 10;
public static final int MARKER_HEIGHT = 10;
- public static final String ACTIVITY_MARKER_CONTAINER = "activity.marker.container";
+ private static final String ACTIVITY_MARKER_CONTAINER = "activity.marker.container";
public static final String ACTIVITY_MARKER_COMPENSATE = "activity.marker.compensate";
- public static final String ACTIVITY_MARKER_LOOP_CHARACTERISTIC = "activity.marker.loop.characteristic";
+ public static final String ACTIVITY_MARKER_LC_STANDARD = "activity.marker.lc.standard";
+ public static final String ACTIVITY_MARKER_LC_MULTI_SEQUENTIAL = "activity.marker.lc.multi.sequential";
+ public static final String ACTIVITY_MARKER_LC_MULTI_PARALLEL = "activity.marker.lc.multi.parallel";
public static final String ACTIVITY_MARKER_AD_HOC = "activity.marker.adhoc";
public static final String ACTIVITY_MARKER_EXPAND = "activity.marker.expand";
+ public static final String ACTIVITY_MARKER_OFFSET = "activity.marker.offset";
public static final String EVENT_MARKER_CONTAINER = "event.marker.container";
- public static Compensation createActivityMarkerCompensate(ContainerShape markerContainer) {
+ private static GraphicsAlgorithmContainer createActivityMarkerCompensate(ContainerShape markerContainer) {
GraphicsAlgorithmContainer algorithmContainer = createActivityMarkerGaContainer(markerContainer,
ACTIVITY_MARKER_COMPENSATE);
- return createCompensation(algorithmContainer, MARKER_WIDTH, MARKER_HEIGHT);
+ Compensation compensation = createCompensation(algorithmContainer, MARKER_WIDTH, MARKER_HEIGHT);
+ compensation.arrow1.setForeground(manageColor(markerContainer, StyleUtil.CLASS_FOREGROUND));
+ compensation.arrow2.setForeground(manageColor(markerContainer, StyleUtil.CLASS_FOREGROUND));
+ return algorithmContainer;
}
- public static Loop createActivityMarkerStandardLoop(ContainerShape markerContainer) {
+ private static GraphicsAlgorithmContainer createActivityMarkerStandardLoop(ContainerShape markerContainer) {
GraphicsAlgorithmContainer algorithmContainer = createActivityMarkerGaContainer(markerContainer,
- ACTIVITY_MARKER_LOOP_CHARACTERISTIC);
+ ACTIVITY_MARKER_LC_STANDARD);
int[] xy = { 8, 10, 10, 5, 5, 0, 0, 5, 3, 10 };
int[] bend = { 0, 0, 3, 4, 4, 4, 4, 3, 3, 0 };
@@ -817,38 +835,48 @@
Loop loop = new Loop();
loop.circle = circle;
loop.arrow = gaService.createPolyline(algorithmContainer, new int[] { 5, 5, 5, 10, 0, 10 });
- return loop;
+ loop.circle.setForeground(manageColor(markerContainer, StyleUtil.CLASS_FOREGROUND));
+ loop.arrow.setForeground(manageColor(markerContainer, StyleUtil.CLASS_FOREGROUND));
+ return algorithmContainer;
}
- public static MultiInstance createActivityMarkerMultiParallel(ContainerShape markerContainer) {
+ private static GraphicsAlgorithmContainer createActivityMarkerMultiParallel(ContainerShape markerContainer) {
GraphicsAlgorithmContainer algorithmContainer = createActivityMarkerGaContainer(markerContainer,
- ACTIVITY_MARKER_LOOP_CHARACTERISTIC);
+ ACTIVITY_MARKER_LC_MULTI_PARALLEL);
MultiInstance multiInstance = new MultiInstance();
multiInstance.line1 = gaService.createPolyline(algorithmContainer, new int[] { 2, 0, 2, MARKER_HEIGHT });
multiInstance.line2 = gaService.createPolyline(algorithmContainer, new int[] { 5, 0, 5, MARKER_HEIGHT });
multiInstance.line3 = gaService.createPolyline(algorithmContainer, new int[] { 8, 0, 8, MARKER_HEIGHT });
- return multiInstance;
+ multiInstance.line1.setForeground(manageColor(markerContainer, StyleUtil.CLASS_FOREGROUND));
+ multiInstance.line2.setForeground(manageColor(markerContainer, StyleUtil.CLASS_FOREGROUND));
+ multiInstance.line3.setForeground(manageColor(markerContainer, StyleUtil.CLASS_FOREGROUND));
+ return algorithmContainer;
}
- public static MultiInstance createActivityMarkerMultiSequential(ContainerShape markerContainer) {
+ private static GraphicsAlgorithmContainer createActivityMarkerMultiSequential(ContainerShape markerContainer) {
GraphicsAlgorithmContainer algorithmContainer = createActivityMarkerGaContainer(markerContainer,
- ACTIVITY_MARKER_LOOP_CHARACTERISTIC);
+ ACTIVITY_MARKER_LC_MULTI_SEQUENTIAL);
MultiInstance multiInstance = new MultiInstance();
multiInstance.line1 = gaService.createPolyline(algorithmContainer, new int[] { 0, 2, MARKER_WIDTH, 2 });
multiInstance.line2 = gaService.createPolyline(algorithmContainer, new int[] { 0, 5, MARKER_WIDTH, 5 });
multiInstance.line3 = gaService.createPolyline(algorithmContainer, new int[] { 0, 8, MARKER_WIDTH, 8 });
- return multiInstance;
+ multiInstance.line1.setForeground(manageColor(markerContainer, StyleUtil.CLASS_FOREGROUND));
+ multiInstance.line2.setForeground(manageColor(markerContainer, StyleUtil.CLASS_FOREGROUND));
+ multiInstance.line3.setForeground(manageColor(markerContainer, StyleUtil.CLASS_FOREGROUND));
+ return algorithmContainer;
}
- public static Polyline createActivityMarkerAdHoc(ContainerShape markerContainer) {
+ private static GraphicsAlgorithmContainer createActivityMarkerAdHoc(ContainerShape markerContainer) {
GraphicsAlgorithmContainer algorithmContainer = createActivityMarkerGaContainer(markerContainer,
ACTIVITY_MARKER_AD_HOC);
int[] xy = { 0, 8, 3, 2, 7, 8, 10, 2 };
int[] bend = { 0, 3, 3, 3, 3, 3, 3, 0 };
- return gaService.createPolyline(algorithmContainer, xy, bend);
+ Polyline tilde = gaService.createPolyline(algorithmContainer, xy, bend);
+ tilde.setForeground(manageColor(markerContainer, StyleUtil.CLASS_FOREGROUND));
+ return algorithmContainer;
}
- public static Expand createActivityMarkerExpand(ContainerShape markerContainer) {
+ private static GraphicsAlgorithmContainer createActivityMarkerExpand(ContainerShape markerContainer) {
GraphicsAlgorithmContainer algorithmContainer = createActivityMarkerGaContainer(markerContainer,
ACTIVITY_MARKER_EXPAND);
@@ -860,35 +888,118 @@
expand.rect = rect;
expand.horizontal = gaService.createPolyline(algorithmContainer, new int[] { 0, 5, 10, 5 });
expand.vertical = gaService.createPolyline(algorithmContainer, new int[] { 5, 0, 5, 10 });
- return expand;
+ expand.rect.setForeground(manageColor(markerContainer, StyleUtil.CLASS_FOREGROUND));
+ expand.horizontal.setForeground(manageColor(markerContainer, StyleUtil.CLASS_FOREGROUND));
+ expand.vertical.setForeground(manageColor(markerContainer, StyleUtil.CLASS_FOREGROUND));
+ return algorithmContainer;
}
- public static void clearActivityMarker(ContainerShape markerContainer, String property) {
+
+ public static ContainerShape getActivityMarkerContainer(ContainerShape container) {
+ String property = peService.getPropertyValue(container, ACTIVITY_MARKER_CONTAINER);
+ if (property != null && new Boolean(property)) {
+ return container;
+ }
+ return (ContainerShape) getContainedShape(container, ACTIVITY_MARKER_CONTAINER);
+ }
- int totalWidth = 0;
- int parentW = ((ContainerShape) markerContainer.eContainer()).getGraphicsAlgorithm().getWidth();
- int lastX = -1;
+ private static ContainerShape createActivityMarkerContainer(ContainerShape container) {
+
+ ContainerShape markerContainer = getActivityMarkerContainer(container);
+ if (markerContainer==null) {
+ // need to create a marker container first
+ markerContainer = peService.createContainerShape(container, false);
+ Rectangle markerInvisibleRect = gaService.createInvisibleRectangle(markerContainer);
+ GraphicsAlgorithm ga = container.getGraphicsAlgorithm();
+ int x = ga.getWidth() / 2;
+ int y = ga.getHeight() - 10;
+ int w = 50;
+ int h = 10;
+ gaService.setLocationAndSize(markerInvisibleRect, x, y, w, h);
+ peService.setPropertyValue(markerContainer, GraphicsUtil.ACTIVITY_MARKER_CONTAINER, Boolean.toString(true));
- Iterator<Shape> iterator = peService.getAllContainedShapes(markerContainer).iterator();
- while (iterator.hasNext()) {
- Shape shape = iterator.next();
- String value = peService.getPropertyValue(shape, property);
- GraphicsAlgorithm ga = shape.getGraphicsAlgorithm();
- if (value != null && new Boolean(value)) {
- lastX = ga.getX();
- peService.deletePictogramElement(shape);
- } else {
- totalWidth += ga.getWidth();
- if (lastX != -1) {
- gaService.setLocation(ga, lastX, ga.getY(), true);
- lastX = ga.getX() + ga.getWidth();
- }
+ createActivityMarkerCompensate(markerContainer);
+ createActivityMarkerStandardLoop(markerContainer);
+ createActivityMarkerMultiParallel(markerContainer);
+ createActivityMarkerMultiSequential(markerContainer);
+ createActivityMarkerAdHoc(markerContainer);
+ createActivityMarkerExpand(markerContainer);
+
+ // make them all invisible
+ Iterator<Shape> iterator = peService.getAllContainedShapes(markerContainer).iterator();
+ while (iterator.hasNext()) {
+ Shape shape = iterator.next();
+ shape.setVisible(false);
}
}
+ return markerContainer;
+ }
- totalWidth = totalWidth == 0 ? 10 : totalWidth;
- GraphicsAlgorithm ga = markerContainer.getGraphicsAlgorithm();
- gaService.setLocationAndSize(ga, (parentW / 2) - (totalWidth / 2), ga.getY(), totalWidth, MARKER_HEIGHT);
+ public static void setActivityMarkerOffest(ContainerShape container, int offset) {
+ peService.setPropertyValue(container, GraphicsUtil.ACTIVITY_MARKER_OFFSET, Integer.toString(offset));
+ }
+
+ public static int getActivityMarkerOffest(ContainerShape container) {
+ int offset = 0;
+ String s = peService.getPropertyValue(container, GraphicsUtil.ACTIVITY_MARKER_OFFSET);
+ if (s!=null) {
+ try {
+ offset = Integer.parseInt(s);
+ }
+ catch (Exception e) {
+ }
+ }
+ return offset;
+ }
+
+ public static void layoutActivityMarkerContainer(ContainerShape container) {
+
+ ContainerShape markerContainer = getActivityMarkerContainer(container);
+ if (markerContainer!=null) {
+ int lastX = 0;
+ Iterator<Shape> iterator = peService.getAllContainedShapes(markerContainer).iterator();
+ while (iterator.hasNext()) {
+ Shape marker = iterator.next();
+ if (marker.isVisible()) {
+ GraphicsAlgorithm ga = marker.getGraphicsAlgorithm();
+ gaService.setLocation(ga, lastX, 0);
+ lastX += ga.getWidth() + 3;
+ }
+ }
+
+ GraphicsAlgorithm parentGa = container.getGraphicsAlgorithm();
+ GraphicsAlgorithm ga = markerContainer.getGraphicsAlgorithm();
+ int newWidth = parentGa.getWidth();
+ int newHeight = parentGa.getHeight();
+ int x = (newWidth / 2) - (lastX / 2);
+ int y = newHeight - 13 - getActivityMarkerOffest(container);
+ gaService.setLocation(ga, x, y);
+ }
+ }
+
+ public static void showActivityMarker(ContainerShape container, String property) {
+
+ ContainerShape markerContainer = getActivityMarkerContainer(container);
+ if (markerContainer==null) {
+ markerContainer = createActivityMarkerContainer(container);
+ }
+ GraphicsUtil.getContainedShape(markerContainer, property).setVisible(true);
+ layoutActivityMarkerContainer(container);
+ }
+
+ public static void hideActivityMarker(ContainerShape container, String property) {
+
+ ContainerShape markerContainer = getActivityMarkerContainer(container);
+ if (markerContainer==null) {
+ markerContainer = createActivityMarkerContainer(container);
+ }
+ GraphicsUtil.getContainedShape(markerContainer, property).setVisible(false);
+ layoutActivityMarkerContainer(container);
+ }
+
+ private static Color manageColor(PictogramElement pe, IColorConstant colorConstant) {
+ Diagram diagram = Graphiti.getPeService().getDiagramForPictogramElement(pe);
+ return Graphiti.getGaService().manageColor(diagram, colorConstant);
}
private static GraphicsAlgorithmContainer createActivityMarkerGaContainer(ContainerShape markerContainer,
@@ -904,9 +1015,11 @@
Iterator<Shape> iterator = peService.getAllContainedShapes(markerContainer).iterator();
while (iterator.hasNext()) {
Shape containedShape = (Shape) iterator.next();
- GraphicsAlgorithm containedGa = containedShape.getGraphicsAlgorithm();
- totalWidth += containedGa.getWidth();
- lastX = containedGa.getX() + containedGa.getWidth();
+ if (containedShape.isVisible()) {
+ GraphicsAlgorithm containedGa = containedShape.getGraphicsAlgorithm();
+ totalWidth += containedGa.getWidth();
+ lastX = containedGa.getX() + containedGa.getWidth();
+ }
}
gaService.setLocationAndSize(ga, (parentW / 2) - (totalWidth / 2), parentH-MARKER_WIDTH, totalWidth, MARKER_HEIGHT);
@@ -1056,17 +1169,4 @@
}
return true;
}
-
- public static Shape getShapeForProperty(ContainerShape container, String propertyKey) {
- IPeService peService = Graphiti.getPeService();
- Iterator<Shape> iterator = peService.getAllContainedShapes(container).iterator();
- while (iterator.hasNext()) {
- Shape shape = iterator.next();
- String property = peService.getPropertyValue(shape, propertyKey);
- if (property != null && new Boolean(property)) {
- return shape;
- }
- }
- return null;
- }
}
\ No newline at end of file
diff --git a/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/activity/subprocess/AdHocSubProcessFeatureContainer.java b/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/activity/subprocess/AdHocSubProcessFeatureContainer.java
index 7dd32c3..18a7605 100644
--- a/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/activity/subprocess/AdHocSubProcessFeatureContainer.java
+++ b/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/activity/subprocess/AdHocSubProcessFeatureContainer.java
@@ -53,16 +53,7 @@
@Override
protected void hook(AdHocSubProcess activity, ContainerShape container, IAddContext context, int width, int height) {
super.hook(activity, container, context, width, height);
- IPeService peService = Graphiti.getPeService();
- Iterator<Shape> iterator = peService.getAllContainedShapes(container).iterator();
- while (iterator.hasNext()) {
- Shape shape = iterator.next();
- String property = peService.getPropertyValue(shape, GraphicsUtil.ACTIVITY_MARKER_CONTAINER);
- if (property != null && new Boolean(property)) {
- Polyline tilde = GraphicsUtil.createActivityMarkerAdHoc((ContainerShape) shape);
- tilde.setForeground(manageColor(StyleUtil.CLASS_FOREGROUND));
- }
- }
+ GraphicsUtil.showActivityMarker(container, GraphicsUtil.ACTIVITY_MARKER_AD_HOC);
}
};
}
diff --git a/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/activity/subprocess/AddExpandableActivityFeature.java b/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/activity/subprocess/AddExpandableActivityFeature.java
index eb1304d..dde3483 100644
--- a/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/activity/subprocess/AddExpandableActivityFeature.java
+++ b/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/activity/subprocess/AddExpandableActivityFeature.java
@@ -24,7 +24,6 @@
import org.eclipse.bpmn2.modeler.core.features.activity.AbstractAddActivityFeature;
import org.eclipse.bpmn2.modeler.core.preferences.Bpmn2Preferences;
import org.eclipse.bpmn2.modeler.core.utils.GraphicsUtil;
-import org.eclipse.bpmn2.modeler.core.utils.GraphicsUtil.Expand;
import org.eclipse.bpmn2.modeler.core.utils.StyleUtil;
import org.eclipse.graphiti.features.IFeatureProvider;
import org.eclipse.graphiti.features.context.IAddContext;
@@ -76,14 +75,11 @@
// text.setFont(gaService.manageFont(getDiagram(), GaServiceImpl.DEFAULT_FONT, 8, false, true));
link(textShape, activity);
- ContainerShape markerContainer = (ContainerShape) GraphicsUtil.getShape(container,
- GraphicsUtil.ACTIVITY_MARKER_CONTAINER);
-
if (!isExpanded){
- Expand expand = GraphicsUtil.createActivityMarkerExpand(markerContainer);
- expand.rect.setForeground(manageColor(StyleUtil.CLASS_FOREGROUND));
- expand.horizontal.setForeground(manageColor(StyleUtil.CLASS_FOREGROUND));
- expand.vertical.setForeground(manageColor(StyleUtil.CLASS_FOREGROUND));
+ GraphicsUtil.showActivityMarker(container, GraphicsUtil.ACTIVITY_MARKER_EXPAND);
+ }
+ else {
+ GraphicsUtil.hideActivityMarker(container, GraphicsUtil.ACTIVITY_MARKER_EXPAND);
}
}
diff --git a/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/activity/subprocess/CallActivityFeatureContainer.java b/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/activity/subprocess/CallActivityFeatureContainer.java
index d8ee2c4..285e51d 100644
--- a/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/activity/subprocess/CallActivityFeatureContainer.java
+++ b/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/activity/subprocess/CallActivityFeatureContainer.java
@@ -198,19 +198,17 @@
CallActivity callActivity = BusinessObjectUtil.getFirstElementOfType(context.getPictogramElement(),
CallActivity.class);
- ContainerShape markerContainer = (ContainerShape) GraphicsUtil.getShapeForProperty(container,
- GraphicsUtil.ACTIVITY_MARKER_CONTAINER);
- Shape globalTaskShape = GraphicsUtil.getShapeForProperty(container, GLOBAL_TASK_SHAPE_PROPERTY);
+ Shape globalTaskShape = GraphicsUtil.getContainedShape(container, GLOBAL_TASK_SHAPE_PROPERTY);
if (callActivity.getCalledElementRef() == null) {
- GraphicsUtil.clearActivityMarker(markerContainer, GraphicsUtil.ACTIVITY_MARKER_EXPAND);
+ GraphicsUtil.hideActivityMarker(container, GraphicsUtil.ACTIVITY_MARKER_EXPAND);
if (globalTaskShape != null) {
peService.deletePictogramElement(globalTaskShape);
}
}
else if (callActivity.getCalledElementRef() instanceof GlobalTask) {
- GraphicsUtil.clearActivityMarker(markerContainer, GraphicsUtil.ACTIVITY_MARKER_EXPAND);
+ GraphicsUtil.hideActivityMarker(container, GraphicsUtil.ACTIVITY_MARKER_EXPAND);
GlobalTask t = (GlobalTask) callActivity.getCalledElementRef();
if (globalTaskShape == null) {
globalTaskShape = peService.createShape(container, false);
@@ -227,10 +225,7 @@
if (globalTaskShape != null) {
peService.deletePictogramElement(globalTaskShape);
}
- Expand expand = GraphicsUtil.createActivityMarkerExpand(markerContainer);
- expand.rect.setForeground(manageColor(StyleUtil.CLASS_FOREGROUND));
- expand.horizontal.setForeground(manageColor(StyleUtil.CLASS_FOREGROUND));
- expand.vertical.setForeground(manageColor(StyleUtil.CLASS_FOREGROUND));
+ GraphicsUtil.showActivityMarker(container, GraphicsUtil.ACTIVITY_MARKER_EXPAND);
}
peService.setPropertyValue(container, CALL_ACTIVITY_REF_PROPERTY,
diff --git a/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/activity/subprocess/LayoutExpandableActivityFeature.java b/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/activity/subprocess/LayoutExpandableActivityFeature.java
index 45688a0..e41a8a1 100644
--- a/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/activity/subprocess/LayoutExpandableActivityFeature.java
+++ b/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/activity/subprocess/LayoutExpandableActivityFeature.java
@@ -13,19 +13,24 @@
package org.eclipse.bpmn2.modeler.ui.features.activity.subprocess;
import org.eclipse.bpmn2.SubProcess;
+import org.eclipse.bpmn2.Task;
import org.eclipse.bpmn2.di.BPMNShape;
import org.eclipse.bpmn2.modeler.core.ModelHandlerLocator;
import org.eclipse.bpmn2.modeler.core.features.activity.LayoutActivityFeature;
import org.eclipse.bpmn2.modeler.core.utils.BusinessObjectUtil;
import org.eclipse.bpmn2.modeler.core.utils.FeatureSupport;
+import org.eclipse.bpmn2.modeler.core.utils.GraphicsUtil;
import org.eclipse.graphiti.features.IFeatureProvider;
import org.eclipse.graphiti.features.IResizeShapeFeature;
import org.eclipse.graphiti.features.context.ILayoutContext;
import org.eclipse.graphiti.features.context.impl.ResizeShapeContext;
import org.eclipse.graphiti.mm.algorithms.GraphicsAlgorithm;
+import org.eclipse.graphiti.mm.algorithms.MultiText;
+import org.eclipse.graphiti.mm.algorithms.Text;
import org.eclipse.graphiti.mm.pictograms.ContainerShape;
import org.eclipse.graphiti.mm.pictograms.PictogramElement;
import org.eclipse.graphiti.mm.pictograms.Shape;
+import org.eclipse.graphiti.services.Graphiti;
public class LayoutExpandableActivityFeature extends LayoutActivityFeature {
@@ -35,12 +40,13 @@
@Override
protected boolean layoutHook(Shape shape, GraphicsAlgorithm ga, Object bo, int newWidth, int newHeight) {
-// FIXME whats that supposed to do? it will move label of children to positions where they are not visible
-// if (bo != null && bo instanceof Activity && ga instanceof Text) {
-// Graphiti.getGaService().setLocationAndSize(ga, 5, 5, newWidth - 10, 15);
-// return true;
-// }
- return true;
+ if (bo != null && ga instanceof Text) {
+ int padding = GraphicsUtil.TASK_IMAGE_SIZE;
+ int size = ((Text)ga).getFont().getSize();
+ Graphiti.getGaService().setLocationAndSize(ga, 5, 10, newWidth - 10, size);
+ return true;
+ }
+ return false;
}
@Override
diff --git a/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/activity/subprocess/UpdateExpandableActivityFeature.java b/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/activity/subprocess/UpdateExpandableActivityFeature.java
index 7837a54..bdb3562 100644
--- a/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/activity/subprocess/UpdateExpandableActivityFeature.java
+++ b/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/activity/subprocess/UpdateExpandableActivityFeature.java
@@ -77,8 +77,6 @@
PictogramElement pe = context.getPictogramElement();
SubProcess process = (SubProcess) getBusinessObjectForPictogramElement(pe);
ContainerShape container = (ContainerShape) pe;
- ContainerShape markerContainer = (ContainerShape) GraphicsUtil.getShape(container,
- GraphicsUtil.ACTIVITY_MARKER_CONTAINER);
boolean isExpanded = false;
try {
@@ -98,14 +96,10 @@
if(!isExpanded){
FeatureSupport.setContainerChildrenVisible(container, false);
-
- Expand expand = GraphicsUtil.createActivityMarkerExpand(markerContainer);
- expand.rect.setForeground(manageColor(StyleUtil.CLASS_FOREGROUND));
- expand.horizontal.setForeground(manageColor(StyleUtil.CLASS_FOREGROUND));
- expand.vertical.setForeground(manageColor(StyleUtil.CLASS_FOREGROUND));
+ GraphicsUtil.showActivityMarker(container, GraphicsUtil.ACTIVITY_MARKER_EXPAND);
}else{
- GraphicsUtil.clearActivityMarker(markerContainer, GraphicsUtil.ACTIVITY_MARKER_EXPAND);
FeatureSupport.setContainerChildrenVisible(container, true);
+ GraphicsUtil.hideActivityMarker(container, GraphicsUtil.ACTIVITY_MARKER_EXPAND);
}
return true;