I've made an implementation using converters:
@SuppressWarnings("rawtypes")
public class ENUMITEMSOURCE extends Converter<ArrayListObservable> {
public ENUMITEMSOURCE(IObservable<?>[] dependents) {
super(ArrayListObservable.class, dependents);
}
@SuppressWarnings({ "unchecked" })
@Override
public ArrayListObservable calculateValue(Object... args) throws Exception {
if (args[0] == null)
return null;
if (!Enum.class.isAssignableFrom(args[0].getClass()))
return null;
Enum<?> e = (Enum<?>) args[0];
return new ArrayListObservable(e.getClass(), e.getClass().getEnumConstants());
}
}
public class ENUM extends Converter<Integer> {
public ENUM(IObservable<?>[] dependents) {
super(Integer.class, dependents);
}
@Override
public Integer calculateValue(Object... args) throws Exception {
if (args[0] == null)
return null;
if (!Enum.class.isAssignableFrom(args[0].getClass()))
return null;
Enum<?> e = (Enum<?>) args[0];
return Arrays.asList(e.getClass().getEnumConstants()).indexOf(e);
}
}
and the markup is:
binding:itemSource="ENUMSOURCE(type)"
binding:selectedPosition="ENUM(type)"
where type an observable of my enum type.
what do you think?