@Override public Registration addSelectionListener( MultiSelectionListener<T> listener) { return model.asMultiSelect().addSelectionListener(listener); } }
@Override public Registration addValueChangeListener( ValueChangeListener<Set<T>> listener) { return model.asMultiSelect().addValueChangeListener(listener); }
/** * Returns whether the given item is currently selected. * * @param item * the item to check, not null * @return {@code true} if the item is selected, {@code false} otherwise */ public default boolean isSelected(T item) { return getSelectedItems().contains(item); }
/** * Removes the given items from the set of currently selected items. * <p> * If the none of the items were selected, this is a NO-OP. * <p> * This is a short-hand for {@link #updateSelection(Set, Set)} with nothing * to select. * * @param items * to remove from selection, not {@code null} */ public default void deselect(T... items) { Objects.requireNonNull(items); Stream.of(items).forEach(Objects::requireNonNull); updateSelection(Collections.emptySet(), new LinkedHashSet<>(Arrays.asList(items))); }
@Override public void setRequiredIndicatorVisible(boolean requiredIndicatorVisible) { model.asMultiSelect() .setRequiredIndicatorVisible(requiredIndicatorVisible); }
@Override public void setValue(Set<T> value) { model.asMultiSelect().setValue(value); }
@Override public boolean isRequiredIndicatorVisible() { return model.asMultiSelect().isRequiredIndicatorVisible(); }
@Override public void setReadOnly(boolean readOnly) { model.asMultiSelect().setReadOnly(readOnly); }
@Override public Set<T> getValue() { return model.asMultiSelect().getValue(); }
@Override public boolean isReadOnly() { return model.asMultiSelect().isReadOnly(); }
@Override public void updateSelection(Set<T> addedItems, Set<T> removedItems) { model.asMultiSelect().updateSelection(addedItems, removedItems); }
/** * Adds the given items to the set of currently selected items. * <p> * By default this does not clear any previous selection. To do that, use * {@link #deselectAll()}. * <p> * If the all the items were already selected, this is a NO-OP. * <p> * This is a short-hand for {@link #updateSelection(Set, Set)} with nothing * to deselect. * * @param items * to add to selection, not {@code null} */ public default void select(T... items) { Objects.requireNonNull(items); Stream.of(items).forEach(Objects::requireNonNull); updateSelection(new LinkedHashSet<>(Arrays.asList(items)), Collections.emptySet()); }
/** * Deselects all currently selected items. */ public default void deselectAll() { getSelectedItems().forEach(this::deselect); }
private void select(Stream<T> values) { if (this.multiSelect) { this.treeGrid.asMultiSelect().updateSelection(values.collect(toSet()), new HashSet<>()); } else { values.findFirst().ifPresent(this.treeGrid.asSingleSelect()::setValue); } } }
@Override public Set<T> getSelectedItems() { return model.asMultiSelect().getSelectedItems(); }