diff options
author | Johannes Dahlström <johannesd@vaadin.com> | 2015-04-16 14:39:31 +0300 |
---|---|---|
committer | Vaadin Code Review <review@vaadin.com> | 2015-04-20 07:26:13 +0000 |
commit | 4845b804fd09163c70cf7ecac9c26e91a6cb46c9 (patch) | |
tree | 531cc5578f4564b0a6b3e403067e137537099f99 /server/src/com/vaadin/ui/Table.java | |
parent | be90c6d21607d504cc559884c5f7df49289def30 (diff) | |
download | vaadin-framework-4845b804fd09163c70cf7ecac9c26e91a6cb46c9.tar.gz vaadin-framework-4845b804fd09163c70cf7ecac9c26e91a6cb46c9.zip |
Declarative write support for Table (#16367)
Change-Id: I9caa766be3152b35f7fe354b989e8cd6d615a043
Diffstat (limited to 'server/src/com/vaadin/ui/Table.java')
-rw-r--r-- | server/src/com/vaadin/ui/Table.java | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/server/src/com/vaadin/ui/Table.java b/server/src/com/vaadin/ui/Table.java index 202e58f0c9..eb3d35be3e 100644 --- a/server/src/com/vaadin/ui/Table.java +++ b/server/src/com/vaadin/ui/Table.java @@ -6175,12 +6175,115 @@ public class Table extends AbstractSelect implements Action.Container, } @Override + public void writeDesign(Element design, DesignContext context) { + Table def = context.getDefaultInstance(this); + + DesignAttributeHandler.writeAttribute("sortable", design.attributes(), + isSortEnabled(), def.isSortEnabled(), boolean.class); + + Element table = null; + boolean hasColumns = getVisibleColumns().length != 0; + if (hasColumns) { + table = design.appendElement("table"); + writeColumns(table, def); + writeHeader(table, def); + } + super.writeDesign(design, context); + if (hasColumns) { + writeFooter(table); + } + } + + private void writeColumns(Element table, Table def) { + Object[] columns = getVisibleColumns(); + if (columns.length == 0) { + return; + } + + Element colgroup = table.appendElement("colgroup"); + for (Object id : columns) { + Element col = colgroup.appendElement("col"); + + col.attr("property-id", id.toString()); + + if (getColumnAlignment(id) == Align.CENTER) { + col.attr("center", ""); + } else if (getColumnAlignment(id) == Align.RIGHT) { + col.attr("right", ""); + } + + DesignAttributeHandler.writeAttribute("width", col.attributes(), + getColumnWidth(id), def.getColumnWidth(null), int.class); + + DesignAttributeHandler.writeAttribute("expand", col.attributes(), + getColumnExpandRatio(id), def.getColumnExpandRatio(null), + float.class); + + DesignAttributeHandler.writeAttribute("collapsible", + col.attributes(), isColumnCollapsible(id), + def.isColumnCollapsible(null), boolean.class); + + DesignAttributeHandler.writeAttribute("collapsed", + col.attributes(), isColumnCollapsed(id), + def.isColumnCollapsed(null), boolean.class); + } + } + + private void writeHeader(Element table, Table def) { + Object[] columns = getVisibleColumns(); + if (columns.length == 0 + || (columnIcons.isEmpty() && columnHeaders.isEmpty())) { + return; + } + + Element header = table.appendElement("thead").appendElement("tr"); + for (Object id : columns) { + Element th = header.appendElement("th"); + th.html(getColumnHeader(id)); + DesignAttributeHandler.writeAttribute("icon", th.attributes(), + getColumnIcon(id), def.getColumnIcon(null), Resource.class); + } + + } + + private void writeFooter(Element table) { + Object[] columns = getVisibleColumns(); + if (columns.length == 0 || columnFooters.isEmpty()) { + return; + } + + Element footer = table.appendElement("tfoot").appendElement("tr"); + for (Object id : columns) { + footer.appendElement("td").text(getColumnFooter(id)); + } + } + + @Override + protected void writeItems(Element design, DesignContext context) { + Element tbody = design.child(0).appendElement("tbody"); + super.writeItems(tbody, context); + } + + @Override + protected Element writeItem(Element tbody, Object itemId, + DesignContext context) { + Element tr = tbody.appendElement("tr"); + Item item = getItem(itemId); + for (Object id : getVisibleColumns()) { + Element td = tr.appendElement("td"); + td.html(item.getItemProperty(id).getValue().toString()); + } + return tr; + } + + @Override protected Collection<String> getCustomAttributes() { Collection<String> result = super.getCustomAttributes(); result.add("sortable"); result.add("sort-enabled"); result.add("sort-disabled"); result.add("footer-visible"); + result.add("item-caption-mode"); result.add("current-page-first-item-id"); result.add("current-page-first-item-index"); return result; |