| author | John Dean <john.3.dean@nokia.com> |
| Wed, 17 Feb 2010 12:57:24 -0800 | |
| changeset 979 | 1dc37cfc99cd |
| parent 0 | fb279309251b |
| permissions | -rw-r--r-- |
/* * 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; }