Search in sources :

Example 6 with XYRect

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);
}
Also used : LabelField(net.rim.device.api.ui.component.LabelField) BitmapField(net.rim.device.api.ui.component.BitmapField) Field(net.rim.device.api.ui.Field) XYRect(net.rim.device.api.ui.XYRect)

Aggregations

XYRect (net.rim.device.api.ui.XYRect)6 Graphics (net.rim.device.api.ui.Graphics)4 Field (net.rim.device.api.ui.Field)1 BitmapField (net.rim.device.api.ui.component.BitmapField)1 LabelField (net.rim.device.api.ui.component.LabelField)1