diff options
author | Teemu Suo-Anttila <tsuoanttila@users.noreply.github.com> | 2017-08-23 14:02:20 +0300 |
---|---|---|
committer | Aleksi Hietanen <aleksi@vaadin.com> | 2017-08-23 14:02:20 +0300 |
commit | f09d8c74dfb44854b4982a0b54de8564ff324d00 (patch) | |
tree | 12e4406c9372dd322a00a2b475b30382a9a6d8cf /server | |
parent | 139c4cf40b6e914df65ec474d5a8523849489e24 (diff) | |
download | vaadin-framework-f09d8c74dfb44854b4982a0b54de8564ff324d00.tar.gz vaadin-framework-f09d8c74dfb44854b4982a0b54de8564ff324d00.zip |
Add item description to RadioButtonGroup and CheckBoxGroup (#9841)
Diffstat (limited to 'server')
3 files changed, 84 insertions, 1 deletions
diff --git a/server/src/main/java/com/vaadin/ui/AbstractMultiSelect.java b/server/src/main/java/com/vaadin/ui/AbstractMultiSelect.java index a0c8fd2225..93b0b35403 100644 --- a/server/src/main/java/com/vaadin/ui/AbstractMultiSelect.java +++ b/server/src/main/java/com/vaadin/ui/AbstractMultiSelect.java @@ -89,7 +89,7 @@ public abstract class AbstractMultiSelect<T> extends AbstractListing<T> } - private class MultiSelectDataGenerator implements DataGenerator<T> { + private final class MultiSelectDataGenerator implements DataGenerator<T> { @Override public void generateData(T data, JsonObject jsonObject) { String caption = getItemCaptionGenerator().apply(data); diff --git a/server/src/main/java/com/vaadin/ui/CheckBoxGroup.java b/server/src/main/java/com/vaadin/ui/CheckBoxGroup.java index b6b6d69074..c257a1a0d0 100644 --- a/server/src/main/java/com/vaadin/ui/CheckBoxGroup.java +++ b/server/src/main/java/com/vaadin/ui/CheckBoxGroup.java @@ -17,6 +17,7 @@ package com.vaadin.ui; import java.util.Collection; +import java.util.Objects; import java.util.Set; import org.jsoup.nodes.Element; @@ -32,7 +33,9 @@ import com.vaadin.event.FieldEvents.FocusListener; import com.vaadin.event.FieldEvents.FocusNotifier; import com.vaadin.server.SerializablePredicate; import com.vaadin.shared.Registration; +import com.vaadin.shared.ui.ListingJsonConstants; import com.vaadin.shared.ui.optiongroup.CheckBoxGroupState; +import com.vaadin.ui.components.grid.DescriptionGenerator; import com.vaadin.ui.declarative.DesignContext; import com.vaadin.ui.declarative.DesignFormatter; @@ -48,6 +51,8 @@ import com.vaadin.ui.declarative.DesignFormatter; public class CheckBoxGroup<T> extends AbstractMultiSelect<T> implements FocusNotifier, BlurNotifier, HasDataProvider<T> { + private DescriptionGenerator<T> descriptionGenerator = item -> null; + /** * Constructs a new CheckBoxGroup with caption. * @@ -92,6 +97,13 @@ public class CheckBoxGroup<T> extends AbstractMultiSelect<T> */ public CheckBoxGroup() { registerRpc(new FocusAndBlurServerRpcDecorator(this, this::fireEvent)); + addDataGenerator((item, jsonObject) -> { + String description = getItemDescriptionGenerator().apply(item); + if (description != null) { + jsonObject.put(ListingJsonConstants.JSONKEY_ITEM_DESCRIPTION, + description); + } + }); } /** @@ -162,6 +174,38 @@ public class CheckBoxGroup<T> extends AbstractMultiSelect<T> BlurListener.blurMethod); } + /** + * Sets the description generator that is used for generating descriptions + * for items. Description is shown as a tooltip when hovering on + * corresponding element. If the generator returns {@code null}, no tooltip + * is shown. + * + * + * @param descriptionGenerator + * the item description generator to set, not {@code null} + * + * @since + */ + public void setItemDescriptionGenerator( + DescriptionGenerator<T> descriptionGenerator) { + Objects.requireNonNull(descriptionGenerator); + if (this.descriptionGenerator != descriptionGenerator) { + this.descriptionGenerator = descriptionGenerator; + getDataProvider().refreshAll(); + } + } + + /** + * Gets the item description generator. + * + * @return the item description generator + * + * @since + */ + public DescriptionGenerator<T> getItemDescriptionGenerator() { + return descriptionGenerator; + } + @Override protected void readItems(Element design, DesignContext context) { setItemEnabledProvider(new DeclarativeItemEnabledProvider<>()); diff --git a/server/src/main/java/com/vaadin/ui/RadioButtonGroup.java b/server/src/main/java/com/vaadin/ui/RadioButtonGroup.java index 35490c49d1..c6e4a66c65 100644 --- a/server/src/main/java/com/vaadin/ui/RadioButtonGroup.java +++ b/server/src/main/java/com/vaadin/ui/RadioButtonGroup.java @@ -38,6 +38,7 @@ import com.vaadin.server.SerializablePredicate; import com.vaadin.shared.Registration; import com.vaadin.shared.ui.ListingJsonConstants; import com.vaadin.shared.ui.optiongroup.RadioButtonGroupState; +import com.vaadin.ui.components.grid.DescriptionGenerator; import com.vaadin.ui.declarative.DesignContext; import com.vaadin.ui.declarative.DesignFormatter; @@ -56,6 +57,7 @@ public class RadioButtonGroup<T> extends AbstractSingleSelect<T> implements FocusNotifier, BlurNotifier, HasDataProvider<T> { private SerializablePredicate<T> itemEnabledProvider = item -> true; + private DescriptionGenerator<T> descriptionGenerator = item -> null; /** * Constructs a new RadioButtonGroup with caption. @@ -112,6 +114,12 @@ public class RadioButtonGroup<T> extends AbstractSingleSelect<T> } else { jsonObject.put(ListingJsonConstants.JSONKEY_ITEM_VALUE, ""); } + String description = getItemDescriptionGenerator().apply(data); + if (description != null) { + jsonObject.put( + ListingJsonConstants.JSONKEY_ITEM_DESCRIPTION, + description); + } Resource icon = getItemIconGenerator().apply(data); if (icon != null) { String iconUrl = ResourceReference @@ -219,6 +227,37 @@ public class RadioButtonGroup<T> extends AbstractSingleSelect<T> this.itemEnabledProvider = itemEnabledProvider; } + /** + * Sets the description generator that is used for generating descriptions + * for items. Description is shown as a tooltip when hovering on + * corresponding element. If the generator returns {@code null}, no tooltip + * is shown. + * + * @param descriptionGenerator + * the item description generator to set, not {@code null} + * + * @since + */ + public void setItemDescriptionGenerator( + DescriptionGenerator<T> descriptionGenerator) { + Objects.requireNonNull(descriptionGenerator); + if (this.descriptionGenerator != descriptionGenerator) { + this.descriptionGenerator = descriptionGenerator; + getDataProvider().refreshAll(); + } + } + + /** + * Gets the item description generator. + * + * @return the item description generator + * + * @since + */ + public DescriptionGenerator<T> getItemDescriptionGenerator() { + return descriptionGenerator; + } + @Override public Registration addFocusListener(FocusListener listener) { return addListener(FocusEvent.EVENT_ID, FocusEvent.class, listener, |