import java.util.Vector;
import net.rim.device.api.system.Display;
import net.rim.device.api.ui.DrawStyle;
import net.rim.device.api.ui.Field;
import net.rim.device.api.ui.Font;
import net.rim.device.api.ui.Graphics;
import net.rim.device.api.ui.Manager;
import net.rim.device.api.ui.component.LabelField;
import net.rim.device.api.ui.component.ListField;
import net.rim.device.api.ui.component.ListFieldCallback;
public class CustomTableField extends ListField implements ListFieldCallback {
TableHeaderRowManager row;
Vector rows;
private int dataType;
private int bgColor;
private boolean usingLineHorizontal;
private boolean usingLineVertical;
int nColumn;
public CustomTableField(int dataType, int bgColor){
this.dataType = dataType;
this.bgColor = bgColor;
setEmptyString("This ListField has No Data",DrawStyle.HCENTER);
setCallback(this);
setRowHeight(30);
Font.getDefault();
rows = new Vector();
row = new TableHeaderRowManager();
nColumn = 5;
row.add(new ColorLabelField("00123", USE_ALL_WIDTH|DrawStyle.VCENTER|DrawStyle.HCENTER|DrawStyle.ELLIPSIS|NON_FOCUSABLE, Themes.COLOR_TEXT_HEADER_TABLE, Font.PLAIN, Themes.fontSize-1, false));
row.add(new ColorLabelField("15 Januari 2012", USE_ALL_WIDTH|DrawStyle.VCENTER|DrawStyle.HCENTER|DrawStyle.ELLIPSIS|NON_FOCUSABLE, Themes.COLOR_TEXT_HEADER_TABLE, Font.PLAIN, Themes.fontSize-1, false));
row.add(new ColorLabelField("Pembayaran Biaya Kuliah", USE_ALL_WIDTH|DrawStyle.VCENTER|DrawStyle.HCENTER|DrawStyle.ELLIPSIS|NON_FOCUSABLE, Themes.COLOR_TEXT_HEADER_TABLE, Font.PLAIN, Themes.fontSize-1, false));
row.add(new ColorLabelField("2.000.0000", USE_ALL_WIDTH|DrawStyle.VCENTER|DrawStyle.HCENTER|DrawStyle.ELLIPSIS|NON_FOCUSABLE, Themes.COLOR_TEXT_HEADER_TABLE, Font.PLAIN, Themes.fontSize-1, false));
row.add(new ColorLabelField("21312323211111232323", USE_ALL_WIDTH|DrawStyle.VCENTER|DrawStyle.HCENTER|DrawStyle.ELLIPSIS|NON_FOCUSABLE, Themes.COLOR_TEXT_HEADER_TABLE, Font.PLAIN, Themes.fontSize-1, false));
rows.addElement(row);
setSize(rows.size());
}
public void drawListRow(ListField listField, Graphics graphics, int index,
int y, int width) {
// TODO Auto-generated method stub
CustomHeaderTableField list = (CustomHeaderTableField) listField;
graphics.setColor(bgColor);
graphics.fillRect(0, y, width, list.getRowHeight());
TableHeaderRowManager rowManager = (TableHeaderRowManager)list.rows.elementAt(index);
rowManager.drawRow(graphics,0,y,width,list.getRowHeight());
}
public Object get(ListField listField, int index) {
// TODO Auto-generated method stub
return rows.elementAt(index).toString();
}
public int getPreferredWidth(ListField listField) {
// TODO Auto-generated method stub
return Graphics.getScreenWidth();
}
public int indexOfList(ListField listField, String prefix, int start) {
// TODO Auto-generated method stub
return -1;
}
public void setUsingLineHorizontal(boolean usingLineHorizontal) {
this.usingLineHorizontal = usingLineHorizontal;
}
public boolean isUsingLineHorizontal() {
return usingLineHorizontal;
}
public void setUsingLineVertical(boolean usingLineVertical) {
this.usingLineVertical = usingLineVertical;
}
public boolean isUsingLineVertical() {
return usingLineVertical;
}
private class TableHeaderRowManager extends Manager
{
public TableHeaderRowManager()
{
super(0);
}
// Causes the fields within this row manager to be layed out then
// painted.
public void drawRow(Graphics g, int x, int y, int width, int height)
{
// Arrange the cell fields within this row manager.
layout(width, height);
// Place this row manager within its enclosing list.
setPosition(x, y);
// Apply a translating/clipping transformation to the graphics
// context so that this row paints in the right area.
g.pushRegion(getExtent());
// Paint this manager's controlled fields.
subpaint(g);
g.setColor(Themes.COLOR_SEPARATOR);
//g.drawLine(0, height-1, getPreferredWidth(), height-1);
//g.drawLine(40, 0, 40, getPreferredHeight());
// Restore the graphics context.
g.popContext();
}
// Arrages this manager's controlled fields from left to right within
// the enclosing table's columns.
protected void sublayout(int width, int height)
{
int fontHeight = Font.getDefault().getHeight();
int preferredWidth = getPreferredWidth();
int widthColumn = preferredWidth/nColumn;
Field field = getField(0);
int padding = 3;
layoutChild(field, widthColumn, 1);
setPositionChild(field, 2, 5);
field = getField(1);
layoutChild(field, widthColumn, 1);
setPositionChild(field, widthColumn+padding, 5);
field = getField(2);
layoutChild(field, widthColumn, 1);
setPositionChild(field, widthColumn*2+padding, 5);
field = getField(3);
layoutChild(field, widthColumn-10, 1);
setPositionChild(field, widthColumn*3+padding, 5);
field = getField(4);
layoutChild(field, widthColumn, 1);
setPositionChild(field, widthColumn*4-padding, 5);
setExtent(preferredWidth, getPreferredHeight());
}
// The preferred width of a row is defined by the list renderer.
public int getPreferredWidth()
{
return Graphics.getScreenWidth();
}
// The preferred height of a row is the "row height" as defined in the
// enclosing list.
public int getPreferredHeight()
{
return getRowHeight();
}
}
}