https://bugs.eclipse.org/bugs/show_bug.cgi?id=385433 - added ability to override shape sizes with default values
diff --git a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/di/DIImport.java b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/di/DIImport.java
index a28e22f..b548ee0 100644
--- a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/di/DIImport.java
+++ b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/di/DIImport.java
@@ -44,10 +44,13 @@
import org.eclipse.bpmn2.di.BpmnDiFactory;
import org.eclipse.bpmn2.modeler.core.Activator;
import org.eclipse.bpmn2.modeler.core.ModelHandler;
+import org.eclipse.bpmn2.modeler.core.preferences.Bpmn2Preferences;
+import org.eclipse.bpmn2.modeler.core.preferences.ShapeStyle;
import org.eclipse.bpmn2.modeler.core.utils.AnchorUtil;
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.bpmn2.modeler.core.utils.GraphicsUtil.Size;
import org.eclipse.bpmn2.modeler.core.utils.ModelUtil;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
@@ -67,6 +70,7 @@
import org.eclipse.graphiti.features.context.impl.AddContext;
import org.eclipse.graphiti.features.context.impl.AreaContext;
import org.eclipse.graphiti.features.context.impl.LayoutContext;
+import org.eclipse.graphiti.mm.algorithms.GraphicsAlgorithm;
import org.eclipse.graphiti.mm.algorithms.Rectangle;
import org.eclipse.graphiti.mm.pictograms.AnchorContainer;
import org.eclipse.graphiti.mm.pictograms.Connection;
@@ -93,6 +97,7 @@
private ModelHandler modelHandler;
private IFeatureProvider featureProvider;
private HashMap<BaseElement, PictogramElement> elements;
+ private Bpmn2Preferences preferences;
private final IPeService peService = Graphiti.getPeService();
private final IGaService gaService = Graphiti.getGaService();
@@ -137,6 +142,9 @@
// do the import
for (BPMNDiagram d : bpmnDiagrams) {
+ if (preferences==null)
+ preferences = Bpmn2Preferences.getInstance(d);
+
diagram = DIUtils.getOrCreateDiagram(editor,d);
editor.getDiagramTypeProvider().init(diagram, editor);
@@ -160,20 +168,20 @@
}
private void layoutAll() {
-// final List<BPMNDiagram> diagrams = modelHandler.getAll(BPMNDiagram.class);
+ final List<BPMNDiagram> diagrams = modelHandler.getAll(BPMNDiagram.class);
// for (BPMNDiagram d : diagrams) {
// BPMNPlane plane = d.getPlane();
// for (DiagramElement de : plane.getPlaneElement()) {
// if (de instanceof BPMNShape) {
// BaseElement be = ((BPMNShape) de).getBpmnElement();
-// PictogramElement pe = elements.get(businessObject);
+// PictogramElement pe = elements.get(be);
// if (pe instanceof Shape ) {
// Graphiti.getPeService().sendToFront((Shape)pe);
// }
// }
// }
// }
-
+
for (BaseElement be : elements.keySet()) {
if (be instanceof SubProcess) { // we need the layout to hide children if collapsed
PictogramElement pe = elements.get(be);
@@ -185,6 +193,13 @@
if (feature.canLayout(context))
feature.layout(context);
}
+ else if (be instanceof FlowNode) {
+ PictogramElement pe = elements.get(be);
+ LayoutContext context = new LayoutContext(pe);
+ ILayoutFeature feature = featureProvider.getLayoutFeature(context);
+ if (feature!=null && feature.canLayout(context))
+ feature.layout(context);
+ }
}
}
@@ -368,8 +383,22 @@
context.putProperty(IMPORT_PROPERTY, true);
context.setNewObject(bpmnElement);
-
- context.setSize((int) shape.getBounds().getWidth(), (int) shape.getBounds().getHeight());
+ boolean defaultSize = false;
+ ShapeStyle ss = preferences.getShapeStyle(bpmnElement);
+ if (ss!=null)
+ defaultSize = ss.isDefaultSize();
+
+ if (defaultSize) {
+ Size size = GraphicsUtil.getShapeSize(bpmnElement,diagram);
+ if (size!=null)
+ context.setSize(size.getWidth(),size.getHeight());
+ else
+ defaultSize = false;
+ }
+
+ if (!defaultSize) {
+ context.setSize((int) shape.getBounds().getWidth(), (int) shape.getBounds().getHeight());
+ }
if ( (bpmnElement instanceof SubProcess) && !shape.isIsExpanded()) {
context.setSize(GraphicsUtil.getActivitySize(diagram).getWidth(), GraphicsUtil.getActivitySize(diagram).getHeight());
@@ -401,13 +430,14 @@
if (o instanceof Participant)
elements.put((Participant)o, pe);
}
- } else if (bpmnElement instanceof Event) {
- GraphicsUtil.setEventSize(context.getWidth(), context.getHeight(), diagram);
- } else if (bpmnElement instanceof Gateway) {
- GraphicsUtil.setGatewaySize(context.getWidth(), context.getHeight(), diagram);
- } else if (bpmnElement instanceof Activity && !(bpmnElement instanceof SubProcess)) {
- GraphicsUtil.setActivitySize(context.getWidth(), context.getHeight(), diagram);
}
+// else if (bpmnElement instanceof Event) {
+// GraphicsUtil.setEventSize(context.getWidth(), context.getHeight(), diagram);
+// } else if (bpmnElement instanceof Gateway) {
+// GraphicsUtil.setGatewaySize(context.getWidth(), context.getHeight(), diagram);
+// } else if (bpmnElement instanceof Activity && !(bpmnElement instanceof SubProcess)) {
+// GraphicsUtil.setActivitySize(context.getWidth(), context.getHeight(), diagram);
+// }
elements.put(bpmnElement, newContainer);
handleEvents(bpmnElement, newContainer);
diff --git a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/preferences/ShapeStyle.java b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/preferences/ShapeStyle.java
index c01db8d..6a62568 100644
--- a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/preferences/ShapeStyle.java
+++ b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/preferences/ShapeStyle.java
@@ -38,6 +38,7 @@
IColorConstant shapeForeground;
Font textFont;
IColorConstant textColor;
+ boolean defaultSize;
boolean dirty;
public ShapeStyle() {
@@ -62,16 +63,27 @@
if (font==null || font.isEmpty())
font = DEFAULT_FONT_STRING;
textFont = stringToFont(font);
+ defaultSize = true;
}
protected ShapeStyle(String s) {
String[] a = s.trim().split(";");
- shapeBackground = stringToColor(a[0]);
- shapePrimarySelectedColor = stringToColor(a[1]);
- shapeSecondarySelectedColor = stringToColor(a[2]);
- shapeForeground = stringToColor(a[3]);
- textFont = stringToFont(a[4]);
- textColor = stringToColor(a[5]);
+ if (a.length>0)
+ shapeBackground = stringToColor(a[0]);
+ if (a.length>1)
+ shapePrimarySelectedColor = stringToColor(a[1]);
+ if (a.length>2)
+ shapeSecondarySelectedColor = stringToColor(a[2]);
+ if (a.length>3)
+ shapeForeground = stringToColor(a[3]);
+ if (a.length>4)
+ textFont = stringToFont(a[4]);
+ if (a.length>5)
+ textColor = stringToColor(a[5]);
+ if (a.length>6)
+ defaultSize = stringToBoolean(a[6]);
+ else
+ defaultSize = true;
}
public void setDefaultColors(IColorConstant defaultColor) {
@@ -156,6 +168,17 @@
}
}
+ public boolean isDefaultSize() {
+ return defaultSize;
+ }
+
+ public void setDefaultSize(boolean b) {
+ if (defaultSize != b) {
+ defaultSize = b;
+ setDirty(true);
+ }
+ }
+
public static String colorToString(IColorConstant c) {
return new String(
String.format("%02X",c.getRed()) +
@@ -181,6 +204,14 @@
);
}
+ public static String booleanToString(boolean b) {
+ return b ? "1" : "0";
+ }
+
+ public static boolean stringToBoolean(String s) {
+ return "1".equals(s);
+ }
+
public static RGB colorToRGB(IColorConstant c) {
return new RGB(c.getRed(),c.getGreen(),c.getBlue());
}
@@ -235,12 +266,13 @@
colorToString(sp.shapeSecondarySelectedColor) + ";" +
colorToString(sp.shapeForeground) + ";" +
fontToString(sp.textFont) + ";" +
- colorToString(sp.textColor)
+ colorToString(sp.textColor) + ";" +
+ booleanToString(sp.defaultSize)
);
}
public static ShapeStyle decode(String s) {
- if (s==null || s.trim().split(";").length!=6)
+ if (s==null || s.trim().split(";").length<6)
return new ShapeStyle();
return new ShapeStyle(s);
}
@@ -268,6 +300,7 @@
compare(s1.shapeSecondarySelectedColor, s2.shapeSecondarySelectedColor) ||
compare(s1.shapeForeground, s2.shapeForeground) ||
compare(s1.textFont, s2.textFont) ||
- compare(s1.textColor, s2.textColor);
+ compare(s1.textColor, s2.textColor) ||
+ (s1.defaultSize != s2.defaultSize);
}
}
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 70e508f..316d302 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
@@ -19,7 +19,11 @@
import java.util.List;
import java.util.Map;
+import org.eclipse.bpmn2.Activity;
+import org.eclipse.bpmn2.BaseElement;
+import org.eclipse.bpmn2.Event;
import org.eclipse.bpmn2.EventDefinition;
+import org.eclipse.bpmn2.Gateway;
import org.eclipse.bpmn2.modeler.core.features.ContextConstants;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EObject;
@@ -1136,6 +1140,16 @@
return new Size(TASK_DEFAULT_WIDTH, TASK_DEFAULT_HEIGHT);
}
+ public static Size getShapeSize(BaseElement be, Diagram diagram) {
+ if (be instanceof Event)
+ return getEventSize(diagram);
+ if (be instanceof Gateway)
+ return getGatewaySize(diagram);
+ if (be instanceof Activity)
+ return getActivitySize(diagram);
+ return null;
+ }
+
public static boolean intersects(Shape shape1, Shape shape2) {
ILayoutService layoutService = Graphiti.getLayoutService();
ILocation loc2 = layoutService.getLocationRelativeToDiagram(shape2);
diff --git a/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/preferences/Bpmn2EditorPreferencePage.java b/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/preferences/Bpmn2EditorPreferencePage.java
index 04129b7..673d0e6 100644
--- a/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/preferences/Bpmn2EditorPreferencePage.java
+++ b/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/preferences/Bpmn2EditorPreferencePage.java
@@ -71,6 +71,7 @@
ColorControl shapePrimarySelectedColor;
ColorControl shapeSecondarySelectedColor;
ColorControl shapeForeground;
+ Button defaultSize;
FontControl textFont;
ColorControl textColor;
boolean debug;
@@ -131,7 +132,7 @@
styleEditors.setVisible(false);
shapeBackground = new ColorControl("&Fill Color:",styleEditors);
- shapeBackground.addSelectionListener( new SelectionListener() {
+ shapeBackground.addSelectionListener( new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
@@ -146,17 +147,18 @@
textColor.setSelectedColor(ss.getTextColor());
}
}
-
- @Override
- public void widgetDefaultSelected(SelectionEvent e) {
- }
-
});
shapeForeground = new ColorControl("&Foreground Color:",styleEditors);
shapePrimarySelectedColor = new ColorControl("&Selected Color:",styleEditors);
shapeSecondarySelectedColor = new ColorControl("&Multi-Selected Color:",styleEditors);
textColor = new ColorControl("&Label Color:",styleEditors);
textFont = new FontControl("Label &Font:",styleEditors);
+ defaultSize = new Button(styleEditors, SWT.CHECK);
+ defaultSize.setText("Override shape size with default values");
+ GridData gd = new GridData(SWT.LEFT, SWT.CENTER, true, false, 1, 1);
+ gd.horizontalIndent = 5;
+ gd.verticalIndent = 10;
+ defaultSize.setLayoutData(gd);
loadStyleEditors();
@@ -170,6 +172,7 @@
ss.setShapePrimarySelectedColor(shapePrimarySelectedColor.getSelectedColor());
ss.setShapeSecondarySelectedColor(shapeSecondarySelectedColor.getSelectedColor());
ss.setShapeForeground(shapeForeground.getSelectedColor());
+ ss.setDefaultSize(defaultSize.getSelection());
ss.setTextFont(textFont.getSelectedFont());
ss.setTextColor(textColor.getSelectedColor());
}
@@ -208,6 +211,7 @@
shapePrimarySelectedColor.setSelectedColor(ss.getShapePrimarySelectedColor());
shapeSecondarySelectedColor.setSelectedColor(ss.getShapeSecondarySelectedColor());
shapeForeground.setSelectedColor(ss.getShapeForeground());
+ defaultSize.setSelection(ss.isDefaultSize());
textFont.setSelectedFont(ss.getTextFont());
textColor.setSelectedColor(ss.getTextColor());
@@ -221,6 +225,8 @@
((GridData)shapePrimarySelectedColor.getLayoutData()).exclude = !visible;
shapeSecondarySelectedColor.setVisible(visible);
((GridData)shapeSecondarySelectedColor.getLayoutData()).exclude = !visible;
+ defaultSize.setVisible(visible);
+ ((GridData)defaultSize.getLayoutData()).exclude = !visible;
container.layout();
}
}