Revision: 10172
Author: tfisc...@google.com
Date: Tue May 10 08:14:26 2011
Log: Add styleName attribute to Grid
Review at http://gwt-code-reviews.appspot.com/1441802
Review by: rchan...@google.com
http://code.google.com/p/google-web-toolkit/source/detail?r=10172
Modified:
/trunk/user/src/com/google/gwt/uibinder/elementparsers/GridParser.java
/trunk/user/src/com/google/gwt/user/client/ui/Grid.java
/trunk/user/test/com/google/gwt/uibinder/elementparsers/GridParserTest.java
=======================================
--- /trunk/user/src/com/google/gwt/uibinder/elementparsers/GridParser.java
Wed Mar 9 09:01:28 2011
+++ /trunk/user/src/com/google/gwt/uibinder/elementparsers/GridParser.java
Tue May 10 08:14:26 2011
@@ -31,28 +31,59 @@
private static class CellContent {
private String tagName;
private String content;
-
- public CellContent(String tagName, String content) {
+ private String styleName;
+
+ public CellContent(String tagName, String content, String styleName) {
this.tagName = tagName;
this.content = content;
+ this.styleName = styleName;
}
- public String getConent() {
+ public String getContent() {
return this.content;
}
+
+ public String getStyleName() {
+ return styleName;
+ }
public String getTagName() {
return this.tagName;
}
}
+
+ private static class RowContent {
+ private List<CellContent> columns = new ArrayList<CellContent>();
+ private String styleName;
+
+ private void addColumn(CellContent column) {
+ columns.add(column);
+ }
+
+ public List<CellContent> getColumns() {
+ return columns;
+ }
+
+ public String getStyleName() {
+ return styleName;
+ }
+
+ public void setColumns(List<CellContent> columns) {
+ this.columns = columns;
+ }
+
+ public void setStyleName(String styleName) {
+ this.styleName = styleName;
+ }
+ }
private static class Size {
private int rows;
private int columns;
- public Size() {
- this.rows = 0;
- this.columns = 0;
+ public Size(int rows, int columns) {
+ this.rows = rows;
+ this.columns = columns;
}
public int getColumns() {
@@ -62,14 +93,6 @@
public int getRows() {
return this.rows;
}
-
- public void setColumns(int cols) {
- this.columns = cols;
- }
-
- public void setRows(int rows) {
- this.rows = rows;
- }
}
private static final String ROW_TAG = "row";
@@ -78,10 +101,12 @@
private static final String CUSTOMCELL_TAG = "customCell";
+ private static final String STYLE_NAME_ATTRIBUTE = "styleName";
+
public void parse(XMLElement elem, String fieldName, JClassType type,
UiBinderWriter writer) throws UnableToCompleteException {
- List<List<CellContent>> matrix = new ArrayList<List<CellContent>>();
+ List<RowContent> matrix = new ArrayList<RowContent>();
parseRows(elem, fieldName, writer, matrix);
Size size = getMatrixSize(matrix);
@@ -90,40 +115,48 @@
writer.addStatement("%s.resize(%s, %s);", fieldName,
Integer.toString(size.getRows()),
Integer.toString(size.getColumns()));
- for (List<CellContent> row : matrix) {
- for (CellContent column : row) {
+ for (RowContent row : matrix) {
+ if ((row.getStyleName() != null) &&
(!row.getStyleName().isEmpty())) {
+ writer.addStatement("%s.getRowFormatter().setStyleName(%s, %s);",
+ fieldName,
+ matrix.indexOf(row),
+ row.getStyleName());
+ }
+
+ for (CellContent column : row.getColumns()) {
if (column.getTagName().equals(CELL_TAG)) {
writer.addStatement("%s.setHTML(%s, %s, %s);", fieldName,
Integer.toString(matrix.indexOf(row)),
- Integer.toString(row.indexOf(column)),
- writer.declareTemplateCall(column.getConent()));
+ Integer.toString(row.getColumns().indexOf(column)),
+ writer.declareTemplateCall(column.getContent()));
}
if (column.getTagName().equals(CUSTOMCELL_TAG)) {
writer.addStatement("%s.setWidget(%s, %s, %s);", fieldName,
Integer.toString(matrix.indexOf(row)),
- Integer.toString(row.indexOf(column)), column.getConent());
+ Integer.toString(row.getColumns().indexOf(column)),
column.getContent());
+ }
+ if ((column.getStyleName() != null) &&
(!column.getStyleName().isEmpty())) {
+
writer.addStatement("%s.getCellFormatter().setStyleName(%s, %s, %s);",
+ fieldName,
+ matrix.indexOf(row),
+ row.getColumns().indexOf(column),
+ column.getStyleName());
}
}
}
}
}
- private Size getMatrixSize(List<List<CellContent>> matrix) {
- Size size = new Size();
-
- size.setRows(matrix.size());
-
+ private Size getMatrixSize(List<RowContent> matrix) {
int maxColumns = 0;
- for (List<CellContent> column : matrix) {
- maxColumns = (column.size() > maxColumns) ? column.size() :
maxColumns;
- }
- size.setColumns(maxColumns);
-
- return size;
+ for (RowContent row : matrix) {
+ maxColumns = (row.getColumns().size() > maxColumns) ?
row.getColumns().size() : maxColumns;
+ }
+ return new Size(matrix.size(), maxColumns);
}
private void parseColumns(String fieldName, UiBinderWriter writer,
- List<List<CellContent>> matrix, XMLElement child)
+ RowContent row, XMLElement child)
throws UnableToCompleteException {
String tagName;
@@ -135,22 +168,23 @@
fieldName, CELL_TAG, CUSTOMCELL_TAG);
}
CellContent newColumn = null;
+ String styleName = cell.consumeStringAttribute(STYLE_NAME_ATTRIBUTE,
null);
if (tagName.equals(CELL_TAG)) {
HtmlInterpreter htmlInt =
HtmlInterpreter.newInterpreterForUiObject(
writer, fieldName);
String html = cell.consumeInnerHtml(htmlInt);
- newColumn = new CellContent(tagName, html);
+ newColumn = new CellContent(tagName, html, styleName);
}
if (tagName.equals(CUSTOMCELL_TAG)) {
newColumn = new CellContent(tagName,
- writer.parseElementToField(cell.consumeSingleChildElement()));
- }
- matrix.get(matrix.size() - 1).add(newColumn);
+ writer.parseElementToField(cell.consumeSingleChildElement()),
styleName);
+ }
+ row.addColumn(newColumn);
}
}
private void parseRows(XMLElement elem, String fieldName,
- UiBinderWriter writer, List<List<CellContent>> matrix)
+ UiBinderWriter writer, List<RowContent> matrix)
throws UnableToCompleteException {
for (XMLElement child : elem.consumeChildElements()) {
@@ -161,9 +195,11 @@
"%1$s:Grid elements must contain only %1$s:%2$s children,
found %3$s:%4$s",
elem.getPrefix(), ROW_TAG, child.getPrefix(), tagName);
}
- List<CellContent> newRow = new ArrayList<CellContent>();
+
+ RowContent newRow = new RowContent();
+
newRow.setStyleName(child.consumeStringAttribute(STYLE_NAME_ATTRIBUTE,
null));
matrix.add(newRow);
- parseColumns(fieldName, writer, matrix, child);
+ parseColumns(fieldName, writer, newRow, child);
}
}
}
=======================================
--- /trunk/user/src/com/google/gwt/user/client/ui/Grid.java Wed Jul 21
11:18:39 2010
+++ /trunk/user/src/com/google/gwt/user/client/ui/Grid.java Tue May 10
08:14:26 2011
@@ -45,11 +45,11 @@
*
* <pre>
* <g:Grid>
- * <g:row>
- * <g:customCell>
+ * <g:row styleName="optionalHeaderStyle">
+ * <g:customCell styleName="optionalFooCellStyle">
* <g:Label>foo</g:Label>
* </g:customCell>
- * <g:customCell>
+ * <g:customCell styleName="optionalBarCellStyle">
* <g:Label>bar</g:Label>
* </g:customCell>
* </g:row>
=======================================
---
/trunk/user/test/com/google/gwt/uibinder/elementparsers/GridParserTest.java
Wed Mar 9 09:01:28 2011
+++
/trunk/user/test/com/google/gwt/uibinder/elementparsers/GridParserTest.java
Tue May 10 08:14:26 2011
@@ -116,6 +116,38 @@
assertFalse(i.hasNext());
assertNull(tester.logger.died);
}
+
+ public void testStyleName() throws UnableToCompleteException,
SAXException {
+ StringBuffer b = new StringBuffer();
+ b.append("<g:Grid>");
+ b.append(" <g:row styleName=\"rowHeaderStyle\">");
+ b.append(" <g:cell styleName=\"headerStyle\">foo</g:cell>");
+ b.append(" <g:cell styleName=\"headerStyle\">bar</g:cell>");
+ b.append(" </g:row>");
+ b.append(" <g:row>");
+ b.append(" <g:cell>foo</g:cell>");
+ b.append(" <g:cell>bar</g:cell>");
+ b.append(" </g:row>");
+ b.append("</g:Grid>");
+
+ String[] expected = {"fieldName.resize(2, 2);",
+ "fieldName.getRowFormatter().setStyleName(0, \"rowHeaderStyle\");",
+ "fieldName.setHTML(0, 0, \"@mockToken-foo\");",
+ "fieldName.getCellFormatter().setStyleName(0, 0,
\"headerStyle\");",
+ "fieldName.setHTML(0, 1, \"@mockToken-bar\");",
+ "fieldName.getCellFormatter().setStyleName(0, 1,
\"headerStyle\");",
+ "fieldName.setHTML(1, 0, \"@mockToken-foo\");",
+ "fieldName.setHTML(1, 1, \"@mockToken-bar\");"};
+
+ FieldWriter w = tester.parse(b.toString());
+
+ Iterator<String> i = tester.writer.statements.iterator();
+ for (String e : expected) {
+ assertEquals(e, i.next());
+ }
+ assertFalse(i.hasNext());
+ assertNull(tester.logger.died);
+ }
public void testValidChild() throws UnableToCompleteException,
SAXException {
StringBuffer b = new StringBuffer();
--
http://groups.google.com/group/Google-Web-Toolkit-Contributors