use of net.rim.device.api.ui.XYRect in project Samples-for-Java by blackberry.
the class Banner method sublayout.
/**
* Layout the banner
*
* @param width
* @param height
*/
protected void sublayout(int width, int height) {
int fullWidth = width;
width -= (hPadding << 1);
int availableWidth = width;
// each field reduces our available width
// Calculate max height as we go
int maxHeight = 0;
int fieldCount = getFieldCount();
Field child;
for (int i = 0; i < fieldCount; i++) {
child = getField(i);
if (hasField(title) && child == title) {
continue;
// Layout title last, separately
}
layoutChild(child, availableWidth, height);
XYRect childExtent = child.getExtent();
availableWidth -= childExtent.width;
if (hasField(icon) && child == icon) {
// skip the interior padding loss.
} else {
availableWidth -= interiorPadding;
}
maxHeight = Math.max(maxHeight, childExtent.height);
}
// Layout Title with remaining space
if (hasField(title)) {
child = title;
layoutChild(child, availableWidth, height);
XYRect childExtent = child.getExtent();
availableWidth -= childExtent.width + interiorPadding;
maxHeight = Math.max(maxHeight, childExtent.height);
}
// Set Positions
if (hasField(icon)) {
int childY = determineTop(vPadding, icon.getExtent().height, maxHeight, DrawStyle.VCENTER);
setPositionChild(icon, hPadding, childY);
}
if (hasField(title)) {
int childX = determineLeft(title, width, icon, DrawStyle.LEFT);
int childY = determineTop(vPadding, title.getExtent().height, maxHeight, DrawStyle.VCENTER);
setPositionChild(title, childX, childY);
}
if (hasField(timeDisplay)) {
int childX = determineLeft(timeDisplay, width, new Field[] { icon, title }, DrawStyle.LEFT);
int childY = determineTop(vPadding, timeDisplay.getExtent().height, maxHeight, DrawStyle.VCENTER);
setPositionChild(timeDisplay, childX, childY);
}
if (hasField(wirelessStatus)) {
int childX = determineLeft(wirelessStatus, width, new Field[0], DrawStyle.RIGHT);
int drawStyle = DrawStyle.BOTTOM;
if (isDimension) {
drawStyle = DrawStyle.VCENTER;
}
int childY = determineTop(vPadding, wirelessStatus.getExtent().height, maxHeight, drawStyle);
setPositionChild(wirelessStatus, childX, childY);
}
if (hasField(wirelessStatus) && hasField(roam)) {
int childY = determineTop(vPadding, roam.getExtent().height, maxHeight, DrawStyle.VCENTER);
int childX = determineLeft(roam, width, wirelessStatus, DrawStyle.RIGHT);
setPositionChild(roam, childX, childY);
}
if (hasField(wifi)) {
int childY = determineTop(vPadding, wifi.getExtent().height, maxHeight, DrawStyle.VCENTER);
int childX = determineLeft(wifi, width, new Field[] { wirelessStatus, roam }, DrawStyle.RIGHT);
setPositionChild(wifi, childX, childY);
}
if (hasField(phone)) {
int childY = determineTop(vPadding, phone.getExtent().height, maxHeight, DrawStyle.VCENTER);
int childX = determineLeft(phone, width, new Field[] { wirelessStatus, wifi, roam }, DrawStyle.RIGHT);
setPositionChild(phone, childX, childY);
}
if (hasField(battery)) {
int childY = determineTop(vPadding, battery.getExtent().height, maxHeight, DrawStyle.VCENTER);
int childX = determineLeft(battery, width, new Field[] { wirelessStatus, wifi, phone, roam }, DrawStyle.RIGHT);
setPositionChild(battery, childX, childY);
}
if (hasField(notifications)) {
int childX = determineLeft(notifications, width, new Field[] { wirelessStatus, wifi, battery, phone, roam }, DrawStyle.RIGHT);
setPositionChild(notifications, childX, vPadding);
}
int totalHeight = maxHeight + (vPadding >> 1);
setVirtualExtent(fullWidth, totalHeight);
setExtent(fullWidth, totalHeight);
}
Aggregations