package org.xmlvm.iphone;
import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Composite;
import java.awt.Font;
import java.awt.Graphics2D;
import java.util.ArrayList;
import java.util.List;
import org.xmlvm.iphone.remote.Settings;
public class UIPreferencesTable
extends UIView
{
private UIPreferencesTableDataSource dataSource;
private List<CGRect> groupFrames;
final static int INSET = 15;
public UIPreferencesTable(CGRect rect)
{
super(rect);
dataSource = null;
groupFrames = new ArrayList<CGRect>();
}
public void setDataSource(UIPreferencesTableDataSource dataSource)
{
this.dataSource = dataSource;
}
public void reloadData()
{
subViews.clear();
groupFrames.clear();
float width = viewRect.size.width * 0.9f;
float x = viewRect.origin.x + viewRect.size.width * 0.05f;
int numOfGroups = dataSource.numberOfGroupsInPreferencesTable(this);
int y = 0;
for (int g = 0; g < numOfGroups; g++) {
UIPreferencesTableCell group = dataSource.cellForGroup(this, g);
float proposedHeight = dataSource.heightForRow(this, -1, g, 40);
CGRect rect = new CGRect(x, y, width, proposedHeight);
y += proposedHeight;
group.setFrame(rect);
group.isGroupCell(true);
addSubview(group);
if (dataSource.isLabelGroup(this, g))
continue;
int numRows = dataSource.numberOfRowsInGroup(this, g);
CGRect groupRect = new CGRect(x, y, width, 0);
for (int r = 0; r < numRows; r++) {
y += 5;
UIPreferencesTableCell cell = dataSource.cellForRow(this, r, g);
proposedHeight = dataSource.heightForRow(this, r, g, 40);
rect = new CGRect(x, y, width, proposedHeight);
y += proposedHeight;
cell.setFrame(rect);
addSubview(cell);
}
groupRect.size.height = y - groupRect.origin.y;
groupFrames.add(groupRect);
}
}
public void drawRect(CGRect rect)
{
Graphics2D g = CGContext.theContext.graphicsContext;
CGRect displayRect = getDisplayRect();
g.setBackground(new Color(220, 220, 220));
g.clearRect((int) displayRect.origin.x, (int) displayRect.origin.y,
(int) displayRect.size.width, (int) displayRect.size.height);
g.setColor(new Color(230, 230, 230));
for (int i = 0; i < viewRect.size.width; i += 10) {
g.drawLine((int) displayRect.origin.x + i,
(int) displayRect.origin.y, (int) displayRect.origin.x + i,
(int) (displayRect.origin.y + displayRect.size.height));
}
for (CGRect groupRect : groupFrames) {
g.setColor(Color.WHITE);
g.fillRoundRect((int) (displayRect.origin.x + groupRect.origin.x),
(int) (displayRect.origin.y + groupRect.origin.y),
(int) groupRect.size.width, (int) groupRect.size.height,
INSET, INSET);
g.setColor(Color.LIGHT_GRAY);
g.drawRoundRect((int) (displayRect.origin.x + groupRect.origin.x),
(int) (displayRect.origin.y + groupRect.origin.y),
(int) groupRect.size.width, (int) groupRect.size.height,
INSET, INSET);
}
g.setColor(Color.BLACK);
Font f = new Font("sansserif", Font.BOLD, 16);
super.drawRect(rect);
}
}