/* * JustifiedVerticalFieldManager.java * * Copyright � 1998-2011 Research In Motion Limited * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * Note: For the sake of simplicity, this sample application may not leverage * resource bundles and resource strings. However, it is STRONGLY recommended * that application developers make use of the localization features available * within the BlackBerry development platform to ensure a seamless application * experience across a variety of languages and geographies. For more information * on localizing your application, please refer to the BlackBerry Java Development * Environment Development Guide associated with this release. */ package com.rim.samples.device.ui.wireframelayoutdemo; import net.rim.device.api.ui.Field; import net.rim.device.api.ui.Manager; /** * A Manager class which divides its available height between two fields */ public class JustifiedVerticalFieldManager extends Manager { private final Field _topField; private final Field _bottomField; private final boolean _giveTopFieldPriority; /** * Creates a new JustifiedVerticalFieldManager * * @param topField * Field to be positioned at the top * @param bottomField * Field to be positioned at the bottom * @param giveTopFieldPriority * True is the top field is to be given all of its preferred * width, false otherwise */ public JustifiedVerticalFieldManager(final Field topField, final Field bottomField, final boolean giveTopFieldPriority) { super(USE_ALL_HEIGHT); _topField = topField; _bottomField = bottomField; add(_topField); add(_bottomField); _giveTopFieldPriority = giveTopFieldPriority; } /** * @see Manager#sublayout(int, int) */ protected void sublayout(final int width, final int height) { Field firstField; Field secondField; if (_giveTopFieldPriority) { firstField = _topField; secondField = _bottomField; } else { firstField = _bottomField; secondField = _topField; } int maxWidth = 0; final int firstFieldLeftMargin = firstField.getMarginLeft(); final int firstFieldRightMargin = firstField.getMarginRight(); final int secondFieldLeftMargin = secondField.getMarginLeft(); final int secondFieldRightMargin = secondField.getMarginRight(); final int bottomFieldMarginBottom = _bottomField.getMarginBottom(); final int topFieldMarginTop = _topField.getMarginTop(); int availableHeight = height; availableHeight -= topFieldMarginTop; availableHeight -= Math.max(_topField.getMarginBottom(), _bottomField .getMarginTop()); availableHeight -= bottomFieldMarginBottom; layoutChild(firstField, width - firstFieldLeftMargin - firstFieldRightMargin, availableHeight); maxWidth = Math.max(maxWidth, firstFieldLeftMargin + firstField.getWidth() + firstFieldRightMargin); availableHeight -= firstField.getHeight(); layoutChild(secondField, width - secondFieldLeftMargin - secondFieldRightMargin, availableHeight); maxWidth = Math.max(maxWidth, secondFieldLeftMargin + secondField.getWidth() + secondFieldRightMargin); availableHeight -= secondField.getHeight(); setPositionChild(_topField, 0, topFieldMarginTop); setPositionChild(_bottomField, 0, height - _bottomField.getHeight() - bottomFieldMarginBottom); setExtent(width, height); } }