diff --git a/diylc/diylc-library/lib/diylc-core.jar b/diylc/diylc-library/lib/diylc-core.jar index 90f7225d..3d4dfaa6 100644 Binary files a/diylc/diylc-library/lib/diylc-core.jar and b/diylc/diylc-library/lib/diylc-core.jar differ diff --git a/diylc/diylc-library/src/org/diylc/components/electromechanical/DIPSwitch.java b/diylc/diylc-library/src/org/diylc/components/electromechanical/DIPSwitch.java index 3f8c56fa..bd6cc5d2 100644 --- a/diylc/diylc-library/src/org/diylc/components/electromechanical/DIPSwitch.java +++ b/diylc/diylc-library/src/org/diylc/components/electromechanical/DIPSwitch.java @@ -43,6 +43,7 @@ import org.diylc.components.transform.DIL_ICTransformer; import org.diylc.core.ComponentState; import org.diylc.core.IDIYComponent; import org.diylc.core.IDrawingObserver; +import org.diylc.core.ISwitch; import org.diylc.core.Project; import org.diylc.core.Theme; import org.diylc.core.VisibilityPolicy; @@ -57,7 +58,7 @@ import org.diylc.utils.Constants; @ComponentDescriptor(name = "DIP Switch", author = "Branislav Stojkovic", category = "Electro-Mechanical", instanceNamePrefix = "SW", description = "Dual-in-line package switch", stretchable = false, zOrder = IDIYComponent.COMPONENT, keywordPolicy = KeywordPolicy.SHOW_VALUE, transformer = DIL_ICTransformer.class) -public class DIPSwitch extends AbstractTransparentComponent { +public class DIPSwitch extends AbstractTransparentComponent implements ISwitch { private static final long serialVersionUID = 1L; @@ -512,5 +513,39 @@ public class DIPSwitch extends AbstractTransparentComponent { public int getValue() { return Integer.parseInt(toString()); } + } + + @Override + public int getPositionCount() { + return (int) Math.pow(2, getSwitchCount().getValue()); + } + + @Override + public String getPositionName(int position) { + String binary = toBinary(position); + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < getSwitchCount().getValue(); i++) { + if (sb.length() > 0) + sb.append("-"); + sb.append(binary.charAt(i) == '0' ? "OFF" : "ON"); + } + return sb.toString(); + } + + @Override + public boolean arePointsConnected(int index1, int index2, int position) { + String binary = toBinary(position); + return Math.abs(index1 - index2) == getSwitchCount().getValue() && binary.charAt(index1 < index2 ? index1 : index2) == '1'; + } + + private String toBinary(int n) { + StringBuilder builder = new StringBuilder(); + do { + builder.append(n % 2); + n = n / 2; + } while (n > 0); + while (builder.length() < getSwitchCount().getValue()) + builder.append("0"); + return builder.toString(); } } diff --git a/diylc/diylc-swing/lib/diylc-core.jar b/diylc/diylc-swing/lib/diylc-core.jar index 90f7225d..3d4dfaa6 100644 Binary files a/diylc/diylc-swing/lib/diylc-core.jar and b/diylc/diylc-swing/lib/diylc-core.jar differ diff --git a/diylc/diylc-swing/library/main.jar b/diylc/diylc-swing/library/main.jar index adae7e21..f9665659 100644 Binary files a/diylc/diylc-swing/library/main.jar and b/diylc/diylc-swing/library/main.jar differ diff --git a/diylc/diylc-swing/update.xml b/diylc/diylc-swing/update.xml index 9c5ed9e8..6a9e48e8 100644 --- a/diylc/diylc-swing/update.xml +++ b/diylc/diylc-swing/update.xml @@ -2642,6 +2642,10 @@ IMPROVEMENT Honor "Terminal Strip" connectivity when creating a netlist + + IMPROVEMENT + Honor all possible combinations of "DIP Switch" positions when creating a netlist + BUG_FIX Z-order of components sometimes gets wrong when importing a DIY file into another file