From a652d7c20954ca82a096f9508cfb22346689e3b7 Mon Sep 17 00:00:00 2001
From: Phillipus
Date: Thu, 21 Nov 2024 08:53:05 +0000
Subject: [PATCH] Support Line Style on diagram objects
---
.../factory/CanvasStickyUIProvider.java | 1 +
.../canvas/figures/CanvasBlockFigure.java | 2 +
com.archimatetool.editor/plugin.xml | 12 +-
.../DiagramModelObjectLineStyleCommand.java | 40 +++++
.../editor/diagram/commands/Messages.java | 2 +
.../diagram/commands/messages.properties | 1 +
.../AbstractDiagramModelObjectFigure.java | 27 +++
.../figures/AbstractFigureDelegate.java | 8 +
.../figures/EllipseFigureDelegate.java | 2 +
.../figures/RectangleFigureDelegate.java | 2 +
.../RoundedRectangleFigureDelegate.java | 2 +
.../figures/diagram/DiagramImageFigure.java | 2 +
.../diagram/figures/diagram/GroupFigure.java | 2 +
.../diagram/figures/diagram/NoteFigure.java | 1 +
.../elements/AbstractMotivationFigure.java | 2 +
.../figures/elements/GroupingFigure.java | 5 +-
.../diagram/sketch/figures/StickyFigure.java | 2 +
.../diagram/tools/FormatPainterTool.java | 11 ++
.../propertysections/LineOpacitySection.java | 103 ------------
.../editor/propertysections/LineSection2.java | 155 ++++++++++++++++++
.../propertysections/LineStyleComposite.java | 147 +++++++++++++++++
.../editor/propertysections/Messages.java | 8 +
.../propertysections/messages.properties | 4 +
.../AbstractGraphicalObjectUIProvider.java | 20 +++
.../diagram/DiagramImageUIProvider.java | 3 +-
.../factory/elements/GroupingUIProvider.java | 10 ++
.../factory/sketch/SketchActorUIProvider.java | 3 +-
.../help/Images/properties_canvas_block3.png | Bin 34408 -> 38782 bytes
.../help/Images/properties_canvas_image2.png | Bin 22618 -> 24660 bytes
.../help/Images/properties_element3.png | Bin 42439 -> 43426 bytes
.../help/Images/properties_group2.png | Bin 41592 -> 38662 bytes
.../help/Images/properties_note2.png | Bin 36750 -> 42677 bytes
.../help/Images/properties_viewref2.png | Bin 43582 -> 45409 bytes
.../help/Text/properties_canvas_block.html | 4 +
.../help/Text/properties_canvas_image.html | 4 +
.../Text/properties_element_appearance.html | 4 +
.../help/Text/properties_group.html | 4 +
.../help/Text/properties_note.html | 4 +
.../help/Text/properties_viewref.html | 4 +
.../model/IDiagramModelObject.java | 18 ++
.../model/impl/DiagramModelObject.java | 10 ++
...bstractGraphicalObjectUIProviderTests.java | 8 +
.../AllArchiMateElementUIProviderTests.java | 32 ++++
.../DiagramModelImageUIProviderTests.java | 14 ++
.../DiagramModelReferenceUIProviderTests.java | 10 ++
.../ui/factory/GroupUIProviderTests.java | 13 ++
.../ui/factory/NoteUIProviderTests.java | 13 ++
.../factory/SketchStickyUIProviderTests.java | 13 ++
.../model/impl/DiagramModelObjectTests.java | 7 +
49 files changed, 624 insertions(+), 115 deletions(-)
create mode 100644 com.archimatetool.editor/src/com/archimatetool/editor/diagram/commands/DiagramModelObjectLineStyleCommand.java
delete mode 100644 com.archimatetool.editor/src/com/archimatetool/editor/propertysections/LineOpacitySection.java
create mode 100644 com.archimatetool.editor/src/com/archimatetool/editor/propertysections/LineSection2.java
create mode 100644 com.archimatetool.editor/src/com/archimatetool/editor/propertysections/LineStyleComposite.java
diff --git a/com.archimatetool.canvas/src/com/archimatetool/canvas/factory/CanvasStickyUIProvider.java b/com.archimatetool.canvas/src/com/archimatetool/canvas/factory/CanvasStickyUIProvider.java
index 576c56627..449117a3b 100644
--- a/com.archimatetool.canvas/src/com/archimatetool/canvas/factory/CanvasStickyUIProvider.java
+++ b/com.archimatetool.canvas/src/com/archimatetool/canvas/factory/CanvasStickyUIProvider.java
@@ -62,6 +62,7 @@ public ImageDescriptor getImageDescriptor() {
public boolean shouldExposeFeature(String featureName) {
if(featureName == IArchimatePackage.Literals.LINE_OBJECT__LINE_COLOR.getName() ||
featureName == IArchimatePackage.Literals.LINE_OBJECT__LINE_WIDTH.getName() ||
+ featureName == IDiagramModelObject.FEATURE_LINE_STYLE ||
featureName == IDiagramModelObject.FEATURE_DERIVE_ELEMENT_LINE_COLOR ||
featureName == IDiagramModelObject.FEATURE_GRADIENT) {
return false;
diff --git a/com.archimatetool.canvas/src/com/archimatetool/canvas/figures/CanvasBlockFigure.java b/com.archimatetool.canvas/src/com/archimatetool/canvas/figures/CanvasBlockFigure.java
index e2bb77d6e..b1ce6bb87 100644
--- a/com.archimatetool.canvas/src/com/archimatetool/canvas/figures/CanvasBlockFigure.java
+++ b/com.archimatetool.canvas/src/com/archimatetool/canvas/figures/CanvasBlockFigure.java
@@ -162,6 +162,8 @@ private void drawFigure(Graphics graphics, Color background) {
// Set line width here so that the whole figure is constrained, otherwise SVG graphics will have overspill
setLineWidth(graphics, bounds);
+ setLineStyle(graphics);
+
graphics.setBackgroundColor(background);
graphics.fillRectangle(bounds);
diff --git a/com.archimatetool.editor/plugin.xml b/com.archimatetool.editor/plugin.xml
index cbfd28d39..e12938c0c 100644
--- a/com.archimatetool.editor/plugin.xml
+++ b/com.archimatetool.editor/plugin.xml
@@ -431,13 +431,13 @@
= IDiagramModelObject.LINE_STYLE_SOLID && style <= IDiagramModelObject.LINE_STYLE_DOTTED;
+ }
+
+ /**
+ * Get the default line style for the IDiagramModelObject
+ * This can be either IDiagramModelObject.LINE_STYLE_SOLID or IDiagramModelObject.LINE_STYLE_DASHED
+ */
+ private static int getDefaultLineStyle(IDiagramModelObject dmo) {
+ return (int)ObjectUIFactory.INSTANCE.getProvider(dmo).getDefaultFeatureValue(IDiagramModelObject.FEATURE_LINE_STYLE);
+ }
+}
\ No newline at end of file
diff --git a/com.archimatetool.editor/src/com/archimatetool/editor/diagram/commands/Messages.java b/com.archimatetool.editor/src/com/archimatetool/editor/diagram/commands/Messages.java
index f9e4011f3..90aaddd5b 100644
--- a/com.archimatetool.editor/src/com/archimatetool/editor/diagram/commands/Messages.java
+++ b/com.archimatetool.editor/src/com/archimatetool/editor/diagram/commands/Messages.java
@@ -43,6 +43,8 @@ public class Messages extends NLS {
public static String DiagramModelObjectAlphaCommand_0;
+ public static String DiagramModelObjectLineStyleCommand_0;
+
public static String DiagramModelObjectOutlineAlphaCommand_0;
public static String FillColorCommand_0;
diff --git a/com.archimatetool.editor/src/com/archimatetool/editor/diagram/commands/messages.properties b/com.archimatetool.editor/src/com/archimatetool/editor/diagram/commands/messages.properties
index acdfef599..c501673eb 100644
--- a/com.archimatetool.editor/src/com/archimatetool/editor/diagram/commands/messages.properties
+++ b/com.archimatetool.editor/src/com/archimatetool/editor/diagram/commands/messages.properties
@@ -23,6 +23,7 @@ CreateDiagramObjectCommand_0=Create {0}
DeleteBendpointCommand_0=Remove Bendpoint
DiagramModelObjectAlphaCommand_0=Change Opacity
+DiagramModelObjectLineStyleCommand_0=Change Line Style
DiagramModelObjectOutlineAlphaCommand_0=Change Opacity
FillColorCommand_0=Change Fill Colour
diff --git a/com.archimatetool.editor/src/com/archimatetool/editor/diagram/figures/AbstractDiagramModelObjectFigure.java b/com.archimatetool.editor/src/com/archimatetool/editor/diagram/figures/AbstractDiagramModelObjectFigure.java
index bd6db9993..00ba6d5fb 100644
--- a/com.archimatetool.editor/src/com/archimatetool/editor/diagram/figures/AbstractDiagramModelObjectFigure.java
+++ b/com.archimatetool.editor/src/com/archimatetool/editor/diagram/figures/AbstractDiagramModelObjectFigure.java
@@ -25,6 +25,7 @@
import com.archimatetool.editor.ui.FontFactory;
import com.archimatetool.editor.ui.ImageFactory;
import com.archimatetool.editor.ui.factory.IGraphicalObjectUIProvider;
+import com.archimatetool.editor.ui.factory.IObjectUIProvider;
import com.archimatetool.editor.ui.factory.ObjectUIFactory;
import com.archimatetool.editor.utils.StringUtils;
import com.archimatetool.model.IArchimateElement;
@@ -142,6 +143,27 @@ protected void setDisabledState(Graphics graphics) {
//graphics.setLineStyle(SWT.LINE_DASH);
//graphics.setLineDash(new int[] { 4, 3 });
}
+
+ /**
+ * Set the line style
+ * @param graphics
+ */
+ protected void setLineStyle(Graphics graphics) {
+ double scale = Math.min(FigureUtils.getFigureScale(this), 1.0); // only scale below 1.0
+
+ switch(getLineStyle()) {
+ case IDiagramModelObject.LINE_STYLE_SOLID:
+ default:
+ graphics.setLineStyle(Graphics.LINE_SOLID);
+ break;
+ case IDiagramModelObject.LINE_STYLE_DASHED:
+ graphics.setLineDash(new float[] { (float)(8 * scale), (float)(4 * scale) });
+ break;
+ case IDiagramModelObject.LINE_STYLE_DOTTED:
+ graphics.setLineDash(new float[] { (float)(2 * scale), (float)(4 * scale) });
+ break;
+ }
+ }
/**
* Set the UI
@@ -247,6 +269,11 @@ protected int getLineWidth() {
return fDiagramModelObject.getLineWidth();
}
+ protected int getLineStyle() {
+ IObjectUIProvider provider = ObjectUIFactory.INSTANCE.getProvider(getDiagramModelObject());
+ return provider != null && provider.getFeatureValue(IDiagramModelObject.FEATURE_LINE_STYLE) instanceof Integer val ? val : IDiagramModelObject.LINE_STYLE_SOLID;
+ }
+
@Override
public void updateIconImage() {
if(getIconicDelegate() != null) {
diff --git a/com.archimatetool.editor/src/com/archimatetool/editor/diagram/figures/AbstractFigureDelegate.java b/com.archimatetool.editor/src/com/archimatetool/editor/diagram/figures/AbstractFigureDelegate.java
index 90b315c84..96dc34cf4 100644
--- a/com.archimatetool.editor/src/com/archimatetool/editor/diagram/figures/AbstractFigureDelegate.java
+++ b/com.archimatetool.editor/src/com/archimatetool/editor/diagram/figures/AbstractFigureDelegate.java
@@ -129,6 +129,14 @@ protected void setLineWidth(Graphics graphics, int lineWidth, Rectangle bounds)
getOwner().setLineWidth(graphics, lineWidth, bounds);
}
+ /**
+ * Set line style
+ * @param graphics
+ */
+ protected void setLineStyle(Graphics graphics) {
+ getOwner().setLineStyle(graphics);
+ }
+
/**
* Apply a gradient to the given Graphics instance and bounds using current fill color, alpha and gradient settings
*/
diff --git a/com.archimatetool.editor/src/com/archimatetool/editor/diagram/figures/EllipseFigureDelegate.java b/com.archimatetool.editor/src/com/archimatetool/editor/diagram/figures/EllipseFigureDelegate.java
index 7c7a0c1b3..9c91125ea 100644
--- a/com.archimatetool.editor/src/com/archimatetool/editor/diagram/figures/EllipseFigureDelegate.java
+++ b/com.archimatetool.editor/src/com/archimatetool/editor/diagram/figures/EllipseFigureDelegate.java
@@ -34,6 +34,8 @@ public void drawFigure(Graphics graphics) {
// Line Width
setLineWidth(graphics, bounds);
+ setLineStyle(graphics);
+
graphics.setAlpha(getAlpha());
if(!isEnabled()) {
diff --git a/com.archimatetool.editor/src/com/archimatetool/editor/diagram/figures/RectangleFigureDelegate.java b/com.archimatetool.editor/src/com/archimatetool/editor/diagram/figures/RectangleFigureDelegate.java
index 48e101ae2..8217407cc 100644
--- a/com.archimatetool.editor/src/com/archimatetool/editor/diagram/figures/RectangleFigureDelegate.java
+++ b/com.archimatetool.editor/src/com/archimatetool/editor/diagram/figures/RectangleFigureDelegate.java
@@ -33,6 +33,8 @@ public void drawFigure(Graphics graphics) {
// Set line width here so that the whole figure is constrained, otherwise SVG graphics will have overspill
setLineWidth(graphics, bounds);
+
+ setLineStyle(graphics);
graphics.setAlpha(getAlpha());
diff --git a/com.archimatetool.editor/src/com/archimatetool/editor/diagram/figures/RoundedRectangleFigureDelegate.java b/com.archimatetool.editor/src/com/archimatetool/editor/diagram/figures/RoundedRectangleFigureDelegate.java
index 5bfddb925..368276d99 100644
--- a/com.archimatetool.editor/src/com/archimatetool/editor/diagram/figures/RoundedRectangleFigureDelegate.java
+++ b/com.archimatetool.editor/src/com/archimatetool/editor/diagram/figures/RoundedRectangleFigureDelegate.java
@@ -38,6 +38,8 @@ public void drawFigure(Graphics graphics) {
// Set line width here so that the whole figure is constrained, otherwise SVG graphics will have overspill
setLineWidth(graphics, bounds);
+
+ setLineStyle(graphics);
graphics.setAlpha(getAlpha());
diff --git a/com.archimatetool.editor/src/com/archimatetool/editor/diagram/figures/diagram/DiagramImageFigure.java b/com.archimatetool.editor/src/com/archimatetool/editor/diagram/figures/diagram/DiagramImageFigure.java
index 5e1671867..ea18e069e 100644
--- a/com.archimatetool.editor/src/com/archimatetool/editor/diagram/figures/diagram/DiagramImageFigure.java
+++ b/com.archimatetool.editor/src/com/archimatetool/editor/diagram/figures/diagram/DiagramImageFigure.java
@@ -105,6 +105,8 @@ protected void paintFigure(Graphics graphics) {
// Set line width here so that the whole figure is constrained, otherwise SVG graphics will have overspill
setLineWidth(graphics, bounds);
+ setLineStyle(graphics);
+
if(fImage != null) {
// Faster but no transparency
if(useScaledImage) {
diff --git a/com.archimatetool.editor/src/com/archimatetool/editor/diagram/figures/diagram/GroupFigure.java b/com.archimatetool.editor/src/com/archimatetool/editor/diagram/figures/diagram/GroupFigure.java
index 50cfd174c..88d134fdc 100644
--- a/com.archimatetool.editor/src/com/archimatetool/editor/diagram/figures/diagram/GroupFigure.java
+++ b/com.archimatetool.editor/src/com/archimatetool/editor/diagram/figures/diagram/GroupFigure.java
@@ -57,6 +57,8 @@ protected void drawFigure(Graphics graphics) {
// Set line width here so that the whole figure is constrained, otherwise SVG graphics will have overspill
setLineWidth(graphics, bounds);
+ setLineStyle(graphics);
+
graphics.setAlpha(getAlpha());
if(getDiagramModelObject().getBorderType() == IDiagramModelGroup.BORDER_TABBED) {
diff --git a/com.archimatetool.editor/src/com/archimatetool/editor/diagram/figures/diagram/NoteFigure.java b/com.archimatetool.editor/src/com/archimatetool/editor/diagram/figures/diagram/NoteFigure.java
index 56b54e9c0..72a236816 100644
--- a/com.archimatetool.editor/src/com/archimatetool/editor/diagram/figures/diagram/NoteFigure.java
+++ b/com.archimatetool.editor/src/com/archimatetool/editor/diagram/figures/diagram/NoteFigure.java
@@ -116,6 +116,7 @@ protected void paintFigure(Graphics graphics) {
// Set line width here so that the whole figure is constrained, otherwise SVG graphics will have overspill
if(getDiagramModelObject().getBorderType() != IDiagramModelNote.BORDER_NONE) {
setLineWidth(graphics, bounds);
+ setLineStyle(graphics);
}
// Fill
diff --git a/com.archimatetool.editor/src/com/archimatetool/editor/diagram/figures/elements/AbstractMotivationFigure.java b/com.archimatetool.editor/src/com/archimatetool/editor/diagram/figures/elements/AbstractMotivationFigure.java
index cef3eb625..0d7f4071b 100644
--- a/com.archimatetool.editor/src/com/archimatetool/editor/diagram/figures/elements/AbstractMotivationFigure.java
+++ b/com.archimatetool.editor/src/com/archimatetool/editor/diagram/figures/elements/AbstractMotivationFigure.java
@@ -44,6 +44,8 @@ protected void drawFigure(Graphics graphics) {
// Set line width here so that the whole figure is constrained, otherwise SVG graphics will have overspill
setLineWidth(graphics, bounds);
+
+ setLineStyle(graphics);
PointList points = new PointList();
points.addPoint(bounds.x + FLANGE, bounds.y);
diff --git a/com.archimatetool.editor/src/com/archimatetool/editor/diagram/figures/elements/GroupingFigure.java b/com.archimatetool.editor/src/com/archimatetool/editor/diagram/figures/elements/GroupingFigure.java
index 5e8331980..ebd4c7787 100644
--- a/com.archimatetool.editor/src/com/archimatetool/editor/diagram/figures/elements/GroupingFigure.java
+++ b/com.archimatetool.editor/src/com/archimatetool/editor/diagram/figures/elements/GroupingFigure.java
@@ -61,10 +61,7 @@ protected void drawFigure(Graphics graphics) {
// Set line width here so that the whole figure is constrained, otherwise SVG graphics will have overspill
setLineWidth(graphics, bounds);
- // Scale line dashes below 1.0
- double scale = Math.min(FigureUtils.getGraphicsScale(graphics), 1.0);
-
- graphics.setLineDash(new float[] { (float)(8 * scale), (float)(4 * scale) });
+ setLineStyle(graphics);
graphics.setBackgroundColor(getFillColor());
graphics.setForegroundColor(getLineColor());
diff --git a/com.archimatetool.editor/src/com/archimatetool/editor/diagram/sketch/figures/StickyFigure.java b/com.archimatetool.editor/src/com/archimatetool/editor/diagram/sketch/figures/StickyFigure.java
index 2831535ed..66caf75d9 100644
--- a/com.archimatetool.editor/src/com/archimatetool/editor/diagram/sketch/figures/StickyFigure.java
+++ b/com.archimatetool.editor/src/com/archimatetool/editor/diagram/sketch/figures/StickyFigure.java
@@ -50,6 +50,8 @@ protected void drawFigure(Graphics graphics) {
// Set line width here so that the whole figure is constrained, otherwise SVG graphics will have overspill
setLineWidth(graphics, bounds);
+
+ setLineStyle(graphics);
graphics.setBackgroundColor(getFillColor());
diff --git a/com.archimatetool.editor/src/com/archimatetool/editor/diagram/tools/FormatPainterTool.java b/com.archimatetool.editor/src/com/archimatetool/editor/diagram/tools/FormatPainterTool.java
index 9f768a186..ccc662ed6 100644
--- a/com.archimatetool.editor/src/com/archimatetool/editor/diagram/tools/FormatPainterTool.java
+++ b/com.archimatetool.editor/src/com/archimatetool/editor/diagram/tools/FormatPainterTool.java
@@ -19,6 +19,7 @@
import com.archimatetool.editor.diagram.commands.ConnectionLineTypeCommand;
import com.archimatetool.editor.diagram.commands.ConnectionTextPositionCommand;
import com.archimatetool.editor.diagram.commands.DiagramModelObjectAlphaCommand;
+import com.archimatetool.editor.diagram.commands.DiagramModelObjectLineStyleCommand;
import com.archimatetool.editor.diagram.commands.DiagramModelObjectOutlineAlphaCommand;
import com.archimatetool.editor.diagram.commands.FillColorCommand;
import com.archimatetool.editor.diagram.commands.FontColorCommand;
@@ -112,6 +113,8 @@ CompoundCommand createCommand(IDiagramModelComponent targetComponent) {
CompoundCommand result = new CompoundCommand(Messages.FormatPainterTool_0);
IDiagramModelComponent sourceComponent = FormatPainterInfo.INSTANCE.getSourceComponent();
+
+ IObjectUIProvider sourceUIProvider = ObjectUIFactory.INSTANCE.getProvider(sourceComponent);
IObjectUIProvider targetUIProvider = ObjectUIFactory.INSTANCE.getProvider(targetComponent);
// IFontAttribute
@@ -212,6 +215,14 @@ CompoundCommand createCommand(IDiagramModelComponent targetComponent) {
result.add(cmd);
}
+ // Line Style
+ if(targetUIProvider != null && sourceUIProvider != null && targetUIProvider.shouldExposeFeature(IDiagramModelObject.FEATURE_LINE_STYLE)) {
+ cmd = new DiagramModelObjectLineStyleCommand(target, (int)sourceUIProvider.getFeatureValue(IDiagramModelObject.FEATURE_LINE_STYLE));
+ if(cmd.canExecute()) {
+ result.add(cmd);
+ }
+ }
+
// Gradient
if(targetUIProvider != null && targetUIProvider.shouldExposeFeature(IDiagramModelObject.FEATURE_GRADIENT)) {
cmd = new FeatureCommand("", target, IDiagramModelObject.FEATURE_GRADIENT, source.getGradient(), IDiagramModelObject.FEATURE_GRADIENT_DEFAULT); //$NON-NLS-1$
diff --git a/com.archimatetool.editor/src/com/archimatetool/editor/propertysections/LineOpacitySection.java b/com.archimatetool.editor/src/com/archimatetool/editor/propertysections/LineOpacitySection.java
deleted file mode 100644
index ac8fa424c..000000000
--- a/com.archimatetool.editor/src/com/archimatetool/editor/propertysections/LineOpacitySection.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/**
- * This program and the accompanying materials
- * are made available under the terms of the License
- * which accompanies this distribution in the file LICENSE.txt
- */
-package com.archimatetool.editor.propertysections;
-
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.gef.commands.Command;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.ui.PlatformUI;
-
-import com.archimatetool.editor.diagram.commands.DiagramModelObjectOutlineAlphaCommand;
-import com.archimatetool.model.IArchimatePackage;
-import com.archimatetool.model.IDiagramModelObject;
-
-
-
-/**
- * Property Section for Line Opacity
- *
- * @author Phillip Beauvoir
- */
-public class LineOpacitySection extends AbstractECorePropertySection {
-
- private static final String HELP_ID = "com.archimatetool.help.elementPropertySection"; //$NON-NLS-1$
-
- /**
- * Filter to show or reject this section depending on input value
- */
- public static class Filter extends ObjectFilter {
- @Override
- public boolean isRequiredType(Object object) {
- return object instanceof IDiagramModelObject dmo && shouldExposeFeature(dmo, IDiagramModelObject.FEATURE_LINE_ALPHA);
- }
-
- @Override
- public Class> getAdaptableType() {
- return IDiagramModelObject.class;
- }
- }
-
- private OpacityComposite fOpacityComposite;
-
- @Override
- protected void createControls(Composite parent) {
- fOpacityComposite = new OpacityComposite(this, parent, Messages.LineOpacitySection_0) {
- @Override
- Command getCommand(IDiagramModelObject dmo, int newValue) {
- return new DiagramModelObjectOutlineAlphaCommand(dmo, newValue);
- }
-
- @Override
- int getValue() {
- IDiagramModelObject lastSelected = (IDiagramModelObject)getFirstSelectedObject();
- return lastSelected.getLineAlpha();
- }
-
- @Override
- boolean isValidObject(EObject eObject) {
- return getFilter().isRequiredType(eObject);
- }
- };
-
- // Help ID
- PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, HELP_ID);
- }
-
- @Override
- protected void notifyChanged(Notification msg) {
- Object feature = msg.getFeature();
-
- if(isFeatureNotification(msg, IDiagramModelObject.FEATURE_LINE_ALPHA)) {
- if(!fIsExecutingCommand) {
- update();
- }
- }
- else if(feature == IArchimatePackage.Literals.LOCKABLE__LOCKED) {
- update();
- }
- }
-
- @Override
- protected void update() {
- fOpacityComposite.updateControl();
- }
-
- @Override
- protected IObjectFilter getFilter() {
- return new Filter();
- }
-
- @Override
- public void dispose() {
- super.dispose();
-
- if(fOpacityComposite != null) {
- fOpacityComposite.dispose();
- fOpacityComposite = null;
- }
- }
-}
diff --git a/com.archimatetool.editor/src/com/archimatetool/editor/propertysections/LineSection2.java b/com.archimatetool.editor/src/com/archimatetool/editor/propertysections/LineSection2.java
new file mode 100644
index 000000000..72c801bb0
--- /dev/null
+++ b/com.archimatetool.editor/src/com/archimatetool/editor/propertysections/LineSection2.java
@@ -0,0 +1,155 @@
+/**
+ * This program and the accompanying materials
+ * are made available under the terms of the License
+ * which accompanies this distribution in the file LICENSE.txt
+ */
+package com.archimatetool.editor.propertysections;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.gef.commands.Command;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.PlatformUI;
+
+import com.archimatetool.editor.diagram.commands.DiagramModelObjectOutlineAlphaCommand;
+import com.archimatetool.model.IArchimatePackage;
+import com.archimatetool.model.IDiagramModelObject;
+
+
+
+/**
+ * Property Section for Line Opacity and Line Style
+ *
+ * @author Phillip Beauvoir
+ */
+public class LineSection2 extends AbstractMultiControlSection {
+
+ private static final String HELP_ID = "com.archimatetool.help.elementPropertySection"; //$NON-NLS-1$
+
+ /**
+ * Filter to show or reject this section depending on input value
+ */
+ public static class Filter extends ObjectFilter {
+ @Override
+ public boolean isRequiredType(Object object) {
+ return object instanceof IDiagramModelObject dmo &&
+ (shouldExposeFeature(dmo, IDiagramModelObject.FEATURE_LINE_ALPHA) ||
+ shouldExposeFeature(dmo, IDiagramModelObject.FEATURE_LINE_STYLE));
+ }
+
+ @Override
+ public Class> getAdaptableType() {
+ return IDiagramModelObject.class;
+ }
+ }
+
+ private OpacityComposite opacityComposite;
+ private LineStyleComposite linestyleComposite;
+
+ @Override
+ protected void createControls(Composite parent) {
+ init(parent, 2);
+
+ // Help ID
+ PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, HELP_ID);
+ }
+
+ @Override
+ protected void notifyChanged(Notification msg) {
+ Object feature = msg.getFeature();
+
+ if(isFeatureNotification(msg, IDiagramModelObject.FEATURE_LINE_ALPHA)) {
+ if(!fIsExecutingCommand) {
+ updateOpacityControl();
+ }
+ }
+ else if(isFeatureNotification(msg, IDiagramModelObject.FEATURE_LINE_STYLE)) {
+ updateLineStyleControl();
+ }
+ else if(feature == IArchimatePackage.Literals.LOCKABLE__LOCKED) {
+ update();
+ }
+ }
+
+ @Override
+ protected void update() {
+ updateOpacityControl();
+ updateLineStyleControl();
+ }
+
+ private void updateOpacityControl() {
+ boolean show = shouldShowControl(IDiagramModelObject.FEATURE_LINE_ALPHA);
+
+ if(show) {
+ if(opacityComposite == null) {
+ opacityComposite = new OpacityComposite(this, parentComposite, Messages.LineOpacitySection_0) {
+ @Override
+ Command getCommand(IDiagramModelObject dmo, int newValue) {
+ return new DiagramModelObjectOutlineAlphaCommand(dmo, newValue);
+ }
+
+ @Override
+ int getValue() {
+ IDiagramModelObject lastSelected = (IDiagramModelObject)getFirstSelectedObject();
+ return lastSelected.getLineAlpha();
+ }
+
+ @Override
+ boolean isValidObject(EObject eObject) {
+ return getFilter().shouldExposeFeature(eObject, IDiagramModelObject.FEATURE_LINE_ALPHA);
+ }
+ };
+
+ // If we're showing the LineStyleComposite move the OpacityComposite above/before it
+ if(linestyleComposite != null) {
+ opacityComposite.getComposite().moveAbove(linestyleComposite.getComposite());
+ layout();
+ }
+ }
+
+ opacityComposite.updateControl();
+ }
+ else if(opacityComposite != null) {
+ opacityComposite.dispose();
+ opacityComposite = null;
+ layout();
+ }
+ }
+
+ private void updateLineStyleControl() {
+ boolean show = shouldShowControl(IDiagramModelObject.FEATURE_LINE_STYLE);
+
+ if(show) {
+ if(linestyleComposite == null) {
+ linestyleComposite = new LineStyleComposite(this, parentComposite);
+ layout();
+ }
+ linestyleComposite.updateControl();
+ }
+ else if(linestyleComposite != null) {
+ linestyleComposite.dispose();
+ linestyleComposite = null;
+ layout();
+ }
+ }
+
+ @Override
+ protected IObjectFilter getFilter() {
+ return new Filter();
+ }
+
+ @Override
+ public void dispose() {
+ super.dispose();
+
+ if(opacityComposite != null) {
+ opacityComposite.dispose();
+ opacityComposite = null;
+ }
+
+ if(linestyleComposite != null) {
+ linestyleComposite.dispose();
+ linestyleComposite = null;
+ }
+ }
+}
diff --git a/com.archimatetool.editor/src/com/archimatetool/editor/propertysections/LineStyleComposite.java b/com.archimatetool.editor/src/com/archimatetool/editor/propertysections/LineStyleComposite.java
new file mode 100644
index 000000000..d667883b9
--- /dev/null
+++ b/com.archimatetool.editor/src/com/archimatetool/editor/propertysections/LineStyleComposite.java
@@ -0,0 +1,147 @@
+/**
+ * This program and the accompanying materials
+ * are made available under the terms of the License
+ * which accompanies this distribution in the file LICENSE.txt
+ */
+package com.archimatetool.editor.propertysections;
+
+import static org.eclipse.swt.events.SelectionListener.widgetSelectedAdapter;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.gef.commands.Command;
+import org.eclipse.gef.commands.CompoundCommand;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.layout.GridDataFactory;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Menu;
+
+import com.archimatetool.editor.diagram.commands.DiagramModelObjectLineStyleCommand;
+import com.archimatetool.editor.ui.IArchiImages;
+import com.archimatetool.editor.ui.factory.ObjectUIFactory;
+import com.archimatetool.model.IDiagramModelObject;
+
+
+
+/**
+ * Diagram Object Line Style Composite
+ *
+ * @author Phillip Beauvoir
+ */
+class LineStyleComposite {
+
+ private Button button;
+ private AbstractECorePropertySection section;
+ private Composite composite;
+
+ LineStyleComposite(AbstractECorePropertySection section, Composite parent) {
+ this.section = section;
+ composite = section.createComposite(parent, 2, false);
+ createControls(composite);
+ }
+
+ Composite getComposite() {
+ return composite;
+ }
+
+ private void createControls(Composite parent) {
+ section.createLabel(parent, Messages.LineStyleComposite_0, ITabbedLayoutConstants.STANDARD_LABEL_WIDTH, SWT.CENTER);
+
+ button = section.getWidgetFactory().createButton(parent, null, SWT.PUSH);
+ button.setLayoutData(GridDataFactory.swtDefaults().hint(50, SWT.DEFAULT).create()); // a bit more width
+
+ button.addSelectionListener(widgetSelectedAdapter(event -> {
+ MenuManager menuManager = new MenuManager();
+
+ menuManager.add(createAction(Messages.LineStyleComposite_1, IDiagramModelObject.LINE_STYLE_SOLID, IArchiImages.ImageFactory.getImageDescriptor(IArchiImages.LINE_SOLID)));
+ menuManager.add(createAction(Messages.LineStyleComposite_2, IDiagramModelObject.LINE_STYLE_DASHED, IArchiImages.ImageFactory.getImageDescriptor(IArchiImages.LINE_DASHED)));
+ menuManager.add(createAction(Messages.LineStyleComposite_3, IDiagramModelObject.LINE_STYLE_DOTTED, IArchiImages.ImageFactory.getImageDescriptor(IArchiImages.LINE_DOTTED)));
+
+ Menu menu = menuManager.createContextMenu(button.getShell());
+ Rectangle buttonBounds = button.getBounds();
+ Point p = button.getParent().toDisplay(buttonBounds.x, buttonBounds.y + buttonBounds.height);
+ menu.setLocation(p);
+ menu.setVisible(true);
+ }));
+ }
+
+ private IAction createAction(String text, final int value, final ImageDescriptor imageDesc) {
+ IAction action = new Action(text, IAction.AS_RADIO_BUTTON) {
+ @Override
+ public void run() {
+ CompoundCommand result = new CompoundCommand();
+
+ for(EObject object : section.getEObjects()) {
+ if(isValidObject(object) && object instanceof IDiagramModelObject dmo) {
+ Command cmd = new DiagramModelObjectLineStyleCommand(dmo, value);
+ if(cmd.canExecute()) {
+ result.add(cmd);
+ }
+ }
+ }
+
+ section.executeCommand(result.unwrap());
+ }
+
+ @Override
+ public ImageDescriptor getImageDescriptor() {
+ return imageDesc;
+ }
+ };
+
+ int lineStyle = getLineStyle((IDiagramModelObject)section.getFirstSelectedObject());
+ action.setChecked(lineStyle == value);
+
+ return action;
+ }
+
+ /**
+ * In case of multi-selection we should check this
+ */
+ private boolean isValidObject(EObject eObject) {
+ return section.isAlive(eObject) &&
+ section.getFilter().shouldExposeFeature(eObject, IDiagramModelObject.FEATURE_LINE_STYLE);
+ }
+
+ /**
+ * Get the actual line style for the IDiagramModelObject.
+ * If the value is IDiagramModelObject.LINE_STYLE_DEFAULT then the actual value will be
+ * either IDiagramModelObject.LINE_STYLE_SOLID or IDiagramModelObject.LINE_STYLE_DASHED
+ */
+ private int getLineStyle(IDiagramModelObject dmo) {
+ return (int)ObjectUIFactory.INSTANCE.getProvider(dmo).getFeatureValue(IDiagramModelObject.FEATURE_LINE_STYLE);
+ }
+
+ void updateControl() {
+ IDiagramModelObject dmo = (IDiagramModelObject)section.getFirstSelectedObject();
+ int lineStyle = getLineStyle(dmo);
+
+ switch(lineStyle) {
+ case IDiagramModelObject.LINE_STYLE_SOLID:
+ default:
+ button.setImage(IArchiImages.ImageFactory.getImage(IArchiImages.LINE_SOLID));
+ break;
+ case IDiagramModelObject.LINE_STYLE_DASHED:
+ button.setImage(IArchiImages.ImageFactory.getImage(IArchiImages.LINE_DASHED));
+ break;
+ case IDiagramModelObject.LINE_STYLE_DOTTED:
+ button.setImage(IArchiImages.ImageFactory.getImage(IArchiImages.LINE_DOTTED));
+ break;
+ }
+
+ button.setEnabled(!section.isLocked(dmo));
+ }
+
+ void dispose() {
+ composite.dispose();
+ composite = null;
+ section = null;
+ button = null;
+ }
+}
diff --git a/com.archimatetool.editor/src/com/archimatetool/editor/propertysections/Messages.java b/com.archimatetool.editor/src/com/archimatetool/editor/propertysections/Messages.java
index 95db82883..5bffe4ff3 100644
--- a/com.archimatetool.editor/src/com/archimatetool/editor/propertysections/Messages.java
+++ b/com.archimatetool.editor/src/com/archimatetool/editor/propertysections/Messages.java
@@ -247,6 +247,14 @@ public class Messages extends NLS {
public static String LineOpacitySection_0;
+ public static String LineStyleComposite_0;
+
+ public static String LineStyleComposite_1;
+
+ public static String LineStyleComposite_2;
+
+ public static String LineStyleComposite_3;
+
public static String LineWidthSection_0;
public static String LineWidthSection_1;
diff --git a/com.archimatetool.editor/src/com/archimatetool/editor/propertysections/messages.properties b/com.archimatetool.editor/src/com/archimatetool/editor/propertysections/messages.properties
index be1c21a9d..a57e9620d 100644
--- a/com.archimatetool.editor/src/com/archimatetool/editor/propertysections/messages.properties
+++ b/com.archimatetool.editor/src/com/archimatetool/editor/propertysections/messages.properties
@@ -129,6 +129,10 @@ LineColorSection_2=Enable in Preferences
LineColorSection_3=Derive from fill colour
LineColorSection_4=Derive line colour
LineOpacitySection_0=Line Opacity:
+LineStyleComposite_0=Line Style:
+LineStyleComposite_1=Solid
+LineStyleComposite_2=Dashed
+LineStyleComposite_3=Dotted
LineWidthSection_0=Line Width:
LineWidthSection_1=Normal
LineWidthSection_2=Medium
diff --git a/com.archimatetool.editor/src/com/archimatetool/editor/ui/factory/AbstractGraphicalObjectUIProvider.java b/com.archimatetool.editor/src/com/archimatetool/editor/ui/factory/AbstractGraphicalObjectUIProvider.java
index b7ebe3556..22e47f3ae 100644
--- a/com.archimatetool.editor/src/com/archimatetool/editor/ui/factory/AbstractGraphicalObjectUIProvider.java
+++ b/com.archimatetool.editor/src/com/archimatetool/editor/ui/factory/AbstractGraphicalObjectUIProvider.java
@@ -8,6 +8,7 @@
import org.eclipse.draw2d.geometry.Dimension;
import org.eclipse.swt.graphics.Color;
+import com.archimatetool.model.IDiagramModelObject;
import com.archimatetool.model.ITextAlignment;
import com.archimatetool.model.ITextPosition;
@@ -54,4 +55,23 @@ public int getDefaultTextPosition() {
public boolean hasIcon() {
return false;
}
+
+ @Override
+ public Object getDefaultFeatureValue(String featureName) {
+ if(IDiagramModelObject.FEATURE_LINE_STYLE.equals(featureName)) {
+ return IDiagramModelObject.LINE_STYLE_SOLID;
+ }
+
+ return super.getDefaultFeatureValue(featureName);
+ }
+
+ @Override
+ public Object getFeatureValue(String featureName) {
+ if(IDiagramModelObject.FEATURE_LINE_STYLE.equals(featureName) && instance instanceof IDiagramModelObject dmo) {
+ int value = dmo.getLineStyle();
+ return (value == IDiagramModelObject.LINE_STYLE_DEFAULT) ? getDefaultFeatureValue(featureName) : value;
+ }
+
+ return super.getFeatureValue(featureName);
+ }
}
diff --git a/com.archimatetool.editor/src/com/archimatetool/editor/ui/factory/diagram/DiagramImageUIProvider.java b/com.archimatetool.editor/src/com/archimatetool/editor/ui/factory/diagram/DiagramImageUIProvider.java
index b1823924f..c7ac2cda4 100644
--- a/com.archimatetool.editor/src/com/archimatetool/editor/ui/factory/diagram/DiagramImageUIProvider.java
+++ b/com.archimatetool.editor/src/com/archimatetool/editor/ui/factory/diagram/DiagramImageUIProvider.java
@@ -67,7 +67,8 @@ public boolean shouldExposeFeature(String featureName) {
return featureName == IArchimatePackage.Literals.BORDER_OBJECT__BORDER_COLOR.getName() ||
featureName == IArchimatePackage.Literals.LINE_OBJECT__LINE_WIDTH.getName()
|| featureName == IArchimatePackage.Literals.DIAGRAM_MODEL_OBJECT__ALPHA.getName()
- || featureName == IDiagramModelObject.FEATURE_LINE_ALPHA;
+ || featureName == IDiagramModelObject.FEATURE_LINE_ALPHA
+ || featureName == IDiagramModelObject.FEATURE_LINE_STYLE;
}
}
diff --git a/com.archimatetool.editor/src/com/archimatetool/editor/ui/factory/elements/GroupingUIProvider.java b/com.archimatetool.editor/src/com/archimatetool/editor/ui/factory/elements/GroupingUIProvider.java
index bd9805568..4840779f0 100644
--- a/com.archimatetool.editor/src/com/archimatetool/editor/ui/factory/elements/GroupingUIProvider.java
+++ b/com.archimatetool.editor/src/com/archimatetool/editor/ui/factory/elements/GroupingUIProvider.java
@@ -16,6 +16,7 @@
import com.archimatetool.editor.diagram.figures.elements.GroupingFigure;
import com.archimatetool.editor.ui.IArchiImages;
import com.archimatetool.model.IArchimatePackage;
+import com.archimatetool.model.IDiagramModelObject;
import com.archimatetool.model.ITextAlignment;
import com.archimatetool.model.ITextPosition;
@@ -74,4 +75,13 @@ public int getDefaultTextAlignment() {
public int getDefaultTextPosition() {
return ITextPosition.TEXT_POSITION_TOP;
}
+
+ @Override
+ public Object getDefaultFeatureValue(String featureName) {
+ if(IDiagramModelObject.FEATURE_LINE_STYLE.equals(featureName)) {
+ return IDiagramModelObject.LINE_STYLE_DASHED;
+ }
+
+ return super.getDefaultFeatureValue(featureName);
+ }
}
diff --git a/com.archimatetool.editor/src/com/archimatetool/editor/ui/factory/sketch/SketchActorUIProvider.java b/com.archimatetool.editor/src/com/archimatetool/editor/ui/factory/sketch/SketchActorUIProvider.java
index 0ad30e4d5..b7bbe6cfa 100644
--- a/com.archimatetool.editor/src/com/archimatetool/editor/ui/factory/sketch/SketchActorUIProvider.java
+++ b/com.archimatetool.editor/src/com/archimatetool/editor/ui/factory/sketch/SketchActorUIProvider.java
@@ -70,7 +70,8 @@ public boolean shouldExposeFeature(String featureName) {
featureName == IDiagramModelObject.FEATURE_DERIVE_ELEMENT_LINE_COLOR ||
featureName == IDiagramModelObject.FEATURE_LINE_ALPHA ||
featureName == IArchimatePackage.Literals.DIAGRAM_MODEL_OBJECT__ALPHA.getName() ||
- featureName == IDiagramModelObject.FEATURE_GRADIENT) {
+ featureName == IDiagramModelObject.FEATURE_GRADIENT ||
+ featureName == IDiagramModelObject.FEATURE_LINE_STYLE) {
return false;
}
diff --git a/com.archimatetool.help/help/Images/properties_canvas_block3.png b/com.archimatetool.help/help/Images/properties_canvas_block3.png
index edc222ddf523eb7c705e3512e2d2ee754e0d1853..1353d9167b6d983b2d285ffa86c459ab5bed9084 100755
GIT binary patch
literal 38782
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