--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/uidesigner/com.nokia.carbide.cpp.uiq.components/components/formLibrary.js Fri Apr 03 23:33:03 2009 +0100
@@ -0,0 +1,222 @@
+/*
+* 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;
+}
+
+
+