From ed9a5bb932a1d5c9feac7d67ad11d1ae729e204b Mon Sep 17 00:00:00 2001
From: Phillipus
Date: Sun, 6 Oct 2024 12:09:04 +0100
Subject: [PATCH] Line Style 1
---
.../factory/CanvasStickyUIProvider.java | 1 +
com.archimatetool.editor/plugin.xml | 7 +
.../DiagramModelObjectLineStyleCommand.java | 24 +++
.../AbstractDiagramModelObjectFigure.java | 25 +++
.../figures/AbstractFigureDelegate.java | 8 +
.../figures/RectangleFigureDelegate.java | 2 +
.../diagram/tools/FormatPainterTool.java | 8 +
.../DiagramObjectLineStyleSection.java | 150 ++++++++++++++++++
.../model/IDiagramModelObject.java | 14 ++
.../model/impl/DiagramModelObject.java | 10 ++
.../model/impl/DiagramModelObjectTests.java | 7 +
11 files changed, 256 insertions(+)
create mode 100644 com.archimatetool.editor/src/com/archimatetool/editor/diagram/commands/DiagramModelObjectLineStyleCommand.java
create mode 100644 com.archimatetool.editor/src/com/archimatetool/editor/propertysections/DiagramObjectLineStyleSection.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.editor/plugin.xml b/com.archimatetool.editor/plugin.xml
index cbfd28d39..d47f3fb59 100644
--- a/com.archimatetool.editor/plugin.xml
+++ b/com.archimatetool.editor/plugin.xml
@@ -436,6 +436,13 @@
id="lineOpacitySection"
tab="appearance.tab">
+
+
getAdaptableType() {
+ return IDiagramModelObject.class;
+ }
+ }
+
+ private Button button;
+
+ @Override
+ protected void createControls(Composite parent) {
+ createLabel(parent, "Line Style:", ITabbedLayoutConstants.STANDARD_LABEL_WIDTH, SWT.CENTER);
+
+ button = getWidgetFactory().createButton(parent, null, SWT.PUSH);
+
+ button.addSelectionListener(widgetSelectedAdapter(event -> {
+ MenuManager menuManager = new MenuManager();
+
+ menuManager.add(createAction("Solid", 0, IArchiImages.ImageFactory.getImageDescriptor(IArchiImages.LINE_SOLID)));
+ menuManager.add(createAction("Dashed", 1, IArchiImages.ImageFactory.getImageDescriptor(IArchiImages.LINE_DASHED)));
+ menuManager.add(createAction("Dotted", 2, 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);
+ }));
+
+ // Help ID
+ PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, HELP_ID);
+ }
+
+ 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 : getEObjects()) {
+ if(isAlive(object)) {
+ Command cmd = new DiagramModelObjectLineStyleCommand((IDiagramModelObject)object, value);
+ if(cmd.canExecute()) {
+ result.add(cmd);
+ }
+ }
+ }
+
+ executeCommand(result.unwrap());
+ }
+
+ @Override
+ public ImageDescriptor getImageDescriptor() {
+ return imageDesc;
+ }
+ };
+
+ action.setChecked(((IDiagramModelObject)getFirstSelectedObject()).getLineStyle() == value);
+
+ return action;
+ }
+
+
+ @Override
+ protected void notifyChanged(Notification msg) {
+ if(msg.getNotifier() == getFirstSelectedObject()) {
+ Object feature = msg.getFeature();
+
+ if(isFeatureNotification(msg, IDiagramModelObject.FEATURE_LINE_STYLE) ||
+ feature == IArchimatePackage.Literals.LOCKABLE__LOCKED) {
+ update();
+ }
+ }
+ }
+
+ @Override
+ protected void update() {
+ int lineStyle = ((IDiagramModelObject)getFirstSelectedObject()).getLineStyle();
+
+ switch(lineStyle) {
+ case 0:
+ default:
+ button.setImage(IArchiImages.ImageFactory.getImage(IArchiImages.LINE_SOLID));
+ break;
+ case 1:
+ button.setImage(IArchiImages.ImageFactory.getImage(IArchiImages.LINE_DASHED));
+ break;
+ case 2:
+ button.setImage(IArchiImages.ImageFactory.getImage(IArchiImages.LINE_DOTTED));
+ break;
+ }
+
+ boolean enabled = !isLocked(getFirstSelectedObject());
+ button.setEnabled(enabled);
+ }
+
+ @Override
+ protected IObjectFilter getFilter() {
+ return new Filter();
+ }
+}
diff --git a/com.archimatetool.model/src/com/archimatetool/model/IDiagramModelObject.java b/com.archimatetool.model/src/com/archimatetool/model/IDiagramModelObject.java
index f421d000e..439920d7f 100644
--- a/com.archimatetool.model/src/com/archimatetool/model/IDiagramModelObject.java
+++ b/com.archimatetool.model/src/com/archimatetool/model/IDiagramModelObject.java
@@ -45,6 +45,9 @@ public interface IDiagramModelObject extends IConnectable, IFontAttribute, ILine
String FEATURE_DERIVE_ELEMENT_LINE_COLOR = "deriveElementLineColor";
boolean FEATURE_DERIVE_ELEMENT_LINE_COLOR_DEFAULT = true;
+ String FEATURE_LINE_STYLE = "lineStyle";
+ int FEATURE_LINE_STYLE_DEFAULT = 0;
+
/**
* @return the value of FEATURE_LINE_ALPHA
*/
@@ -100,6 +103,17 @@ public interface IDiagramModelObject extends IConnectable, IFontAttribute, ILine
*/
void setDeriveElementLineColor(boolean value);
+ /**
+ * @return the value of feature FEATURE_LINE_STYLE
+ */
+ int getLineStyle();
+
+ /**
+ * Set the value of feature FEATURE_LINE_STYLE
+ * @param lineStyle
+ */
+ void setLineStyle(int lineStyle);
+
/**
* Returns the value of the 'Bounds' containment reference.
*
diff --git a/com.archimatetool.model/src/com/archimatetool/model/impl/DiagramModelObject.java b/com.archimatetool.model/src/com/archimatetool/model/impl/DiagramModelObject.java
index cbf6d6183..c317a0d84 100644
--- a/com.archimatetool.model/src/com/archimatetool/model/impl/DiagramModelObject.java
+++ b/com.archimatetool.model/src/com/archimatetool/model/impl/DiagramModelObject.java
@@ -261,6 +261,16 @@ public void setDeriveElementLineColor(boolean value) {
getFeatures().putBoolean(FEATURE_DERIVE_ELEMENT_LINE_COLOR, value, FEATURE_DERIVE_ELEMENT_LINE_COLOR_DEFAULT);
}
+ @Override
+ public int getLineStyle() {
+ return getFeatures().getInt(FEATURE_LINE_STYLE, FEATURE_LINE_STYLE_DEFAULT);
+ }
+
+ @Override
+ public void setLineStyle(int lineStyle) {
+ getFeatures().putInt(FEATURE_LINE_STYLE, lineStyle, FEATURE_LINE_STYLE_DEFAULT);
+ }
+
/**
*
*
diff --git a/tests/com.archimatetool.model.tests/src/com/archimatetool/model/impl/DiagramModelObjectTests.java b/tests/com.archimatetool.model.tests/src/com/archimatetool/model/impl/DiagramModelObjectTests.java
index 08867a184..3aed579c7 100644
--- a/tests/com.archimatetool.model.tests/src/com/archimatetool/model/impl/DiagramModelObjectTests.java
+++ b/tests/com.archimatetool.model.tests/src/com/archimatetool/model/impl/DiagramModelObjectTests.java
@@ -159,6 +159,13 @@ public void testGetLineColor() {
assertEquals("#ffffff", object.getLineColor());
}
+ @Test
+ public void testGetLineStyle() {
+ assertEquals(0, object.getLineStyle());
+ object.setLineStyle(1);
+ assertEquals(1, object.getLineStyle());
+ }
+
@Test
public void testAddConnection_Null_ThrowsException() {
assertThrows(IllegalArgumentException.class, () -> {