X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.g3d%2Fsrc%2Forg%2Fsimantics%2Fg3d%2Fproperty%2FMethodComboValueProvider.java;h=0408235f3ca5d81824046748b18f32c5f11231f7;hb=2041d6564531fe794072ddfe345773de1cab60a3;hp=c1e21e071d6ed0d5e7b9c5895b0179fca7377c97;hpb=488e24d71d14e60c7da3272e2428a0b23b57c87c;p=simantics%2F3d.git diff --git a/org.simantics.g3d/src/org/simantics/g3d/property/MethodComboValueProvider.java b/org.simantics.g3d/src/org/simantics/g3d/property/MethodComboValueProvider.java index c1e21e07..0408235f 100644 --- a/org.simantics.g3d/src/org/simantics/g3d/property/MethodComboValueProvider.java +++ b/org.simantics.g3d/src/org/simantics/g3d/property/MethodComboValueProvider.java @@ -12,8 +12,11 @@ package org.simantics.g3d.property; import java.lang.reflect.Method; +import java.util.ArrayList; import java.util.List; +import org.simantics.utils.datastructures.Arrays; + public class MethodComboValueProvider implements ComboValueProvider { Method getter; @@ -28,14 +31,39 @@ public class MethodComboValueProvider implements ComboValueProvider { @Override public Object getValue(Object obj) throws Exception{ - return getter.invoke(obj); + if (getValueType().isEnum()) { + Object value = getter.invoke(obj); + Object[] vs = getValueType().getEnumConstants(); + return (Integer) Arrays.indexOf(vs, value); + } + else { + return getter.invoke(obj); + } } @Override public void setValue(Object obj, Object value) throws Exception { setter.invoke(obj,value); } + @SuppressWarnings("unchecked") public List getValues(Object obj) throws Exception { - return (List)values.invoke(obj); + if (values != null) { + return (List)values.invoke(obj); + } + else if (getValueType().isEnum()) { + Object[] enumConstants = getValueType().getEnumConstants(); + List result = new ArrayList<>(enumConstants.length); + for (Object c : enumConstants) + result.add(c); + return result; + } + else { + throw new IllegalStateException("No value list defined for " + getter.toString()); + } + } + + @Override + public Class getValueType() { + return getter.getReturnType(); } }