From f700c01e12ea5be80d88587a2720a03187922f2c Mon Sep 17 00:00:00 2001 From: Teemu Suo-Anttila Date: Tue, 20 Jun 2017 12:59:14 +0300 Subject: Enable row height and content mode settings for Tree (#9540) * Enable row height setting for Tree * Add content mode for captions * Align expander element by default to top The content mode allows use of preformatted and HTML captions that bring value to row height Fixes #9411 --- .../connectors/grid/TreeRendererConnector.java | 29 +++++++++++++++++++--- .../main/java/com/vaadin/client/widgets/Grid.java | 4 ++- 2 files changed, 28 insertions(+), 5 deletions(-) (limited to 'client/src') diff --git a/client/src/main/java/com/vaadin/client/connectors/grid/TreeRendererConnector.java b/client/src/main/java/com/vaadin/client/connectors/grid/TreeRendererConnector.java index df0da24e99..fe27b76bdc 100644 --- a/client/src/main/java/com/vaadin/client/connectors/grid/TreeRendererConnector.java +++ b/client/src/main/java/com/vaadin/client/connectors/grid/TreeRendererConnector.java @@ -17,6 +17,7 @@ package com.vaadin.client.connectors.grid; import com.google.gwt.safehtml.shared.SafeHtmlUtils; import com.google.gwt.user.client.Element; +import com.vaadin.client.annotations.OnStateChange; import com.vaadin.client.renderers.HtmlRenderer; import com.vaadin.client.renderers.Renderer; import com.vaadin.client.widget.grid.RendererCellReference; @@ -27,7 +28,7 @@ import com.vaadin.ui.Tree.TreeRenderer; import elemental.json.JsonObject; /** - * Connector for TreeRenderer + * Connector for TreeRenderer. * * @author Vaadin Ltd * @since 8.1 @@ -42,9 +43,8 @@ public class TreeRendererConnector @Override public void render(RendererCellReference cell, String htmlString) { - String content = "" + - SafeHtmlUtils.htmlEscape(htmlString) - + ""; + String content = "" + + getContentString(htmlString) + ""; JsonObject row = getParent().getParent().getDataSource() .getRow(cell.getRowIndex()); @@ -56,9 +56,30 @@ public class TreeRendererConnector } super.render(cell, content); } + + private String getContentString(String htmlString) { + switch (getState().mode) { + case HTML: + return htmlString; + case PREFORMATTED: + return "
" + SafeHtmlUtils.htmlEscape(htmlString)
+                            + "
"; + default: + return SafeHtmlUtils.htmlEscape(htmlString); + } + } }; } + @OnStateChange("mode") + void updateContentMode() { + // Redraw content + getParent().getParent().getWidget().requestRefreshBody(); + + // Some pre-formatted content might change size of content. + getParent().getParent().getWidget().recalculateColumnWidths(); + } + @Override public ColumnConnector getParent() { return (ColumnConnector) super.getParent(); diff --git a/client/src/main/java/com/vaadin/client/widgets/Grid.java b/client/src/main/java/com/vaadin/client/widgets/Grid.java index aa0261d6d9..45937e0c07 100755 --- a/client/src/main/java/com/vaadin/client/widgets/Grid.java +++ b/client/src/main/java/com/vaadin/client/widgets/Grid.java @@ -6381,8 +6381,10 @@ public class Grid extends ResizeComposite implements HasSelectionHandlers, /** * Request delayed refresh of all body rows. + * + * @since 8.1 */ - private void requestRefreshBody() { + public void requestRefreshBody() { if (!refreshBodyRequested) { refreshBodyRequested = true; Scheduler.get().scheduleFinally(() -> { -- cgit v1.2.3