use of com.github.bordertech.wcomponents.WTable in project wcomponents by BorderTech.
the class WTableOptionsExample method createBasicDataTable.
/**
* @return a basic table example.
*/
private WTable createBasicDataTable() {
WTable table = new WTable();
addColumns(table);
table.setType(WTable.Type.TABLE);
table.setRowsPerPage(DEFAULT_ROWS_PER_PAGE);
table.setCaption("Basic table caption");
table.setBeanProperty(".");
// Setup model with column properties
MyBeanBoundTableModel model = new MyBeanBoundTableModel(new String[] { "firstName", "lastName", "dateOfBirth" });
model.setSelectable(true);
model.setEditable(true);
model.setComparator(0, SimpleBeanBoundTableModel.COMPARABLE_COMPARATOR);
model.setComparator(1, SimpleBeanBoundTableModel.COMPARABLE_COMPARATOR);
table.setTableModel(model);
return table;
}
use of com.github.bordertech.wcomponents.WTable in project wcomponents by BorderTech.
the class WTableOptionsExample method createHierarchicDataTable.
/**
* @return a hierarchic table
*/
private WTable createHierarchicDataTable() {
WTable table = new WTable();
addColumns(table);
table.setType(WTable.Type.HIERARCHIC);
table.setRowsPerPage(DEFAULT_ROWS_PER_PAGE);
table.setCaption("Hierarchic table caption");
table.setBeanProperty(".");
// Setup model with column properties and the "level" to iterate on (ie more details)
MyBeanBoundTableModel model = new MyBeanBoundTableModel(new String[] { "firstName", "lastName", "dateOfBirth" }, "more");
model.setIterateFirstLevel(true);
model.setSelectable(true);
model.setEditable(true);
model.setComparator(0, SimpleBeanBoundTableModel.COMPARABLE_COMPARATOR);
model.setComparator(1, SimpleBeanBoundTableModel.COMPARABLE_COMPARATOR);
table.setTableModel(model);
return table;
}
use of com.github.bordertech.wcomponents.WTable in project wcomponents by BorderTech.
the class WTableRenderer method doRender.
@Override
public void doRender(final WComponent component, final WebXmlRenderContext renderContext) {
WTable table = (WTable) component;
XmlStringBuilder xml = renderContext.getWriter();
xml.appendTagOpen("ui:table");
xml.appendAttribute("id", component.getId());
xml.appendOptionalAttribute("class", component.getHtmlClass());
xml.appendOptionalAttribute("track", component.isTracking(), "true");
xml.appendOptionalAttribute("hidden", table.isHidden(), "true");
xml.appendOptionalAttribute("caption", table.getCaption());
switch(table.getType()) {
case TABLE:
xml.appendAttribute("type", "table");
break;
case HIERARCHIC:
xml.appendAttribute("type", "hierarchic");
break;
default:
throw new SystemException("Unknown table type: " + table.getType());
}
switch(table.getStripingType()) {
case ROWS:
xml.appendAttribute("striping", "rows");
break;
case COLUMNS:
xml.appendAttribute("striping", "cols");
break;
case NONE:
break;
default:
throw new SystemException("Unknown striping type: " + table.getStripingType());
}
switch(table.getSeparatorType()) {
case HORIZONTAL:
xml.appendAttribute("separators", "horizontal");
break;
case VERTICAL:
xml.appendAttribute("separators", "vertical");
break;
case BOTH:
xml.appendAttribute("separators", "both");
break;
case NONE:
break;
default:
throw new SystemException("Unknown separator type: " + table.getSeparatorType());
}
xml.appendClose();
// Render margin
MarginRendererUtil.renderMargin(table, renderContext);
if (table.getPaginationMode() != PaginationMode.NONE) {
paintPaginationDetails(table, xml);
}
if (table.getSelectMode() != SelectMode.NONE) {
paintSelectionDetails(table, xml);
}
if (table.getExpandMode() != ExpandMode.NONE) {
paintExpansionDetails(table, xml);
}
if (table.isSortable()) {
paintSortDetails(table, xml);
}
paintColumnHeadings(table, renderContext);
paintRows(table, renderContext);
paintTableActions(table, renderContext);
xml.appendEndTag("ui:table");
}
use of com.github.bordertech.wcomponents.WTable in project wcomponents by BorderTech.
the class WTableRenderer method paintTableActions.
/**
* Paints the table actions of the table.
*
* @param table the table to paint the table actions for.
* @param renderContext the RenderContext to paint to.
*/
private void paintTableActions(final WTable table, final WebXmlRenderContext renderContext) {
XmlStringBuilder xml = renderContext.getWriter();
List<WButton> tableActions = table.getActions();
if (!tableActions.isEmpty()) {
boolean hasActions = false;
for (WButton button : tableActions) {
if (!button.isVisible()) {
continue;
}
if (!hasActions) {
hasActions = true;
xml.appendTag("ui:actions");
}
xml.appendTag("ui:action");
List<WTable.ActionConstraint> constraints = table.getActionConstraints(button);
if (constraints != null) {
for (WTable.ActionConstraint constraint : constraints) {
int minRows = constraint.getMinSelectedRowCount();
int maxRows = constraint.getMaxSelectedRowCount();
String message = constraint.getMessage();
String type = constraint.isError() ? "error" : "warning";
xml.appendTagOpen("ui:condition");
xml.appendOptionalAttribute("minSelectedRows", minRows > 0, minRows);
xml.appendOptionalAttribute("maxSelectedRows", maxRows > 0, maxRows);
xml.appendAttribute("selectedOnOther", this.selectedOnOther);
xml.appendAttribute("type", type);
xml.appendAttribute("message", I18nUtilities.format(null, message));
xml.appendEnd();
}
}
button.paint(renderContext);
xml.appendEndTag("ui:action");
}
if (hasActions) {
xml.appendEndTag("ui:actions");
}
}
}
use of com.github.bordertech.wcomponents.WTable in project wcomponents by BorderTech.
the class WTableRowRendererRenderer method renderChildren.
/**
* @param renderer the WTableRowRenderer to paint.
* @param renderContext the RenderContext to paint to.
* @param children the children ids
*/
private void renderChildren(final WTableRowRenderer renderer, final WebXmlRenderContext renderContext, final List<RowIdWrapper> children) {
XmlStringBuilder xml = renderContext.getWriter();
WTable table = renderer.getTable();
WRepeater repeater = table.getRepeater();
TableModel dataModel = table.getTableModel();
// If there is a renderer specified by any child, we only paint content that has a specified renderer
boolean rendererPresent = false;
for (RowIdWrapper child : children) {
if (dataModel.getRendererClass(child.getRowIndex()) != null) {
rendererPresent = true;
break;
}
}
// Paint immediate children only.
if (rendererPresent) {
xml.appendTagOpen("ui:content");
// Always span all columns
xml.appendAttribute("spanAllCols", "true");
xml.appendClose();
for (RowIdWrapper child : children) {
UIContext nodeContext = repeater.getRowContext(child, child.getPosition());
WComponent expandedRenderer = renderer.getExpandedTreeNodeRenderer(dataModel.getRendererClass(child.getRowIndex()));
if (expandedRenderer != null) {
UIContextHolder.pushContext(nodeContext);
try {
expandedRenderer.paint(renderContext);
} finally {
UIContextHolder.popContext();
}
}
}
xml.appendEndTag("ui:content");
} else {
for (RowIdWrapper child : children) {
UIContext nodeContext = repeater.getRowContext(child, child.getPosition());
UIContextHolder.pushContext(nodeContext);
try {
render(renderer, renderContext);
} finally {
UIContextHolder.popContext();
}
}
}
}
Aggregations