/*+ −
* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).+ −
* All rights reserved.+ −
* This component and the accompanying materials are made available+ −
* under the terms of the License "Eclipse Public License v1.0"+ −
* which accompanies this distribution, and is available+ −
* at the URL "http://www.eclipse.org/legal/epl-v10.html".+ −
*+ −
* Initial Contributors:+ −
* Nokia Corporation - initial contribution.+ −
*+ −
* Contributors:+ −
*+ −
* Description: + −
*+ −
*/+ −
+ −
+ −
+ −
DRAW_BOUNDING_RECTS = false;+ −
+ −
include("renderLibrary.js")+ −
include("implLibrary.js")+ −
include("srcgenLibrary.js")+ −
+ −
var FORM_ID = "com.nokia.sdt.series60.CAknForm";+ −
+ −
function isForm(formInstance) {+ −
return formInstance.componentId == FORM_ID;+ −
}+ −
+ −
function isDoubleSpaced(formInstance) {+ −
return formInstance.properties.EEikFormUseDoubleSpacedFormat;+ −
}+ −
+ −
function isShowingBitmaps(formInstance) {+ −
return formInstance.properties.EEikFormShowBitmaps;+ −
}+ −
+ −
function getFormSingleDividerOffset(formInstance, laf) {+ −
return laf.getInteger("form.divider.offset.single", 20);+ −
}+ −
+ −
function getFormPromptDividerOffset(formInstance, laf) {+ −
if (isDoubleSpaced(formInstance)) {+ −
if (isShowingBitmaps(formInstance))+ −
return laf.getInteger("form.inset", 20);+ −
else+ −
return laf.getInteger("form.divider.offset.double", 6);+ −
}+ −
return getFormSingleDividerOffset(formInstance, laf);+ −
}+ −
+ −
function getFormLineGap(laf) {+ −
return laf.getInteger("form.padding", 5);+ −
}+ −
+ −
function getFormPadding(laf) {+ −
return laf.getInteger("form.padding", 5);+ −
}+ −
+ −
/**+ −
* Get all the rectangles associated with an item in a form.+ −
*+ −
* @param rect the item's rectangle (i.e. an entire row)+ −
* @returns an array with:+ −
*+ −
* 0) Rectangle prompt bounds, as a whole+ −
* 1) Rectangle content bounds, as a whole+ −
* 2) Rectangle prompt image bounds, or null+ −
* 3) Rectangle prompt label bounds+ −
* 4) int column where divider is drawn+ −
*/+ −
var FORM_PROMPT_RECT_INDEX = 0;+ −
var FORM_CONTENT_RECT_INDEX = 1;+ −
var FORM_PROMPT_IMAGE_RECT_INDEX = 2;+ −
var FORM_PROMPT_LABEL_RECT_INDEX = 3;+ −
var FORM_DIVIDER_OFFSET_INDEX = 4;+ −
+ −
function getFormItemRectanglesInRect(instance, laf, rect) {+ −
var formInstance = instance.parent;+ −
var dividerOffset = getFormPromptDividerOffset(instance.parent, laf);+ −
+ −
var bmsize = laf.getDimension("form.image.size").x;+ −
+ −
var promptRect, contentRect, promptImageRect = null, promptLabelRect;+ −
+ −
// NOTE: S60 seems to NOT add padding for prompts, but we do it anyway+ −
if (isDoubleSpaced(formInstance)) {+ −
var promptExtent = getFontHeight(getFormPromptFont(laf));+ −
+ −
// println("rect="+rect+", dividerOffset="+dividerOffset+", promptExtent="+promptExtent);+ −
promptRect = new Rectangle(rect.x + dividerOffset + getFormPadding(laf), rect.y + getFormPadding(laf), + −
rect.width - dividerOffset - getFormPadding(laf), promptExtent);+ −
promptLabelRect = new Rectangle(promptRect.x, promptRect.y,+ −
promptRect.width, promptRect.height);+ −
+ −
if (isShowingBitmaps(formInstance)) {+ −
// image is on left side of divider, flush right+ −
promptImageRect = new Rectangle(+ −
rect.x + dividerOffset - bmsize - getFormPadding(laf)/3, + −
rect.y,+ −
bmsize,+ −
bmsize);+ −
+ −
}+ −
+ −
var leftMargin = dividerOffset + getFormPadding(laf) * 2;+ −
contentRect = new Rectangle(rect.x + leftMargin, + −
rect.y + promptExtent + getFormLineGap(laf),+ −
rect.width - leftMargin, + −
rect.height - promptExtent);+ −
+ −
} else {+ −
promptRect = new Rectangle(rect.x, rect.y, + −
dividerOffset - getFormPadding(laf), rect.height);+ −
+ −
if (isShowingBitmaps(formInstance)) {+ −
// image is on left side of label, flush left+ −
promptImageRect = new Rectangle(+ −
promptRect.x, + −
promptRect.y + (promptRect.height - bmsize) / 2,+ −
bmsize,+ −
bmsize);+ −
+ −
promptLabelRect = new Rectangle(+ −
promptRect.x + bmsize + 2, promptRect.y, + −
promptRect.width - bmsize, promptRect.height);+ −
} else {+ −
promptLabelRect = new Rectangle(+ −
promptRect.x, promptRect.y, + −
promptRect.width, promptRect.height);+ −
}+ −
+ −
var leftMargin = dividerOffset + getFormPadding(laf);+ −
contentRect = new Rectangle(rect.x + leftMargin, rect.y, + −
rect.width - leftMargin, rect.height);+ −
+ −
}+ −
+ −
var rects = [ promptRect, contentRect, promptImageRect, promptLabelRect, dividerOffset ];+ −
//println( "rects = " + rects);+ −
return rects;+ −
}+ −
+ −
function getFormItemRectangles(instance, laf) {+ −
var rect = new Rectangle(0, 0, + −
instance.properties.size.width, instance.properties.size.height);+ −
return getFormItemRectanglesInRect(instance, laf, rect);+ −
}+ −
+ −
function getFormPromptFont(laf) {+ −
return laf.getFont("DenseFont");+ −
}+ −
+ −
function getFormPromptFlags(instance) {+ −
var flags = Font.OVERFLOW_ELLIPSIS;+ −
+ −
if (isDoubleSpaced(instance.parent) || isShowingBitmaps(instance.parent))+ −
flags |= Font.ALIGN_LEFT;+ −
else+ −
flags |= Font.ALIGN_RIGHT;+ −
+ −
return flags;+ −
}+ −
+ −
function isFirstField(instance) {+ −
var siblings = instance.parent.children;+ −
if (siblings != null)+ −
return instance == siblings[0];+ −
+ −
return false;+ −
}+ −
+ −
function drawFormPrompt(prototype, instance, laf, graphics, rects) {+ −
var formInstance = instance.parent;+ −
var properties = instance.properties;+ −
var prompt = properties.prompt;+ −
+ −
var font = getFormPromptFont(laf);+ −
graphics.setFont(font);+ −
+ −
var rect = rects[FORM_PROMPT_RECT_INDEX]; + −
graphics.setBackground(laf.getColor("EEikColorWindowBackground"));+ −
graphics.fillRectangle(rect);+ −
+ −
graphics.setForeground(laf.getColor("EEikColorControlText"));+ −
+ −
// in single spaced only, draw line before prompt if separator before or after is specified+ −
// and this is not the first form field (2.x only)+ −
var version = getComponentVersions();+ −
if (!isDoubleSpaced(formInstance) && !isFirstField(instance) && properties.EEikDlgItemSeparatorBefore+ −
&& version.getMajor() < 3) {+ −
graphics.drawLine(rect.x, rect.y, rect.width + getFormPadding(laf) - 1, rect.y);+ −
}+ −
+ −
// draw bitmap on the left side of the divider+ −
if (isShowingBitmaps(formInstance)) {+ −
var imageRect = rects[FORM_PROMPT_IMAGE_RECT_INDEX];+ −
renderImage(prototype, instance, laf, graphics, + −
0, 0, "promptImage", false);+ −
}+ −
+ −
rect = rects[FORM_PROMPT_LABEL_RECT_INDEX];+ −
var height = getFontHeight(font);+ −
var textRect = new Rectangle(rect.x, rect.y + (rect.height - height)/2,+ −
rect.width, height);+ −
var promptText = chooseScalableText(prompt, font, textRect.width);+ −
graphics.drawFormattedString(promptText, textRect, getFormPromptFlags(instance), 0); + −
}+ −
+ −
function getFormContentBounds(instance, laf) {+ −
var rect = new Rectangle(0, 0, + −
instance.properties.size.width, instance.properties.size.height);+ −
if (isForm(instance.parent)) {+ −
return getFormItemRectanglesInRect(instance, laf, rect)[FORM_CONTENT_RECT_INDEX];+ −
}+ −
return rect; + −
}+ −
+ −
+ −
+ −