From 220b648c567c7fe1b3d6852c754594a407b2b869 Mon Sep 17 00:00:00 2001 From: Bane Stojkovic Date: Wed, 26 Mar 2025 18:39:56 +0100 Subject: [PATCH] add mini toggle switch highlighting --- .../electromechanical/MiniToggleSwitch.java | 129 ++++++++++++++---- .../electromechanical/ToggleSwitchType.java | 31 ++++- ...ggleSwitchPositionPropertyValueSource.java | 38 ++++++ 3 files changed, 161 insertions(+), 37 deletions(-) create mode 100644 diylc/diylc-library/src/main/java/org/diylc/components/guitar/ToggleSwitchPositionPropertyValueSource.java diff --git a/diylc/diylc-library/src/main/java/org/diylc/components/electromechanical/MiniToggleSwitch.java b/diylc/diylc-library/src/main/java/org/diylc/components/electromechanical/MiniToggleSwitch.java index f3c3c116..dea0a2d1 100644 --- a/diylc/diylc-library/src/main/java/org/diylc/components/electromechanical/MiniToggleSwitch.java +++ b/diylc/diylc-library/src/main/java/org/diylc/components/electromechanical/MiniToggleSwitch.java @@ -31,12 +31,17 @@ import java.awt.geom.Area; import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import java.awt.geom.RoundRectangle2D; +import java.util.List; +import java.util.Set; +import java.util.stream.IntStream; + import org.diylc.appframework.miscutils.ConfigurationManager; import org.diylc.common.IPlugInPort; import org.diylc.common.ObjectCache; import org.diylc.common.OrientationHV; import org.diylc.components.AbstractTransparentComponent; +import org.diylc.components.guitar.ToggleSwitchPositionPropertyValueSource; import org.diylc.components.transform.MiniToggleSwitchTransformer; import org.diylc.core.ComponentState; import org.diylc.core.IDIYComponent; @@ -47,6 +52,7 @@ import org.diylc.core.Project; import org.diylc.core.Theme; import org.diylc.core.VisibilityPolicy; import org.diylc.core.annotations.ComponentDescriptor; +import org.diylc.core.annotations.DynamicEditableProperty; import org.diylc.core.annotations.EditableProperty; import org.diylc.core.annotations.PositiveNonZeroMeasureValidator; import org.diylc.core.gerber.IGerberComponentSimple; @@ -54,6 +60,8 @@ import org.diylc.core.measures.Size; import org.diylc.core.measures.SizeUnit; import org.diylc.utils.Constants; +import static org.diylc.utils.SwitchUtils.getConnectedTerminals; + @ComponentDescriptor(name = "Mini Toggle Switch", category = "Electro-Mechanical", author = "Branislav Stojkovic", description = "Panel mounted mini toggle switch", zOrder = IDIYComponent.COMPONENT, instanceNamePrefix = "SW", autoEdit = false, enableCache = true, transformer = MiniToggleSwitchTransformer.class) @@ -69,7 +77,8 @@ public class MiniToggleSwitch extends AbstractTransparentComponent> connectedTerminals = getConnectedTerminals(this, controlPoints.length); + + for (int i = 0; i < controlPoints.length; i++) { + Point2D p = controlPoints[i]; if (outlineMode) { // g2d.setColor(Constants.TRANSPARENT_COLOR); // drawingObserver.startTrackingContinuityArea(true); @@ -322,13 +339,35 @@ public class MiniToggleSwitch extends AbstractTransparentComponent connectedTerminals.get(j).contains(finalI)) + .findFirst().orElse(-1); + + if (groupIndex < 0) { + g2d.setColor(getTerminalPadColor().darker()); + } else { + g2d.setColor(ISwitch.POLE_COLORS[groupIndex].darker()); + } + + g2d.drawOval((int)(p.getX() - circleDiameter / 2d), (int)(p.getY() - circleDiameter / 2d), circleDiameter, circleDiameter); + + + if (groupIndex < 0) { + g2d.setColor(getTerminalPadColor()); + } else { + g2d.setColor(ISwitch.POLE_COLORS[groupIndex]); + } + g2d.fillOval((int)(p.getX() - circleDiameter / 2d), (int)(p.getY() - circleDiameter / 2d), circleDiameter, circleDiameter); + if (groupIndex < 0) { + g2d.setColor(getTerminalColor()); + } else { + g2d.setColor(getTerminalColor().darker()); + } // drawingObserver.startTrackingContinuityArea(true); - g2d.fillRect((int)(p.getX() - lugWidth / 2), (int)(p.getY() - lugHeight / 2), lugWidth, lugHeight); + g2d.fillRect((int)(p.getX() - lugWidth / 2d), (int)(p.getY() - lugHeight / 2d), lugWidth, lugHeight); // drawingObserver.stopTrackingContinuityArea(); } } @@ -431,7 +470,31 @@ public class MiniToggleSwitch extends AbstractTransparentComponent getAvailableValues() { + if (properties == null) { + return List.of(); + } + Optional optionalPropertyWrapper = this.properties.stream().filter(p -> { + try { + return p.getGetter().getName().equals("getValue"); + } catch (NoSuchMethodException e) { + return false; + } + }).findFirst(); + if (optionalPropertyWrapper.isEmpty()) { + return List.of(); + } + ToggleSwitchType + switchType = (ToggleSwitchType) optionalPropertyWrapper.get().getValue(); + int positionCount = switchType.getPositionCount(); + List res = new ArrayList<>(); + res.add(null); + for (int i = 0; i < positionCount; i++) { + res.add(i); + } + return res; + } +}