/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.eas.grid;
import com.google.gwt.cell.client.Cell;
import com.google.gwt.dom.builder.shared.DivBuilder;
import com.google.gwt.dom.builder.shared.HtmlBuilderFactory;
import com.google.gwt.dom.builder.shared.HtmlElementBuilderBase;
import com.google.gwt.dom.builder.shared.TableCellBuilder;
import com.google.gwt.dom.builder.shared.TableRowBuilder;
import com.google.gwt.user.cellview.client.AbstractCellTableBuilder;
import com.google.gwt.user.cellview.client.Column;
import com.google.gwt.user.cellview.client.RowStyles;
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
import com.google.gwt.user.client.ui.HasVerticalAlignment;
import com.google.gwt.view.client.SelectionModel;
/**
*
* @author mg
* @param <T>
*/
public class ThemedCellTableBuilder<T> extends AbstractCellTableBuilder<T> {
protected String dynamicTDClassName;
protected String dynamicCellClassName;
protected String dynamicOddRowsClassName;
protected String dynamicEvenRowsClassName;
public ThemedCellTableBuilder(GridSection<T> cellTable) {
this(cellTable, "", "", "", "");
}
public ThemedCellTableBuilder(GridSection<T> cellTable, String aDynamicTDClassName, String aDynamicCellClassName, String aDynamicOddRowsClassName, String aDynamicEvenRowsClassName) {
super(cellTable);
dynamicTDClassName = aDynamicTDClassName;
dynamicCellClassName = aDynamicCellClassName;
dynamicOddRowsClassName = aDynamicOddRowsClassName;
dynamicEvenRowsClassName = aDynamicEvenRowsClassName;
}
@Override
public void buildRowImpl(T rowValue, int absRowIndex) {
// Calculate the row styles.
SelectionModel<? super T> selectionModel = cellTable.getSelectionModel();
boolean isSelected
= (selectionModel == null || rowValue == null) ? false : selectionModel.isSelected(rowValue);
boolean isOdd = (absRowIndex + 1) % 2 != 0;
StringBuilder trClasses = new StringBuilder();
if(isOdd){
if(dynamicOddRowsClassName != null && !dynamicOddRowsClassName.isEmpty())
trClasses.append(" ").append(dynamicOddRowsClassName);
else
trClasses.append(" ").append(ThemedGridResources.instance.cellTableStyle().cellTableOddRow());
}else{
if(dynamicEvenRowsClassName != null && !dynamicEvenRowsClassName.isEmpty())
trClasses.append(" ").append(dynamicEvenRowsClassName);
else
trClasses.append(" ").append(ThemedGridResources.instance.cellTableStyle().cellTableEvenRow());
}
if (isSelected) {
trClasses.append(" ").append(ThemedGridResources.instance.cellTableStyle().cellTableSelectedRow());
}
// Add custom row styles.
RowStyles<T> rowStyles = cellTable.getRowStyles();
if (rowStyles != null) {
String extraRowStyles = rowStyles.getStyleNames(rowValue, absRowIndex);
if (extraRowStyles != null) {
trClasses.append(" ").append(extraRowStyles);
}
}
// Build the row.
TableRowBuilder tr = startRow();
if(((GridSection<T>)cellTable).isDraggableRows())
tr.attribute("draggable", "true");
tr.className(trClasses.toString());
// Build the columns.
int columnCount = cellTable.getColumnCount();
for (int curColumn = 0; curColumn < columnCount; curColumn++) {
Column<T, ?> column = cellTable.getColumn(curColumn);
// Create the cell styles.
StringBuilder tdClasses = new StringBuilder(ThemedGridResources.instance.cellTableStyle().cellTableCell());
/*
if(showOddRowsInOtherColor){
tdClasses.append(" ").append(isOdd ? ThemedGridResources.instance.cellTableStyle().cellTableOddRowCell() : ThemedGridResources.instance.cellTableStyle().cellTableEvenRowCell());
}
*/
/*
if (curColumn == 0) {
tdClasses.append(" ").append(ThemedGridResources.instance.cellTableStyle().cellTableFirstColumn());
}
*/
if (isSelected) {
tdClasses.append(" ").append(ThemedGridResources.instance.cellTableStyle().cellTableSelectedRowCell());
}
/*
// The first and last column could be the same column.
if (curColumn == columnCount - 1) {
tdClasses.append(" ").append(ThemedGridResources.instance.cellTableStyle().cellTableLastColumn());
}
*/
if(dynamicTDClassName != null && !dynamicTDClassName.isEmpty()){
tdClasses.append(" ").append(dynamicTDClassName);
}
// Add class names specific to the cell.
Cell.Context context = createCellContext(absRowIndex, curColumn, cellTable.getValueKey(rowValue));
String cellStyles = column.getCellStyleNames(context, rowValue);
if (cellStyles != null) {
tdClasses.append(" ").append(cellStyles);
}
// Build the cell.
HasHorizontalAlignment.HorizontalAlignmentConstant hAlign = column.getHorizontalAlignment();
HasVerticalAlignment.VerticalAlignmentConstant vAlign = column.getVerticalAlignment();
TableCellBuilder td = tr.startTD();
td.className(tdClasses.toString());
if (hAlign != null) {
td.align(hAlign.getTextAlignString());
}
if (vAlign != null) {
td.vAlign(vAlign.getVerticalAlignString());
}
// Add the inner div.
DivBuilder div = HtmlBuilderFactory.get().createDivBuilder(); // td.startDiv();
div.className(dynamicCellClassName);
// Render the cell into the div.
renderCell(div, context, column, rowValue);
// End the cell.
div.endDiv();
tdGenerated(td, context);
td.html(((HtmlElementBuilderBase)div).asSafeHtml());
td.endTD();
}
// End the row.
tr.endTR();
}
protected Cell.Context createCellContext(int aIndex, int aColumn, Object aKey){
return new Cell.Context(aIndex, aColumn, aKey);
}
protected void tdGenerated(TableCellBuilder aTd, Cell.Context aContext){
}
}