/**
* Label that provides Showing x to y of z message given for a DataTable. The message can be
* overridden using the <code>NavigatorLabel</code> property key, the default message is used is of
* the format <code>Showing ${from} to ${to} of ${of}</code>. The message can also be configured
* pragmatically by setting it as the model object of the label.
*
* @author Igor Vaynberg (ivaynberg)
*
*/
public class GridNavigatorLabel extends Label
{
private static final long serialVersionUID = 1L;
// TODO Factor this interface out and let dataview/datatable implement it
private static interface PageableComponent extends IClusterable
{
/**
* @return total number of rows across all pages
*/
int getRowCount();
/**
* @return current page
*/
int getCurrentPage();
/**
* @return rows per page
*/
int getRowsPerPage();
int getColumnsPerRow();
}
/**
* @param id
* component id
* @param table
* table
*/
public GridNavigatorLabel(final String id, final GridView<?> table)
{
this(id, new PageableComponent()
{
/**
*
*/
private static final long serialVersionUID = 1L;
public int getCurrentPage()
{
return table.getCurrentPage();
}
public int getRowCount()
{
return table.getRowCount();
}
public int getRowsPerPage()
{
return table.getRows();
}
public int getColumnsPerRow()
{
return table.getColumns();
}
});
}
private GridNavigatorLabel(final String id, final PageableComponent table)
{
super(id);
setDefaultModel(new StringResourceModel("NavigatorLabel", this,
new Model<LabelModelObject>(new LabelModelObject(table)),
"Showing ${from} to ${to} of ${of}"));
}
private class LabelModelObject implements IClusterable
{
private static final long serialVersionUID = 1L;
private final PageableComponent table;
/**
* Construct.
*
* @param table
*/
public LabelModelObject(PageableComponent table)
{
this.table = table;
}
/**
* @return "z" in "Showing x to y of z"
*/
public int getOf()
{
return table.getRowCount();
}
/**
* @return "x" in "Showing x to y of z"
*/
public int getFrom()
{
if (getOf() == 0)
{
return 0;
}
return (table.getCurrentPage() * table.getRowsPerPage() * table.getColumnsPerRow()) + 1;
}
/**
* @return "y" in "Showing x to y of z"
*/
public int getTo()
{
if (getOf() == 0)
{
return 0;
}
return Math.min(getOf(), getFrom() + table.getRowsPerPage()* table.getColumnsPerRow() - 1);
}
}
}
Friday, February 4, 2011
Wicket: NavigatorLabel for GridView
It seems that the NavigatorLabel do not support GridView. So I make it based on the Original NavigatorLabel. It's very simple.
Labels:
Wicket
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment