/** Only add a new widget row if there are any remaining choices to make */ @Override protected boolean canAddNewRowFor(PropertyDescriptor<?> desc, PropertySource source) { Object[] choices = desc.choices(); Object[] values = (Object[]) source.getProperty(desc); return choices.length > values.length; }
@Override protected Object addValueIn(Control widget, PropertyDescriptor<?> desc, PropertySource source) { int idx = ((Combo) widget).getSelectionIndex(); if (idx < 0) return null; String newValue = ((Combo) widget).getItem(idx); String[] currentValues = (String[]) valueFor(source, desc); String[] newValues = CollectionUtil.addWithoutDuplicates(currentValues, newValue); if (currentValues.length == newValues.length) return null; source.setProperty((EnumeratedMultiProperty<?>) desc, newValues); return newValue; }
@Override protected void update(PropertySource source, PropertyDescriptor<?> desc, List<Object> newValues) { source.setProperty( (EnumeratedMultiProperty<?>) desc, newValues.toArray(new String[newValues.size()])); }