aboutsummaryrefslogtreecommitdiffstats
path: root/server
diff options
context:
space:
mode:
authorTeemu Suo-Anttila <tsuoanttila@users.noreply.github.com>2017-08-23 14:02:20 +0300
committerAleksi Hietanen <aleksi@vaadin.com>2017-08-23 14:02:20 +0300
commitf09d8c74dfb44854b4982a0b54de8564ff324d00 (patch)
tree12e4406c9372dd322a00a2b475b30382a9a6d8cf /server
parent139c4cf40b6e914df65ec474d5a8523849489e24 (diff)
downloadvaadin-framework-f09d8c74dfb44854b4982a0b54de8564ff324d00.tar.gz
vaadin-framework-f09d8c74dfb44854b4982a0b54de8564ff324d00.zip
Add item description to RadioButtonGroup and CheckBoxGroup (#9841)
Diffstat (limited to 'server')
-rw-r--r--server/src/main/java/com/vaadin/ui/AbstractMultiSelect.java2
-rw-r--r--server/src/main/java/com/vaadin/ui/CheckBoxGroup.java44
-rw-r--r--server/src/main/java/com/vaadin/ui/RadioButtonGroup.java39
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,