From 744e6a2576287fe54ad37c4688281d3cf05626b4 Mon Sep 17 00:00:00 2001 From: Branislav Stojkovic Date: Sun, 6 Nov 2016 23:42:48 +0100 Subject: [PATCH] refactor editably property add transformer coil and core --- .../src/org/diylc/common/PropertyWrapper.java | 44 +-- .../src/org/diylc/core/Project.java | 4 +- .../org/diylc/core/annotations/Defaults.java | 54 ++++ .../diylc/core/annotations/DynamicList.java | 10 + .../core/annotations/EditableProperty.java | 20 -- .../diylc/core/annotations/ElementLabel.java | 6 + .../diylc/core/annotations/MultiLineText.java | 9 + .../plugins/cloud/model/ProjectEntity.java | 9 +- .../diylc/presenter/ComponentProcessor.java | 20 +- diylc/diylc-library/lib/diylc-core.jar | Bin 227331 -> 229173 bytes ...torSymbol.java => Abstract3LegSymbol.java} | 7 +- .../passive/PotentiometerSymbol.java | 6 +- .../components/passive/TransformerCoil.java | 263 ++++++++++++++++++ .../components/passive/TransformerCore.java | 141 ++++++++++ .../components/semiconductors/BJTSymbol.java | 3 +- .../components/semiconductors/JFETSymbol.java | 3 +- .../semiconductors/MOSFETSymbol.java | 3 +- diylc/diylc-swing/lib/diylc-core.jar | Bin 227331 -> 229173 bytes diylc/diylc-swing/library/main.jar | Bin 306101 -> 313971 bytes .../swing/gui/editor/FieldEditorFactory.java | 26 +- .../org/diylc/swing/gui/editor/IntEditor.java | 2 +- .../swing/gui/editor/StringListEditor.java | 8 +- 22 files changed, 554 insertions(+), 84 deletions(-) create mode 100644 diylc/diylc-core/src/org/diylc/core/annotations/Defaults.java create mode 100644 diylc/diylc-core/src/org/diylc/core/annotations/DynamicList.java create mode 100644 diylc/diylc-core/src/org/diylc/core/annotations/ElementLabel.java create mode 100644 diylc/diylc-core/src/org/diylc/core/annotations/MultiLineText.java rename diylc/diylc-library/src/org/diylc/components/{semiconductors/AbstractTransistorSymbol.java => Abstract3LegSymbol.java} (93%) create mode 100644 diylc/diylc-library/src/org/diylc/components/passive/TransformerCoil.java create mode 100644 diylc/diylc-library/src/org/diylc/components/passive/TransformerCore.java diff --git a/diylc/diylc-core/src/org/diylc/common/PropertyWrapper.java b/diylc/diylc-core/src/org/diylc/common/PropertyWrapper.java index 4c32552f..07603625 100644 --- a/diylc/diylc-core/src/org/diylc/common/PropertyWrapper.java +++ b/diylc/diylc-core/src/org/diylc/common/PropertyWrapper.java @@ -4,7 +4,6 @@ import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import org.diylc.core.IPropertyValidator; -import org.diylc.core.annotations.EditableProperty; /** * Entity class for editable properties extracted from component objects. Represents a single @@ -23,12 +22,11 @@ public class PropertyWrapper implements Cloneable { private IPropertyValidator validator; private boolean unique = true; private boolean changed = false; - private String additionalOptions; private int sortOrder; - private Object[] listItems; + private Object ownerObject; public PropertyWrapper(String name, Class type, String getter, String setter, boolean defaultable, - IPropertyValidator validator, String additionalOptions, int sortOrder) { + IPropertyValidator validator, int sortOrder) { super(); this.name = name; this.type = type; @@ -36,18 +34,14 @@ public class PropertyWrapper implements Cloneable { this.setter = setter; this.defaultable = defaultable; this.validator = validator; - this.additionalOptions = additionalOptions; this.sortOrder = sortOrder; + this.ownerObject = null; } public void readFrom(Object object) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException, SecurityException, NoSuchMethodException { - this.value = object.getClass().getMethod(getter).invoke(object); - if (additionalOptions.startsWith(EditableProperty.DYNAMIC_LIST)) { - String functionName = additionalOptions.substring(EditableProperty.DYNAMIC_LIST.length()); - Method listMethod = object.getClass().getMethod(functionName); - listItems = (Object[]) listMethod.invoke(object); - } + this.ownerObject = object; + this.value = getGetter().invoke(object); } // public void readUniqueFrom(IDIYComponent component) @@ -64,6 +58,10 @@ public class PropertyWrapper implements Cloneable { object.getClass().getMethod(setter, type).invoke(object, this.value); } + public Method getGetter() throws SecurityException, NoSuchMethodException { + return getOwnerObject().getClass().getMethod(getter); + } + public String getName() { return name; } @@ -80,6 +78,10 @@ public class PropertyWrapper implements Cloneable { this.value = value; } + public Object getOwnerObject() { + return ownerObject; + } + public boolean isDefaultable() { return defaultable; } @@ -104,22 +106,10 @@ public class PropertyWrapper implements Cloneable { this.changed = changed; } - public String getAdditionalOptions() { - return additionalOptions; - } - public int getSortOrder() { return sortOrder; } - public Object[] getListItems() { - return listItems; - } - - public void setOptions(Object[] listItems) { - this.listItems = listItems; - } - // @Override // public Object clone() throws CloneNotSupportedException { // // Try to invoke clone method on value if possible. @@ -134,7 +124,7 @@ public class PropertyWrapper implements Cloneable { public Object clone() throws CloneNotSupportedException { PropertyWrapper clone = new PropertyWrapper(this.name, this.type, this.getter, this.setter, this.defaultable, this.validator, - this.additionalOptions, this.sortOrder); + this.sortOrder); clone.value = this.value; clone.changed = this.changed; clone.unique = this.unique; @@ -145,7 +135,6 @@ public class PropertyWrapper implements Cloneable { public int hashCode() { final int prime = 31; int result = 1; - result = prime * result + ((additionalOptions == null) ? 0 : additionalOptions.hashCode()); result = prime * result + (defaultable ? 1231 : 1237); result = prime * result + ((getter == null) ? 0 : getter.hashCode()); result = prime * result + ((name == null) ? 0 : name.hashCode()); @@ -162,11 +151,6 @@ public class PropertyWrapper implements Cloneable { if (getClass() != obj.getClass()) return false; PropertyWrapper other = (PropertyWrapper) obj; - if (additionalOptions == null) { - if (other.additionalOptions != null) - return false; - } else if (!additionalOptions.equals(other.additionalOptions)) - return false; if (defaultable != other.defaultable) return false; if (getter == null) { diff --git a/diylc/diylc-core/src/org/diylc/core/Project.java b/diylc/diylc-core/src/org/diylc/core/Project.java index cfcdb30a..0d5f32c1 100644 --- a/diylc/diylc-core/src/org/diylc/core/Project.java +++ b/diylc/diylc-core/src/org/diylc/core/Project.java @@ -11,6 +11,7 @@ import java.util.Set; import org.diylc.appframework.update.VersionNumber; import org.diylc.core.annotations.EditableProperty; +import org.diylc.core.annotations.MultiLineText; import org.diylc.core.annotations.PositiveMeasureValidator; import org.diylc.core.measures.Size; import org.diylc.core.measures.SizeUnit; @@ -72,7 +73,8 @@ public class Project implements Serializable { this.author = author; } - @EditableProperty(defaultable = false, additionalOptions = EditableProperty.MULTI_LINE, sortOrder = 2) + @MultiLineText + @EditableProperty(defaultable = false, sortOrder = 2) public String getDescription() { return description; } diff --git a/diylc/diylc-core/src/org/diylc/core/annotations/Defaults.java b/diylc/diylc-core/src/org/diylc/core/annotations/Defaults.java new file mode 100644 index 00000000..8a709e3b --- /dev/null +++ b/diylc/diylc-core/src/org/diylc/core/annotations/Defaults.java @@ -0,0 +1,54 @@ +package org.diylc.core.annotations; + +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +public final class Defaults { + private Defaults() {} + + private static final Map, Object> DEFAULTS; + + static { + // Only add to this map via put(Map, Class, T) + Map, Object> map = new HashMap, Object>(); + put(map, boolean.class, false); + put(map, Boolean.class, false); + put(map, char.class, '\0'); + put(map, byte.class, (byte) 0); + put(map, Byte.class, (byte) 0); + put(map, short.class, (short) 0); + put(map, Short.class, (short) 0); + put(map, int.class, 0); + put(map, Integer.class, 0); + put(map, long.class, 0L); + put(map, Long.class, 0L); + put(map, float.class, 0f); + put(map, Float.class, 0f); + put(map, double.class, 0d); + put(map, Double.class, 0d); + DEFAULTS = Collections.unmodifiableMap(map); + } + + private static void put(Map, Object> map, Class type, T value) { + map.put(type, value); + } + + /** + * Returns the default value of {@code type} as defined by JLS --- {@code 0} for numbers, + * {@code false} for {@code boolean} and {@code '\0'} for {@code char}. For non-primitive types + * and {@code void}, {@code null} is returned. + * + * @throws Exception + */ + @SuppressWarnings("unchecked") + public static T defaultValue(Class type) throws Exception { + // Primitives.wrap(type).cast(...) would avoid the warning, but we can't use that from here + // the put method enforces this key-value relationship + T t = (T) DEFAULTS.get(type); + if (t == null) { + return (T) type.getConstructors()[0].newInstance(); + } + return t; + } +} diff --git a/diylc/diylc-core/src/org/diylc/core/annotations/DynamicList.java b/diylc/diylc-core/src/org/diylc/core/annotations/DynamicList.java new file mode 100644 index 00000000..9eacfc9e --- /dev/null +++ b/diylc/diylc-core/src/org/diylc/core/annotations/DynamicList.java @@ -0,0 +1,10 @@ +package org.diylc.core.annotations; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +@Retention(RetentionPolicy.RUNTIME) +public @interface DynamicList { + + public String availableValueFunction(); +} diff --git a/diylc/diylc-core/src/org/diylc/core/annotations/EditableProperty.java b/diylc/diylc-core/src/org/diylc/core/annotations/EditableProperty.java index a73f33f3..cdf0d9dc 100644 --- a/diylc/diylc-core/src/org/diylc/core/annotations/EditableProperty.java +++ b/diylc/diylc-core/src/org/diylc/core/annotations/EditableProperty.java @@ -33,18 +33,6 @@ import org.diylc.core.IPropertyValidator; @Retention(RetentionPolicy.RUNTIME) public @interface EditableProperty { - /** - * Used to designate that a {@link String} property can have multi-lined text. - */ - public static final String MULTI_LINE = "MULTI-LINE"; - /** - * Used when property can have one of the values from a dynamic list. In such cases, - * {@link EditableProperty#additionalOptions()} should begin with - * {@link EditableProperty#DYNAMIC_LIST} and contain a method name from the parent object that - * should be called to obtain the {@link String} array with possible options. - */ - public static final String DYNAMIC_LIST = "DYNAMIC_LIST:"; - /** * Returns property name. If left blank property name will be extracted from the getter name, e.g. * getter getXYZ will induce property name XYZ.
@@ -75,12 +63,4 @@ public @interface EditableProperty { * @return */ int sortOrder() default Integer.MAX_VALUE; - - /** - * Optional parameter for properties that require additional configuration. This will be passed - * down to the editor factory. - * - * @return - */ - String additionalOptions() default ""; } diff --git a/diylc/diylc-core/src/org/diylc/core/annotations/ElementLabel.java b/diylc/diylc-core/src/org/diylc/core/annotations/ElementLabel.java new file mode 100644 index 00000000..a2bac603 --- /dev/null +++ b/diylc/diylc-core/src/org/diylc/core/annotations/ElementLabel.java @@ -0,0 +1,6 @@ +package org.diylc.core.annotations; + +public @interface ElementLabel { + + public String functionName(); +} diff --git a/diylc/diylc-core/src/org/diylc/core/annotations/MultiLineText.java b/diylc/diylc-core/src/org/diylc/core/annotations/MultiLineText.java new file mode 100644 index 00000000..bb8ffdd8 --- /dev/null +++ b/diylc/diylc-core/src/org/diylc/core/annotations/MultiLineText.java @@ -0,0 +1,9 @@ +package org.diylc.core.annotations; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +@Retention(RetentionPolicy.RUNTIME) +public @interface MultiLineText { + +} diff --git a/diylc/diylc-core/src/org/diylc/plugins/cloud/model/ProjectEntity.java b/diylc/diylc-core/src/org/diylc/plugins/cloud/model/ProjectEntity.java index 0c017a25..01259fd9 100644 --- a/diylc/diylc-core/src/org/diylc/plugins/cloud/model/ProjectEntity.java +++ b/diylc/diylc-core/src/org/diylc/plugins/cloud/model/ProjectEntity.java @@ -2,7 +2,9 @@ package org.diylc.plugins.cloud.model; import java.io.Serializable; +import org.diylc.core.annotations.DynamicList; import org.diylc.core.annotations.EditableProperty; +import org.diylc.core.annotations.MultiLineText; /** * Represents a cloud project object, identified by {@link ProjectEntity#id}. @@ -49,7 +51,8 @@ public class ProjectEntity implements Serializable { this.name = name; } - @EditableProperty(defaultable = false, additionalOptions = EditableProperty.MULTI_LINE, sortOrder = 3) + @MultiLineText + @EditableProperty(defaultable = false, sortOrder = 3) public String getDescription() { return description; } @@ -74,8 +77,8 @@ public class ProjectEntity implements Serializable { this.category = category; } - @EditableProperty(defaultable = false, sortOrder = 2, additionalOptions = EditableProperty.DYNAMIC_LIST - + "getCategories") + @DynamicList(availableValueFunction="getCategories") + @EditableProperty(defaultable = false, sortOrder = 2) public String getCategoryForDisplay() { return categoryForDisplay; } diff --git a/diylc/diylc-core/src/org/diylc/presenter/ComponentProcessor.java b/diylc/diylc-core/src/org/diylc/presenter/ComponentProcessor.java index 768b88e2..08ffdbb3 100644 --- a/diylc/diylc-core/src/org/diylc/presenter/ComponentProcessor.java +++ b/diylc/diylc-core/src/org/diylc/presenter/ComponentProcessor.java @@ -139,26 +139,26 @@ public class ComponentProcessor { return cloneProperties(propertyCache.get(clazz.getName())); } List properties = new ArrayList(); - for (Method method : clazz.getMethods()) { - if (method.getName().startsWith("get")) { + for (Method getter : clazz.getMethods()) { + if (getter.getName().startsWith("get")) { try { - if (method.isAnnotationPresent(EditableProperty.class) && !method.isAnnotationPresent(Deprecated.class)) { - EditableProperty annotation = method.getAnnotation(EditableProperty.class); + if (getter.isAnnotationPresent(EditableProperty.class) && !getter.isAnnotationPresent(Deprecated.class)) { + EditableProperty annotation = getter.getAnnotation(EditableProperty.class); String name; if (annotation.name().equals("")) { - name = method.getName().substring(3); + name = getter.getName().substring(3); } else { name = annotation.name(); } - IPropertyValidator validator = getPropertyValidator(annotation.validatorClass()); - Method setter = clazz.getMethod("set" + method.getName().substring(3), method.getReturnType()); + IPropertyValidator validator = getPropertyValidator(annotation.validatorClass()); + Method setter = clazz.getMethod("set" + getter.getName().substring(3), getter.getReturnType()); PropertyWrapper property = - new PropertyWrapper(name, method.getReturnType(), method.getName(), setter.getName(), - annotation.defaultable(), validator, annotation.additionalOptions(), annotation.sortOrder()); + new PropertyWrapper(name, getter.getReturnType(), getter.getName(), setter.getName(), + annotation.defaultable(), validator, annotation.sortOrder()); properties.add(property); } } catch (NoSuchMethodException e) { - LOG.debug("No matching setter found for \"" + method.getName() + "\". Skipping..."); + LOG.debug("No matching setter found for \"" + getter.getName() + "\". Skipping..."); } } } diff --git a/diylc/diylc-library/lib/diylc-core.jar b/diylc/diylc-library/lib/diylc-core.jar index ac75d55cae2c232a63363c97487ad3e73d58e639..b879c9a57358b02880876ec73d69b8e65656ed7f 100644 GIT binary patch delta 20270 zcmZvE1y~i^_crGo=`QK+PLb~JZbVW*x)J4w0#YJUBdtiNsB|M8f;19J3lb6n3ZkHV z!DN> z1o&U7B#a4lwT5w^uD9WIskty}lw1$vM_t!o!l)}PoELS~fJ>mRx8Y)_Yb_kYeTEC5 z{-;Dh*E6oG2#6~jA%)7TL&%}7KM+EwE6)YKvul;bg$Hnyuz|IRiOLxuSSAH?v}nh= zjcYJ4FlNBSm)g!o0W3-(Xj69xTT%FOqICpH$R;a;81yK8A)$?m6+v`HK|&_`{xb{% z!x53%E=5&^P4^pyDuT^Wi9)6}GmWEc4PwIXb%1s-KrlOKixTjbMUbWTG7q5e87z#b zf~j?^KT(P*wtbYdRnK@lAWBNUi;y75Zv;be=Hklw1%Z5*5f~UeD9*R?2&$@P0VD*J z7fOcQ9ThQ!1a9#?NT9zAKtipQBOFx|S3d)%a!d@26N1zyEL1?5B7ze6%4{Zp+=b%Q ztE!K4BSYd1M!NPpy)iu&y!mp&NPoV=JH-^%7d~+6R3^K2x|%%uacsA6(9QL^Xn8Ra zS4>p$7pqvy(c;m9ym{V0f?WwcBR_!$0 z9Pn}is%tYEi)($KuT~`GTst9KAJNe`>BsN7rxjk=xzXo?y(gcD(Rl;8QO(zmle;n4 zeFXm@UI6sS*{S2c7C5RlwJS-3^IUo~M2D%@(WIJfq9dgt#K5DYXP;@DP?aP2CXB2i zxaQ@m&W{EiUQSOMeZXa_J6trFjfJhx701Tevs;3uQ#PT>h?=@xkmkWMZl=7oj0=4i z3(W5R3fVlc2a`|Rqn1J5ih2r{rhBc~(|e@aqm@GD`HrK`l5 zANEts%RNL(zGvl*xxX^qZ(z^DlsB@J7~}1%dZG1W{oDMCj-3vG+!%d%G}10D?N!*n zk@L;;CgTj9N2bI}(*{fSCvFj!Q}E-iFaMrr#8oY!FEgY&tRZ>Za52mMXUsE+WA$8% zuYOFPd%vZpzTaRva#{Caf1GGVgjujKai`_y=90E!b$hFt)b-yL(SIC*Z|}gj-Ik{m zPm5-blt$)*!&~k~6nZ1W8AJ9QLJ9%L2j4BX{OX$Y8`<74h0i+m{vhM(%bqkC{UUka zfmS2khJ>Qxjs%CHlA@L=GcOzEg>*a0sI&-W_97umCCd$BGZLd;g?I(=hDyi8iwazW zC2=P-vYRPB(VAjc<;H9Hv?={reX$wLUY0%{kDJj@piz>&XSCIege8)8e!CR&2Im8T z47ph#kAgDUS7r&O$5z5-Y9V(r7!E5_Gd722^HW;r1wS*xtFdly=Q7^Aq^i{&yW=X5 zV-N%R9?aG^)@HR< zb8*-_VK-Rl1XH*6HnOu+P&RtwqHkA1o;%Ils#<AMgD(7t8c%ak(J$@pWJ3-W+=tGV;^@t0hS~hb|LD0Iw%f2xMzPcQRIsX<5vIQ3I z*PJ`7)Rr6*A$v~0GN|J0M`XH#l19GL(bc|7b!YfRcx&iJ*Xw}JDM3N$`t_wxv35R$ z0KM(LuY1?)rWkBZ2HEu`r7NZtqdna>uHRtRQTplA^{iR{$Aib;YOtRhM)E%ztQ%E8 z;y;kQweVg}G3IM)yhiEt)~w_o%)cu$&e_UbRj$kdEoIYc=%p-PGaOm~aCB}GpjMoF z7DSNdk<|}KNU`m~MP=EzmXV?a!q5XK3p1ST0!l-RA>ly` zAtdC-)}Vw`i-g9r(y0`QqbQd3L_-K6^S}X4cDArq=M&u?z{S9rqQt8p|bz8ag=uwy!qpoYu zWuMz4)?VALHQ6;qBWl+ZHtu*`5F;^3_r6+FI=4Olad4-}kUj5P#(?fVt$XVbAoXK5 zVEFgfhP9mVom|<7!zUUT{N&%1E$@-yB8j6G+cinP`C4{7Bsno(Q{sH8>#v)Xv1p0o z6dEhDtSjHS;=uVpI4rHtk2Bw8Uy3uIcnSZAwM?aO?vuWzWZ$P=?L7|Jp_Mq}n>6+g z`)0WId};zMLmwYR<2Xe1U4A6nx00>f(!DaH+tRtxq}$TFa;%%@xR2meaNcL*R6x4! zry9TPFyJ`hk9sHUC}f+E|7}{R{y2~)BF`MD22&NX51;mU$j5z)Jy}{k9hszfYvvoRGjSG45&Fu2AHDUNzZx%J1y7 zsEZbfX@blesaj?}I^3CwSuFPxUtC9OJEp$4R&DCzZ4L>B)V(lFpeXMJ_E7P=N!!Yzs2w$4Gkvm+>e@!AJ8?MMG^W3SB&YL@$NGq#nj^n=ae+ zlZ2^XeaQEWrr&MM@VL*t*h;|KSj-$Rbn~JQ*=|kIr|RyMh>7)@6Dza2X#so>3Fp)p ziD%wpq8|^VK4$3_6GYqP@(|^^SEMj`eTlsuqbxSL`MmlCoywqV;jc8$4vKK(psA{G z>e&6D8@3Z~%sn!kIR#$4&h{pmVPt=5Gr0JTUg)kQTw9seQ%E=VS7xHE&ZL{2wehyu z59&dJHI~=`3Y^0+SH4#seL7-{h@M@mner0;XW3yfRYm$@4q+_|AB{_L+nb9nMQd&8 zjL|$%z3SlA^DtxE|I1w~std(d+Q=uMY|eUo-ze;v;KUd|B=31u}7cXnLX39-JAxm);Ps^!^5Wkr{Gd`B62w~ zaa;D6cC)s6PG69&Dd&{fh7*}nI?}6NsUtvir$xxFd8#FF5 zE^&nPb#R?j;w(l){uFb`;%7HvWkYm?UAn@y%(?3Ax^r>W+hynX(d|UyPb#82ZFDZP zadmI&?>Ee3h9d%eT)hp;n@N@iVJ(!Y3!w#-@q6n%bt~DsWj}k42l`q_D_MEuzycT&f6DP`>x0ni`K!;CsU$9m{g^ zecRCvITacehLwAf9+Ck0)CJ%jvS(YFKcBa12fJz2{2~Ln$y>F@_43A;!^uzG3MAZj zw+gaWJfl{%1CN?Ef<=e_m<#@KE$Nc}`i7?tznEJgJIq`$uGfYfw{dtAFT-7jgKWiA z8^fgUvp=6YD;>@~H)$PC+YMuPTaO1eA0F9A)`Tb;Y_C4c?jF(^${|b2Oh)2$jOO)c zJ!jkgw6@bI|2ld*I+Y(Y%T&hXk9Q#+=VF{uJb%vKs;e5jslfXenUL&*x-X+CmWr(; zlcOqbavfa<=;*Wd6repYz|I#atwJ=nhbXqje0r-)72fAHf>kg zylAgZa^06%*C`6ARM1>-R#HGlH*}dOalJ@&7HjT;O-(XIKV!Og?VVAm#uD44f#+2U z<2-@q3W`B^lpT`^wBiXh}*FG!h=oz+$mLZE)T|=6! zh~@=ehnj^o^U_8z)I`U$Mryq{_30bDk z4&}+dhM4j3n93+RHl}zz#hXCB(D2M&uMDng_*jv7g>tg~S)oyc(!%Ga7bhn_5jnP8 zEMfO}Hsb~z4hfTH0pQsGkr+=||GQGW1Gca*_InMf`-WE-dEXPSeReQG{$UxPBqnEw zl2wu^Dj9s!Y$pl27(&Odp1KE`1ml2}u5v zk#mR36RCM1&#OC5F1^Ao{$_bAw2<3Q=a~RguPpC4Rp2E<{)?Y|S?Z`h`-;>BN%5~{ z{GqM)8gRg^(+P0uz{cZ5!*AkgCpqyq8m7*Ec(a9MXsP+pR%uT> zCyx;~qV}Wm>Q+z@Ez*gw{pI0Rf>+fmyIm%P7Y5#0&)p?tTVcAZJt{9gllN7z&*~4Q zUs=?H)J`s6sT0@Xi<(ClqM{6tdFmVPp+n4?l~whI9W39zF1o*$OQ_s8_y6;I+{2hi zsLJsh&#zya)4E1Kzpu!J3-ldTy(rkmxwGuHU>u#~WEnu6t3fJvM^q;TRZYSQr>pb=l~<&$7Hp=yoyo2_|&Y znOr~(X-W&xcc0V6iqOW!LG3kzOmK%J8#~pYnle@XB>_^^#nmCmGcW+Uq0BY=9Wbs= za*Ha{wvZcFOEZg16PF^H!8*NKF@CPPD_FZtyjo%;Il|8QgAs|bdWQSYvS%`wc|8Qv^m|OlH|p(uxJyr{APfDVdIEVL0FfOVO(!?x`;IhXKTIOF#RSV z%`^Jt(n5&WlHauG6V7|mouRBt?$pu2TB;guVN=A)xH5L0bXVM_wiU4s8!fe4EP(Z= zf*CDk4pMDG)B9BJnI;{yRED{3U{B?J67S-gEg3ib8(GiMot=Qh=TGCBl0xo99 zv9n75?zs?SH2lZ!?#(4D_N9cLLnObj*@s4(!ovftyhw$IKOCxhgs;o$3d$$z)Na;) zYhooaN4l8^1gOhrMo>S*PplE-9HV@~mFQ1)KQKLg#+!W!VW-AlmjZiU8tWn#r{2gK z+QZGhWNAUBK&Cby@;Odh!02w)yi@C!_w-?Bg5 zevB_E5A6mmc?yejimUp!iUIucd=_L@^ZhjT&MKtgx`CzZ#+VKPPbkS+m-APp?qgvd zmDSfIqN?AN@wHbuj8(V=-gG#xN+t2U>t~{lAo}CEVP*OrTRiFZ@B1b>+IE~mYU|*$ zHUQdUt0df)P zaSM;zZ?QRi+x5@>!^>nEzdCgX}<;#N8?(l{bw6MC)rzL-ekw8)I)F@D-n{jSjY z8Np6zE^!*%M^y(mKKWCVUo#?A!@M25+?{mY0|KD|9i6PFgHR%fS(u)D&O}Mf`n|BE zpafQycY!kMSG#q1eo|+O=wRE9r^9I$HuAQD_P`ZS;yd@)g|zb6S2mBA$=fKC2#5%X z2-TxZ>VoO#SYsLz^y+=OuIVdFHq_?`*0?=Q9cx*QFKXsYOi&j^mUZM@H(yt0cbOu+ zv~&~Sw-wVSioVb!o_KQZV#iAUBtY?@4)4*YZTG|7&=SoT+Q&m)-zQ6WJsoP^cy+&; zHfR`%S{__q>lO{w%l+Np6>t)zIBm4Karc?Qy3+{H)(a+gagWa1a$Bbu=Of`y?;>Ci z!@$C@1Sd$5vrqt<+K7wDXd^uXxClw^{!%>7oki>$BcaSBMA@NYwB!Z!5=tzO>Fd+y zw6(RbH`)~&EG~vFI|FRTZAF$3wu6Q0%oMPP;!jHhug>WUR~;bUzU9a*Qf5zImPt3M7?ki zq+N8LKx#K>`-UW4K$eCe!`Ei3am3A6liXY8_Ct>>*!V8sRYY79cM$YmTp!M;xXatl zz_AOCGVP@lmir%QUA36_FHEwK!&IgfnensV;=rihzWJ=VOEGH@c>+BIvcjzvnSm;bV>QuTLES99R+#gu}9=D_RfSO+Hs zfxpuR`g5FrubdQ^{_bjSK1oqcu64XMmGge~eKT2pSK)hlbu3tv_i5qF_bX%q>R4e> zB+B_MY&p++-nPAMyU;bDI3-dkELtvH4!0sW-;+|=OMjrYVHjUJz)^1&tV^letH8RD zfP+jBHOTb9_0nC}-P^^~CG_tw({I9qD-q-zS?6E9UX(s9Fl}vRiPIwaK0>auqPG!$ zK5xCu>IfE*RxjbfLjA~DQ#5myX^QSPOBVc6WTWEUkvRX&gUCARahXo1>$w(JWU@(b zRGH?ciT86FzrhxD96sz;kJ{JD%)$MwU|Py|E$}8ToYd>$=EhBB>Ut;EAHN(OX`0xO zeWFss_ou|X!UnGyxFM5-LU?+gO#I&X5!PzJOaYG%#e72H&-dP6F`C8j7W`b(Ro!__ z4Ba)PmA``a$5gA6Az`X+7s~2yoP};No;O3UbgHhjK7uemJGLRrMt2gVxzSe)Y1jtl zpi+pT&seC~ZoV&vvht?xL0f0svt1}n>euIks;X-hh){{r}1RqX`>}PBtD13opp82I1OFlgJgjx!d<4N)5ki@?M<3UY3dJ*7UH@^Ji?{}7Ey<4ljs80h8Yew zgK(jk@LP~{gafaKO6-^2Wvd5EQ~|=V;BcEDfDb~}y{_$nV;GD+91w{Gt-p3f;Ma|j zzzLyjErux1vlqUhFkm+v%sz5O5Y~}Wz>zT2E8OWcffGKkt8l_IsNvLgwUlsKXf&mz z2V779X{7<9SD-yAYPb>P(sep`D-=Qj2KX~bH_Z$$gCwvkqdPhaH#{2BJ?DdaLK3wQ z+#c#tH$>pdkgio6o&iaglJG=GT9biGKsK1=;DnGQEDuLOl7s?02f|G#!{wpy(5$7A z)`G91bpU2{xDwLX`JI1GV}qgfM~pX;wI%_CBh}H9?krwoX{&I(2Gt6)HSx+7ZGRKs zxX3nUiFmhzd^hEusLBk@BZtrev6G7taFq{i8=C(9>jZau=jFnG9&UY@3pnXrP&mcI zFlYyOWeM03nDxqi(j1%|0^0oAp4uPNY>T>{bQN_yEmT4FUDB2?ttYah{Tc)RYPe*F zId9@Xg2VB(Wa+N>O-+D_XSV{Lk0ZQDOEfyj(difGC7^GB%bY{XY*8gJH7?+zby+5c zpk0H6S&epGMBujbhJecLjseQwSywIvm0IQgpm)5)h51&3pl&C*_8tpn@;2c+-wT>k zLBnnz^{I?JkzpT$i(_Xbf=qdHgAo(d_TMI@UzzD}trj?q`BJx6AH)b1P2Jy#*%r5j ziB82<7*)w++@ldIF`WDoT%-#@kJ)85OFwl}Ha-F8+6ifz}rX9B=jnXH8&j zWF2_S1t-2>v?(p2?HVWbo3EIOSq{4U;>x5y7+@ltV{G_;^sX2oN5=zP6mm4q7;?Hhx-{;?9M;{Z6VXR;hovk zFu|ujmrZY@UVjbSYmyaPALO0C~GH{YqVf9wjW%%fw;=_ zr+oDf?Yo_C2o?qEeH9j=n4A17Mah8572Kbp)L(tyma-swcUYLZ-&9O!<}0~l`@#=<0+ioG`!9v249tZQ;Hh<3M+Pi$a|LMBF zCrwgk!uT#(KiA?)?c>ig%$1KXc^mQ&Nyo18tn{^&jO>Xkly|{f6C>-G%v&h4?3X%S zu<}2md%gfauuCoIl__pYd zWxtpw(7Bj!GABmR(iL4w@Q0S^wdm2NZD>Zj(EgGYmi;PGMNiBT88Y?~7V<9su*gyN z&CsOwg-;#FG$&s2&H3#X^-d2@fAAGPZSF7A%)@+Dh0KX68__=1`;(SLxHVIyj(y0; z{fYST*k=Z6ONU>7+&H=!jmOxiUR73TNNhZeH~%@!mj9i^>CL0}?<%h7f0?i><2=Z; z%-8x-lkOBQ@tamWIf4-JqvCY|982J}FVn9_$z)NVPr36?^F@tMhVkhF#M~0gEqRf| zmDN@)*p>B2t44%O|Iu+0-sgqK!gPVUrOd|+F(U{n%GMy6);-c`skGx(LQEdtj7L?b zdrj0*YlcH2Yo3caE<+#U7e?MnMf=A~ts&NA1BNV4=GBKBuTo{&y*!dj+VZ~&WZJzx zdXu!}an&Nz?$wdpgRRWAJcmQw?yt9;OVkGq%;UMPstF}>R~}LkI8yCf%b!#}h`Dlo zbXhD?;0aavcYJ~?&G;(qi9}TD$rl2oY(u#%ms>hRu3Gr&ES-N$sw2~dJ3teCumM~i zHTeT|hVT*8ooKuf97&Fn2wdRI(8?g>3g>|&n`?0BbX46aJUT_0Q z=j8*3UNqO;@`F=Ay0idz79@!T!`mV0AQb)%S{OUMY&x}xFfinS!EkV;@y}7+AYF4y zzNxy1RhK?qowP0P;VBiDd!a;NRqaM?`r8y(h5*s^10? za)giC1p{vk4zB_`?Tq|QTca`6^O--`b!t6(7gfIvBL@{u2QGg*Jv~0m7J5VQI5#h- z0N(m?kxx)CKfnQRm`C#K9VElB*04piEy;c}{=MBhboMIxZxioOQ4VM?>nN|zK5L(f zzNzx|opKA$N3*qlgx=dS{GWs@3uOE8$qN+wHmqM}h)!zBTkkFeEy@s`T$y+k zBz&54bn7IN92u*SVuXCTXh3oD9DndgjOq_P^2wr5?vdah?YH(#BQdQ=(jA}Zo5O?( zfArfIn#%DPEOuYqLHaIXojk>#IO6&+q`-F+X}M@maZ-wZIe~*{X~Fg=qkp3WY~W5WOG^Zd_)*du$)(=}zLynw|^JoZ%nTI~kTlP(XBWA0pb zIg%y6gRi3M9cUb_obKsfiIjS~^O%>4XC*n9i%(T>Y1Z5LxwYo~ffr`a^s_djL#IRD zx8aRQKbPpgebC`WQfU-x@lhh~0g`{#Ot3NQHL3rr1PPN=WgGfxvy3@T=O*PTQr=@M zZ?@3ml#Pnp8Dp%=H<AJ#5;oQXaOkHDFvy!pCv^)v@kOW<2uLZ4bMuFr@j(du&8J|dp+NUj*#VXx* zdfw6kE>{V{4j~5M_LE#d$(xM4w)WnUtF9stFLhDVnua^V{riSDceh-bwAUD z-h!-$x@(jlLq2op0GgY~$dUG{dKQmUV~ zCS%%_9g0g({3Ergu;mYuLh1=ddRo(_}p-83q9oM~iN(=V) zYjw#Xdb-0TwE`u_jz{IM6%3!LJuy$ZL8Q~M{h3$dD^GSE=d{Q)o1b~5Y00aWBHFZ4 zRj-`Ok}J4eK+=`*Mun%97GeXxs?^OBh`;#BId-MQ6|Ck&N!>lrSNon8xU272x>=jT zh2)%=tnhGA(pax2lLU~&=0nIRnJIYpXZS4vKHth&hPZ5z;!ks-#16e5mCd_VLLZIV zR*yvphz&)SetHv{AAcM@`z|WjSn)~Si|-O17JDj(BBgpRzo!aB$ar!p6%`~k^Gl($p9U>=xgIdeKL=W*!SW~b_11OfB2ZLf4yW-P+HAz$U3K8N?dZ{ zg}73)^*dg{o%=lmTBn%x{+5(Mo1-)tpAw&GYsF9$t$U}Br5WvUAa7=tJ8bmTT&7FV z2qNm}PaOI}oo2SdxaYH-Qf};?QZz!bcSp}6J~({{$9Z1wD```+MbQr<8HWHPXGy6? z_Y;3?_JoRBJH8#4?1Yi%OX#_&JLgPXcYGz;m8G8gK{d_2(VcH5WOJyv-K4@a9(!xH z!Q{!0((kZFi=yL~2RlfM4Su<{pB6>L@wCKakF}Y|*1d%0D3%3s#IdTLn~Dx%@x4$Y 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 delta 18423 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 { +public abstract class Abstract3LegSymbol extends AbstractComponent { private static final long serialVersionUID = 1L; @@ -41,7 +42,7 @@ public abstract class AbstractTransistorSymbol extends AbstractComponent protected Display display = Display.NAME; transient protected Shape[] body; - public AbstractTransistorSymbol() { + public Abstract3LegSymbol() { super(); updateControlPoints(); } diff --git a/diylc/diylc-library/src/org/diylc/components/passive/PotentiometerSymbol.java b/diylc/diylc-library/src/org/diylc/components/passive/PotentiometerSymbol.java index 5bd1b7ef..db4ec9f6 100644 --- a/diylc/diylc-library/src/org/diylc/components/passive/PotentiometerSymbol.java +++ b/diylc/diylc-library/src/org/diylc/components/passive/PotentiometerSymbol.java @@ -11,14 +11,14 @@ import java.awt.geom.Rectangle2D; import org.diylc.core.IDIYComponent; import org.diylc.core.annotations.ComponentDescriptor; import org.diylc.core.annotations.KeywordPolicy; -import org.diylc.components.semiconductors.AbstractTransistorSymbol; +import org.diylc.components.Abstract3LegSymbol; import org.diylc.components.semiconductors.SymbolFlipping; @ComponentDescriptor(name = "Potentiometer Symbol", author = "MCbx", category = "Schematics", - instanceNamePrefix = " VR", description = "Potentiometer symbol", stretchable = false, + instanceNamePrefix = "VR", description = "Potentiometer symbol", stretchable = false, zOrder = IDIYComponent.COMPONENT, rotatable = true, keywordPolicy = KeywordPolicy.SHOW_TAG, keywordTag = "Schematic") -public class PotentiometerSymbol extends AbstractTransistorSymbol { +public class PotentiometerSymbol extends Abstract3LegSymbol { private static final long serialVersionUID = 1L; diff --git a/diylc/diylc-library/src/org/diylc/components/passive/TransformerCoil.java b/diylc/diylc-library/src/org/diylc/components/passive/TransformerCoil.java new file mode 100644 index 00000000..9acb8e3a --- /dev/null +++ b/diylc/diylc-library/src/org/diylc/components/passive/TransformerCoil.java @@ -0,0 +1,263 @@ +package org.diylc.components.passive; + +import java.awt.Color; +import java.awt.Graphics2D; +import java.awt.Point; +import java.awt.Shape; +import java.awt.geom.GeneralPath; + +import org.diylc.appframework.miscutils.ConfigurationManager; +import org.diylc.common.IPlugInPort; +import org.diylc.common.ObjectCache; +import org.diylc.common.Orientation; +import org.diylc.components.AbstractComponent; +import org.diylc.core.ComponentState; +import org.diylc.core.IDIYComponent; +import org.diylc.core.IDrawingObserver; +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.EditableProperty; +import org.diylc.core.annotations.KeywordPolicy; +import org.diylc.core.measures.Size; +import org.diylc.core.measures.SizeUnit; +import org.diylc.utils.Constants; + +@ComponentDescriptor(name = "Transformer Coil Symbol", author = "Branislav Stojkovic", category = "Schematics", + instanceNamePrefix = "L", description = "Transformer coil symbol. Use multiple instances together with \"Transformer Core Symbol\"
to draw transformer schematics.", stretchable = false, + zOrder = IDIYComponent.COMPONENT, rotatable = true, keywordPolicy = KeywordPolicy.SHOW_TAG, + keywordTag = "Schematic") +public class TransformerCoil extends AbstractComponent { + + private static final long serialVersionUID = 1L; + + public static Size TAP_SPACING = new Size(0.2d, SizeUnit.in); + public static Size LEAD_SPACING = new Size(0.1d, SizeUnit.in); + public static Color COLOR = Color.blue; + public static Color LEAD_COLOR = Color.black; + + private int tapCount = 0; + private Point[] controlPoints = new Point[] {new Point(0, 0), new Point(0, 0), new Point(0, 0), new Point(0, 0), + new Point(0, 0), new Point(0, 0), new Point(0, 0), new Point(0, 0), new Point(0, 0), new Point(0, 0)}; + private Orientation orientation = Orientation.DEFAULT; + private org.diylc.core.measures.Voltage voltage = null; + protected Color color = COLOR; + + private Shape[] body = null; + + public TransformerCoil() { + super(); + updateControlPoints(); + } + + private void updateControlPoints() { + double spacing = TAP_SPACING.convertToPixels(); + int fx = 1; + int fy = 1; + switch (this.orientation) { + case DEFAULT: + fx = 0; + break; + case _90: + fx = -1; + fy = 0; + break; + case _180: + fx = 0; + fy = -1; + break; + case _270: + fy = 0; + break; + default: + break; + } + + if (this.tapCount == 0) { + fx *= 2; + fy *= 2; + } + + Point refPoint = this.controlPoints[0]; + for (int i = 1; i < controlPoints.length; i++) { + this.controlPoints[i].setLocation(refPoint.x + i * fx * spacing, refPoint.y + i * fy * spacing); + } + } + + @EditableProperty + @Override + public org.diylc.core.measures.Voltage getValue() { + return voltage; + } + + @Override + public void setValue(org.diylc.core.measures.Voltage value) { + this.voltage = value; + } + + @EditableProperty(name = "Number of Taps", defaultable = true) + public int getTapCount() { + return tapCount; + } + + public void setTapCount(int tapCount) { + this.tapCount = tapCount; + updateControlPoints(); + this.body = null; + } + + @EditableProperty(defaultable = true) + public Orientation getOrientation() { + return orientation; + } + + public void setOrientation(Orientation orientation) { + this.orientation = orientation; + updateControlPoints(); + this.body = null; + } + + @Override + public int getControlPointCount() { + return this.tapCount + 2; + } + + @Override + public Point getControlPoint(int index) { + return this.controlPoints[index]; + } + + @Override + public void setControlPoint(Point point, int index) { + this.controlPoints[index].setLocation(point); + this.body = null; + } + + @Override + public boolean isControlPointSticky(int index) { + return true; + } + + @Override + public VisibilityPolicy getControlPointVisibilityPolicy(int index) { + return VisibilityPolicy.WHEN_SELECTED; + } + + @EditableProperty + public Color getColor() { + return color; + } + + public void setColor(Color color) { + this.color = color; + } + + @Override + public void draw(Graphics2D g2d, ComponentState componentState, boolean outlineMode, Project project, + IDrawingObserver drawingObserver) { + if (checkPointsClipped(g2d.getClip())) { + return; + } + + Shape[] body = getBody(); + + Color finalColor; + if (componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING) { + finalColor = SELECTION_COLOR; + } else if (outlineMode) { + Theme theme = + (Theme) ConfigurationManager.getInstance().readObject(IPlugInPort.THEME_KEY, Constants.DEFAULT_THEME); + finalColor = theme.getOutlineColor(); + } else { + finalColor = color; + } + + g2d.setColor(LEAD_COLOR); + g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1)); + g2d.draw(body[0]); + + g2d.setColor(finalColor); +// g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(2)); + g2d.draw(body[1]); + } + + @Override + public void drawIcon(Graphics2D g2d, int width, int height) { + g2d.rotate(-Math.PI / 4, width / 2, height / 2); + g2d.setColor(LEAD_COLOR); + g2d.drawLine(width / 8, height / 2, width / 8, height * 6 / 8); + g2d.drawLine(width * 7 / 8, height / 2, width * 7 / 8, height * 6 / 8); + g2d.setColor(COLOR); + + GeneralPath polyline = new GeneralPath(); + polyline.moveTo(width / 8, height / 2); + polyline.curveTo(width / 8, height / 4, width * 3 / 8, height / 4, width * 3 / 8, height / 2); + polyline.curveTo(width * 3 / 8, height / 4, width * 5 / 8, height / 4, width * 5 / 8, height / 2); + polyline.curveTo(width * 5 / 8, height / 4, width * 7 / 8, height / 4, width * 7 / 8, height / 2); + + g2d.draw(polyline); + } + + public Shape[] getBody() { + if (body == null) { + double spacing = LEAD_SPACING.convertToPixels(); + int fx = 1; + int fy = 1; + switch (this.orientation) { + case DEFAULT: + fy = 0; + break; + case _90: + fx = 0; + break; + case _180: + fx = -1; + fy = 0; + break; + case _270: + fx = 0; + fy = -1; + break; + default: + break; + } + + GeneralPath leads = new GeneralPath(); + GeneralPath coil = new GeneralPath(); + + int coilsPerTap = 3; + + for (int i = 0; i < tapCount + 2; i++) { + leads.moveTo(this.controlPoints[i].x, this.controlPoints[i].y); + leads.lineTo(this.controlPoints[i].x + fx * spacing, this.controlPoints[i].y + fy * spacing); + + int dx = this.controlPoints[i + 1].x - this.controlPoints[i].x; + int dy = this.controlPoints[i + 1].y - this.controlPoints[i].y; + // skip the last tap + if (i < tapCount + 1) { + double x1 = this.controlPoints[i].x + fx * spacing * 2; + double y1 = this.controlPoints[i].y + fy * spacing * 2; + double x2 = this.controlPoints[i + 1].x + fx * spacing * 2; + double y2 = this.controlPoints[i + 1].y + fy * spacing * 2; + double dxa = x2 - x1; + double dya = y2 - y1; + + coil.moveTo(this.controlPoints[i].x + fx * spacing, this.controlPoints[i].y + fy * spacing); + + for (int j = 0; j < coilsPerTap; j++) { + coil.curveTo(x1 + dxa / coilsPerTap * j, y1 + dya / coilsPerTap * j, x1 + dxa / coilsPerTap * (j + 1), y1 + + dya / coilsPerTap * (j + 1), this.controlPoints[i].x + fx * spacing + dx / coilsPerTap * (j + 1), + this.controlPoints[i].y + fy * spacing + dy / coilsPerTap * (j + 1)); + } + } + } + body = new Shape[2]; + + body[0] = leads; + body[1] = coil; + + } + return body; + } +} diff --git a/diylc/diylc-library/src/org/diylc/components/passive/TransformerCore.java b/diylc/diylc-library/src/org/diylc/components/passive/TransformerCore.java new file mode 100644 index 00000000..38e77f38 --- /dev/null +++ b/diylc/diylc-library/src/org/diylc/components/passive/TransformerCore.java @@ -0,0 +1,141 @@ +package org.diylc.components.passive; + +import java.awt.Color; +import java.awt.Graphics2D; +import java.awt.Point; +import java.awt.geom.GeneralPath; + +import org.diylc.appframework.miscutils.ConfigurationManager; +import org.diylc.common.IPlugInPort; +import org.diylc.common.ObjectCache; +import org.diylc.components.AbstractComponent; +import org.diylc.core.ComponentState; +import org.diylc.core.CreationMethod; +import org.diylc.core.IDIYComponent; +import org.diylc.core.IDrawingObserver; +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.EditableProperty; +import org.diylc.core.annotations.KeywordPolicy; +import org.diylc.core.measures.Size; +import org.diylc.core.measures.SizeUnit; +import org.diylc.utils.Constants; + +@ComponentDescriptor( + name = "Transformer Core Symbol", + author = "Branislav Stojkovic", + category = "Schematics", + instanceNamePrefix = "T", + description = "Transformer core symbol. Use multiple instances together with \"Transformer Coil Symbol\"
to draw transformer schematics.", + stretchable = false, zOrder = IDIYComponent.COMPONENT, rotatable = true, keywordPolicy = KeywordPolicy.SHOW_TAG, + creationMethod = CreationMethod.POINT_BY_POINT, keywordTag = "Schematic") +public class TransformerCore extends AbstractComponent { + + private static final long serialVersionUID = 1L; + + public static Size SPACING = new Size(0.03d, SizeUnit.in); + public static Color COLOR = Color.blue; + + private Point[] controlPoints = new Point[] {new Point(0, 0), new Point(0, 0)}; + + protected Color color = COLOR; + + public TransformerCore() { + super(); + } + + @Override + public int getControlPointCount() { + return 2; + } + + @Override + public Point getControlPoint(int index) { + return this.controlPoints[index]; + } + + @Override + public void setControlPoint(Point point, int index) { + this.controlPoints[index].setLocation(point); + } + + @Override + public boolean isControlPointSticky(int index) { + return false; + } + + @Override + public VisibilityPolicy getControlPointVisibilityPolicy(int index) { + return VisibilityPolicy.WHEN_SELECTED; + } + + @EditableProperty + public Color getColor() { + return color; + } + + public void setColor(Color color) { + this.color = color; + } + + @Override + public void draw(Graphics2D g2d, ComponentState componentState, boolean outlineMode, Project project, + IDrawingObserver drawingObserver) { + if (checkPointsClipped(g2d.getClip())) { + return; + } + + Color finalColor; + if (componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING) { + finalColor = SELECTION_COLOR; + } else if (outlineMode) { + Theme theme = + (Theme) ConfigurationManager.getInstance().readObject(IPlugInPort.THEME_KEY, Constants.DEFAULT_THEME); + finalColor = theme.getOutlineColor(); + } else { + finalColor = color; + } + + double theta = + Math.atan2(this.controlPoints[1].y - this.controlPoints[0].y, this.controlPoints[1].x - this.controlPoints[0].x) + Math.PI / 2; + double spacing = SPACING.convertToPixels(); + // System.out.println(theta); + + g2d.setColor(finalColor); + g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1)); + + g2d.translate(spacing * Math.cos(theta) / 2, spacing * Math.sin(theta) / 2); + g2d.drawLine(this.controlPoints[0].x, this.controlPoints[0].y, this.controlPoints[1].x, this.controlPoints[1].y); + g2d.translate(-spacing * Math.cos(theta), -spacing * Math.sin(theta)); + g2d.drawLine(this.controlPoints[0].x, this.controlPoints[0].y, this.controlPoints[1].x, this.controlPoints[1].y); + } + + @Override + public void drawIcon(Graphics2D g2d, int width, int height) { + g2d.rotate(-Math.PI / 4, width / 2, height / 2); + g2d.setColor(COLOR); + + GeneralPath polyline = new GeneralPath(); + polyline.moveTo(width / 8, height / 2); + polyline.curveTo(width / 8, height / 4, width * 3 / 8, height / 4, width * 3 / 8, height / 2); + polyline.curveTo(width * 3 / 8, height / 4, width * 5 / 8, height / 4, width * 5 / 8, height / 2); + polyline.curveTo(width * 5 / 8, height / 4, width * 7 / 8, height / 4, width * 7 / 8, height / 2); + + g2d.draw(polyline); + } + + @Override + public Void getValue() { + // TODO Auto-generated method stub + return null; + } + + + @Override + public void setValue(Void value) { + // TODO Auto-generated method stub + + } +} diff --git a/diylc/diylc-library/src/org/diylc/components/semiconductors/BJTSymbol.java b/diylc/diylc-library/src/org/diylc/components/semiconductors/BJTSymbol.java index 130b17af..910d743b 100644 --- a/diylc/diylc-library/src/org/diylc/components/semiconductors/BJTSymbol.java +++ b/diylc/diylc-library/src/org/diylc/components/semiconductors/BJTSymbol.java @@ -8,6 +8,7 @@ import java.awt.geom.Area; import java.awt.geom.GeneralPath; import org.diylc.common.ObjectCache; +import org.diylc.components.Abstract3LegSymbol; import org.diylc.core.IDIYComponent; import org.diylc.core.annotations.ComponentDescriptor; import org.diylc.core.annotations.EditableProperty; @@ -17,7 +18,7 @@ import org.diylc.core.annotations.KeywordPolicy; instanceNamePrefix = "Q", description = "Bipolar junction transistor schematic symbol", stretchable = false, zOrder = IDIYComponent.COMPONENT, rotatable = true, keywordPolicy = KeywordPolicy.SHOW_TAG_AND_VALUE, keywordTag = "Schematic") -public class BJTSymbol extends AbstractTransistorSymbol { +public class BJTSymbol extends Abstract3LegSymbol { private static final long serialVersionUID = 1L; diff --git a/diylc/diylc-library/src/org/diylc/components/semiconductors/JFETSymbol.java b/diylc/diylc-library/src/org/diylc/components/semiconductors/JFETSymbol.java index 553945c0..5914b2e8 100644 --- a/diylc/diylc-library/src/org/diylc/components/semiconductors/JFETSymbol.java +++ b/diylc/diylc-library/src/org/diylc/components/semiconductors/JFETSymbol.java @@ -6,6 +6,7 @@ import java.awt.Shape; import java.awt.geom.GeneralPath; import org.diylc.common.ObjectCache; +import org.diylc.components.Abstract3LegSymbol; import org.diylc.core.IDIYComponent; import org.diylc.core.annotations.ComponentDescriptor; import org.diylc.core.annotations.EditableProperty; @@ -15,7 +16,7 @@ import org.diylc.core.annotations.KeywordPolicy; instanceNamePrefix = "Q", description = "JFET transistor schematic symbol", stretchable = false, zOrder = IDIYComponent.COMPONENT, rotatable = true, keywordPolicy = KeywordPolicy.SHOW_TAG_AND_VALUE, keywordTag = "Schematic") -public class JFETSymbol extends AbstractTransistorSymbol { +public class JFETSymbol extends Abstract3LegSymbol { private static final long serialVersionUID = 1L; diff --git a/diylc/diylc-library/src/org/diylc/components/semiconductors/MOSFETSymbol.java b/diylc/diylc-library/src/org/diylc/components/semiconductors/MOSFETSymbol.java index 1fa51b2f..ddac6429 100644 --- a/diylc/diylc-library/src/org/diylc/components/semiconductors/MOSFETSymbol.java +++ b/diylc/diylc-library/src/org/diylc/components/semiconductors/MOSFETSymbol.java @@ -6,6 +6,7 @@ import java.awt.Shape; import java.awt.geom.GeneralPath; import org.diylc.common.ObjectCache; +import org.diylc.components.Abstract3LegSymbol; import org.diylc.core.IDIYComponent; import org.diylc.core.annotations.ComponentDescriptor; import org.diylc.core.annotations.EditableProperty; @@ -15,7 +16,7 @@ import org.diylc.core.annotations.KeywordPolicy; instanceNamePrefix = "Q", description = "MOSFET transistor schematic symbol", stretchable = false, zOrder = IDIYComponent.COMPONENT, rotatable = true, keywordPolicy = KeywordPolicy.SHOW_TAG_AND_VALUE, keywordTag = "Schematic") -public class MOSFETSymbol extends AbstractTransistorSymbol { +public class MOSFETSymbol extends Abstract3LegSymbol { private static final long serialVersionUID = 1L; diff --git a/diylc/diylc-swing/lib/diylc-core.jar b/diylc/diylc-swing/lib/diylc-core.jar index ac75d55cae2c232a63363c97487ad3e73d58e639..b879c9a57358b02880876ec73d69b8e65656ed7f 100644 GIT binary patch delta 20270 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%0D3%3s#IdTLn~Dx%@x4$Y z-s30gxo7sP+;Yd{NGe@knaON})atX*5+nI?M56rbF)r0#%ip!4<%>SSK0PrQk&4bU z-5CE)(~-efOk-XulX+hwd%9O|^7BA!1%CDpPonVU*JIZ;!<-~ zs4iLMaoAQlZ|qciJH8c_5o*HgKjh>h;#{u437@I!FGu{^=yR5~rnau*E@vf^w3stW zc|88>8NC)v2QgGeXYqwCG=7iF5yvvaSW>s+HO9c+MWitQN8;@b}yrzRG3+r z5S@&TcU0PzoJy7)d`5nJmn|9VlnK7sW~$c57%e)%aC$!R($i1eVJe=ArmDzoO3^RF z_7B-=%-rZr?aM9`su_|231wTVHd{VYgZu7T0!uv2@UE=phojRJ3tTn)51hp;a%nVe ztlHPUE_F|fnTQNY^(G89D}?lDZqk=by1Wl7xFGtupC4avG;Rv1tF7;Z>rUgKRVrUY zZS|^D$2LkO<4eB*(^wC`0znU_vESUCBx!2Ag~=(Iu{o+Q@@?)L@xi4uvkJbRg{5Ua z?6VUK@4}pWtwYxEelTv!$+CX?*?&5|)s{QLl~5Ml?Ph=5DP4#HuWzE&b%|O0f!Jn+ zkt8|hkDnVw8ZOtCkdnzgoj2~ty%VWc$Pf-ypNpJddiZ+R@L8$QdyYfn^?XhdduCo z%J)KcF**0qyDgqDWU7!Hu6~EtI|1v-wAKKveX*42PV1ES4s&md$tMLC8p;DYUcHNb z<1|rKI3RKJMxw`uQ28e5pZ6Up0>WaGZ5b*j@vg(J(zs@XS!5cSJy#36PG^2(s8+6V zK>neEa>z5!=iTo0yZHG$gQPa~Y%hPL%NyW_VAn>9zIN&OmBxb9cwsd?7$O(aCHjV( zXE~6DZM6ZW;~rNq2kJacoQa4B8gW=YL%M$ z;eFdW9vy+z^~%A@;?}@rP1fL$$=O}M54%BpZ&WV@G#yvRIxv3!W7Z-jK$~?MIO4Qa zxLEy3xG(gNnvCH0K;){usgA%yQZA7Z)wm*ijSMPwx~k2M>X(zvHzqC9{07~4FiL`o zhH>8^iQjmnf5WsfjO4)x_Dt!;4G{cE(&iG~yrLA^+K0T2{E_kg>+-^Hj)N-Swm9rv zCGW6go0C~i5D@q6SyfN1df6B>~KQDvJ|I3mS#L6VH`plTn9J>L&S&MCS|c@ zhF|=mO=I2Ut{f`M(jk#gd{9o2XTPM1pl#S_U!_`f>ubM+AA&jLU{~?le3A9VaGm&L z&U+sNLc2bF5iH~*P{jEdW!0N#_ekCKMU>TWBI^KFhn~KJ1ex?~ zM`)%|^oK5|7tsyzNE?r+hOA6$hu2H5r5#?o6i3i1P5K73mhjw!+1!yBo_su4C1BaD z;KES5u<~-tcSia>{xs>!+MxH-(jG#K0`1axlO~3Tt4%n_5wUx#OO3^ioW}&#cL?WW z=&gkc1nP(0EOBWmQ6?ju0-f;C@ zzPx5AH~Vq5CTx42x9n3;wP&D2Bb}K~kdvO%tGXc@g}d2z^6uPs(P-DE|8`@jDj-6& zZsbbfikv*raYp{)UYPeYi(Mnk2i&3WPfjf(!zj{K@#HyImW{h*W6T*}Et2c>1pKU* zdGO9)zwxBGW>IMkN&S=;z_v6iy1+=6oj}MbFMX~2_=Miu_3`$`+M!K{mr%$wuguo{ zL-m=e&^NC}=Z8q1^)HzlSP+E|FNM#)zzSR&2_Uj3tpz@C?ftyD*^;pCTF70sIFnVv zbMN<>p^yHWz2?@dRhhd??QfFr+2(O2I>+>7BW+S|QK zbXRGLJ|^Z3QB^zrmmpjRcMZu*nP@3q#|M~mude*ypErth8Yf`+3{RrUXn0yq0OZNM z3i7Yte3@IkR*I+YQFAgg%WLk4AWlg&C0Mg-#!uQ@l_Dy|V+>brm-_T90?~<=XS%!b z&bK`OipI^dJHxifj@l{7-`?=Eklbc*SfJif4Jqi#^!9 zdifxt!^3b_s(ri)SZwLCwz7`MyA}~y^HN;tfB+B_#I_W&LsC?lkV>alQBx}Z?0hxo zC6)MDSU!Qebkf874tat=>;3y3pMN;~_!zd^xAD`$i=kFMyXN59o`=rUSIk0gK8GI# zBH^k!S#iQ9Sr+xp;@D0d-tor~rHQg;wk?uNEo$U1nv<-$IK+D%UA|6E`L;}sBJf78 z6njhb_RoEfs_)XsM=QxU$+oX(xDY*eKN?K3Sd=)vqNEa`e5++=fH+4XV6q2iX5<&^ z&JfFQR?%18CZ8^vHZ4Rg1iq#Ezyk{_&K znKsAvt@+6!KaJ+DD(MB%FBHjm4xM73d+Su^9S@(OKt1g0=ED)>s26T}yAfm4@S2``79b=9lk2-HdJI^Ax#D)cm)+6%9RB;9`Sz%`24 zXb|oU>FS5!HS#E(FA?}o93@rLA}}FbGXo+Fk|bFWU8oO^>P|Tk=ywLAJcuCZje?dS z!T^%8MG;p}z5pj;2+6bWy@1Q&2!%6VAWR(k^a>~yM_fW_L?jS&z#nl0H|js0O9)w% z;C2b2h!RRKA*4~l`Xz)qN&ri!pac+12c$?KSWy4fNN}!fRdu1(&kU?o4Ng~Wp!mcF34kZ{$p@niOggHusD~&Kf2{zJb!V+nOE=qGK zjnF{}sxk;|l<-gnO}HV0FhXhMWYNVR$f7mNvS=P5IkaO)IdrKhIfMqP6pK6}03`tO z2vd}>Bah}$R6v(X{wpjhptD335!(Oyatnx8M5r^Lz0jMSq-XjB_N7K}8=V_`k^A?r zFcPku+D=FgfakT@P^Ng45Oi=}wKHYvFEuK_R|$dYB>?g)V^$;ei7hkGtc0LPp=ZvN z*4lrSH~_OUf(&JmT(LW?73{&B;Clw~zvjSeVdMvM5H1MZRz^^ukndguJje%qD*}C! zJBR#Yd4^1#up;F*)Pcb%5NF>OqP}3zsv!}n4FkUiprydT5It9D#Re=S4$P|}2vGFV z{Y7|=q!<|5oc~6?asiP{K%NSM1%;gPy?6KwbY%U)zmfJKDCD2N$gTka>sGL0TG$vE zlIN^j+(03(s3N#foH=7!w(r3(`~rC|pF?^^oFP*+k+djZQQ_QH1;d$s8^BXTh@%ur zYM`Pl61bv<5JB-xDcA9LfqXomb+&VSvv+~Azo@Za2ihYbN()4>oWzkU^o&fBNwkbJmmg zl2IRm00>QVr~ALh0~!8@1ff5&QX8_FfN4W?uXxb>py3HEHM^6DiEpS>qn+;!{ z73C;SefXLISk*#spz8L&!-!y$o-6A1>n@@@-Jh6mo^xJT@*Uiu#^mF&_+ja zJUZBj8f*=T4)XL+e+ap%wl=hg1ILidNacNLdru zW~rc6sdF59)qs)?dL~ZL0Ufrl1sn{)?||QwQ~t02kY!ZT>4NP&2p%Um-*Ci@D0oUe zKESPuAVamioG!>y@CKbh3B>85E8a*z%a8-QK?zcwA6@BfC^Rsvi=aVqY@TrhcKoBo z26*%k7g0?Un3LXR1~PPk&YYj!dAiYfJp>+bR}Vc*jxI6D6oVDN0(O4>bCvIU`wyNO zMQsuN?U^A+4S>{a=b+W^ASjPMf(iwVQ$FQ(23g0zMm#?Us0~BV8~O-36m+24f&UR$ z?K>d+{D|2ZMLVF6U_@1W7c2uG8vjT8f2x6B9cb+iGJFLMp07sj$N%9|87J^i0Y}k2 zHUR0|=b-E<1H?th$eH%r5~Sq<8yn@N*^$1KD_Ca_FtMJid*jL(6q-g|KC{IbgAsZT zM(BJKUi}PI7@{Z0l6(_aPtezS(AV?*4#A90u&cVbrNpCxk$`G1{Tlvn=p*HI((|lt|#;BkDEX?)zcT{Mqqr z)^jer#6cBf`%jS?`t;CMFmy{`qB>Wk2_IF297r`mkg}ZJ!Te-cC1V7s&(;f?bJ$5@ z7(j;yqXiaB(9Z6dfX?!f!2n+Z7&E|cidM^*f;Iol3Rs#VI8n_Wd8R;e0(qbUW#n^R zu1_CmpbJdrR|NuI7+}N>qsuTulM$PNHV6e!T1r6K3_Y}DYemE2!RkbViSeA9cp^ZX z83G*pX6W(KkI4El2O66GPmM;z&!Ai=AHSU0S-Fg|Lk`fHqh}Ohb5QLs4XMR~0tJ1& zul>74#;=AL0-zr$V4^$cOQReNSki%!1107NN|c$_Gro8ww0hSZ`Y{Cn-vU%$Rzs^F zD8O+3b0;Rrt=?h2fZ=hxgmO~BUzf%?@2An%OGP6tIq2fR^(;Q$L3f1B$pFJB*> zcd7~I30b1^Iw|7wFLXsRS=7!@Ua5>%Qpug(F!4gQnZ~Z_ML$_E5s$# zIQ-{m7|3?M11Y!xqSol!3Oj4im80u0K+Y9L_n&~W$VBvMfaR6{;}N?L&|!`47q{I& z(*^zjt_^|*RS_-vJf&r@$UKDfl^ZduWS&ssOt2e zsTXgd)h9LxY7{fKssn{D$a)=2=lgVdBnnFjXxpNfBE@@(v`t`7s0Gt`tZg)K+ZMr( zGE`;@8ZwDR6{Z8$Z4s#FU*PmiotuDClLNwb2nv+_?Qa?(d!X$tFwvju$9wl-fI}i! zvrs$qO#aXgq@YhhscC^eJ9H~wl}#j10gtiW2h;g>k;y<|F9HNtphszd`3gvZS%PL3 zDum$z)>jay^KO9GS>Dw1|K(ADAE=yrG6CApAe}G&2f+hQuAn2SCU?}21J>f~OxJlg z#>&tIH0{yBu(t;rn5+u8X^(!C_}@`H3=F1oVMwY4NWh;z0cPyc%K_j8)L?^8M{qDP zpMwtdoIwRqt)O%jv_L)rmG$Wd>xsOI?&(QqSySU@SrkC)RdnNC#_#643%VWwrt`EO zQxH^W2!;g^JD{KJ-s;Lc|2xB-uP)yVgtq{pC||rCz^EzC!+?bu7z6O!0o_qs&eT~; zC^aka#{umgp(E(t*A;-*5&b0bzcYgWUWC2ZfdEGY>gQvC=U_3!`%M@?vkGGeHXYGy zzs}S@c3^<)2Dn^EI-&baayhQ+F4&DX!Nhhhh^)IX;My0EBJMAi+>bHM@2v@MI??pi58rTKPT+zn=cjWQk^UEt52>R0%L5D`yzETcv~6;rt>3Af(5GCeL6T1uy_sKalW3h9I--KOm662 zPxyZ5YbaQ?fd5qQDJKN|#SF*)&%A+}(9L)uM7bM!KI=Q1=C=eO?N87I%6$@dP#Y)$ zX%*cOR4A?WnRZzm(#E@^8}Y@NR_!vR%@Kj){b#{Zn_Hl=2c5P4kHhic3DL8D!sdZC zA?E?^!bx675CL|s2yDR113`_79Ho(R$qCq(zk|28=Ob6C1X1A1f|2`YY#A8X7fyqC z0&u*X@7)_WNx@S-BIgF*k`9DdQ2)PFiJlhna#HFclgD0YuglKzuUPz( z4?TeKDc*N{3$mYCI=?%%=y3*x_8=p?!LkU?GX)pm;tHn(e7w=q4M_oD+Y1)n0+TG5 z{{9t43VA_zULW+{pP>)PV(1NdQ04|F2YyMRSq3GyMB~7UN`Vc=_Ll;@7DjUT0W7`< zDqzhA{n(VgZe4;6!nnY`aDG?ktN$5P1{Do^U(l9P(3yf8DD*`?oHU+kjY1&pDX2w7 z+R)<;jxor1?>~%gVGz{X4^80f2NGc3gtRq(weQZfeGz9`E`Zn{JrDhJ+6(Nl=bs;e zNI=OSy%ind50>RiJ}Y|>NR0=}(8Gw?GA!H+7u zmGL1X9dG7mUWSQ_9}FuIjl zjuFq(!MGfQ+~=pJW`1BH82SY{fH(vkrAa~vV2KCpBL8emWewc>N(u(_I=In$zT0Do t1Ghuao3g=CQ>t9x;Gh7_oS)4sC4tcp1Uu0z#w>=L8U{w46zB!U{{zCZZ7cu) delta 18423 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 diff --git a/diylc/diylc-swing/src/org/diylc/swing/gui/editor/FieldEditorFactory.java b/diylc/diylc-swing/src/org/diylc/swing/gui/editor/FieldEditorFactory.java index 83a78d06..3461a4a5 100644 --- a/diylc/diylc-swing/src/org/diylc/swing/gui/editor/FieldEditorFactory.java +++ b/diylc/diylc-swing/src/org/diylc/swing/gui/editor/FieldEditorFactory.java @@ -9,11 +9,13 @@ import javax.swing.JLabel; import org.apache.log4j.Logger; import org.diylc.common.PropertyWrapper; -import org.diylc.core.annotations.EditableProperty; +import org.diylc.core.annotations.DynamicList; +import org.diylc.core.annotations.MultiLineText; import org.diylc.core.measures.AbstractMeasure; /** - * Based on {@link PropertyWrapper#getType()}, creates an appropriate {@link Component} that can edit that type. + * Based on {@link PropertyWrapper#getType()}, creates an appropriate {@link Component} that can + * edit that type. * * @author Branislav Stojkovic */ @@ -22,13 +24,21 @@ public class FieldEditorFactory { private static final Logger LOG = Logger.getLogger(FieldEditorFactory.class); public static Component createFieldEditor(PropertyWrapper property) { - if (property.getType().equals(String.class) && property.getListItems() != null) { - StringListEditor editor = new StringListEditor(property); - return editor; + try { + if (property.getType().equals(String.class) && property.getGetter().isAnnotationPresent(DynamicList.class)) { + StringListEditor editor = new StringListEditor(property); + return editor; + } + } catch (Exception e) { + LOG.error("Could not determine if a function is annotated with DynamicList", e); } - if (property.getType().equals(String.class) && EditableProperty.MULTI_LINE.equals(property.getAdditionalOptions())) { - MultiLineStringEditor editor = new MultiLineStringEditor(property); - return editor; + try { + if (property.getType().equals(String.class) && property.getGetter().isAnnotationPresent(MultiLineText.class)) { + MultiLineStringEditor editor = new MultiLineStringEditor(property); + return editor; + } + } catch (Exception e) { + LOG.error("Could not determine if a function is annotated with MultiLineText", e); } if (property.getType().equals(String.class)) { StringEditor editor = new StringEditor(property); diff --git a/diylc/diylc-swing/src/org/diylc/swing/gui/editor/IntEditor.java b/diylc/diylc-swing/src/org/diylc/swing/gui/editor/IntEditor.java index 54e6c055..9b3eb506 100644 --- a/diylc/diylc-swing/src/org/diylc/swing/gui/editor/IntEditor.java +++ b/diylc/diylc-swing/src/org/diylc/swing/gui/editor/IntEditor.java @@ -24,7 +24,7 @@ public class IntEditor extends DoubleTextField { public void propertyChange(PropertyChangeEvent evt) { property.setChanged(true); setBackground(oldBg); - property.setValue(((Double) evt.getNewValue()).intValue()); + property.setValue(evt.getNewValue() == null ? null : ((Double) evt.getNewValue()).intValue()); } }); if (!property.isUnique()) { diff --git a/diylc/diylc-swing/src/org/diylc/swing/gui/editor/StringListEditor.java b/diylc/diylc-swing/src/org/diylc/swing/gui/editor/StringListEditor.java index bf618895..5bf1f27d 100644 --- a/diylc/diylc-swing/src/org/diylc/swing/gui/editor/StringListEditor.java +++ b/diylc/diylc-swing/src/org/diylc/swing/gui/editor/StringListEditor.java @@ -3,11 +3,13 @@ package org.diylc.swing.gui.editor; import java.awt.Color; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; +import java.lang.reflect.Method; import javax.swing.DefaultComboBoxModel; import javax.swing.JComboBox; import org.diylc.common.PropertyWrapper; +import org.diylc.core.annotations.DynamicList; import org.diylc.utils.Constants; public class StringListEditor extends JComboBox { @@ -18,9 +20,11 @@ public class StringListEditor extends JComboBox { private final PropertyWrapper property; - public StringListEditor(final PropertyWrapper property) { + public StringListEditor(final PropertyWrapper property) throws Exception { this.property = property; - Object[] values = property.getListItems(); + String listFunctionName = property.getGetter().getAnnotation(DynamicList.class).availableValueFunction(); + Method function = property.getOwnerObject().getClass().getMethod(listFunctionName); + Object[] values = (Object[]) function.invoke(property.getOwnerObject()); setModel(new DefaultComboBoxModel(values)); setSelectedItem(property.getValue()); addItemListener(new ItemListener() {