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, () -> {