diff -r 000000000000 -r d760517a8095 uidesigner/com.nokia.carbide.cpp.uiq.components/components/settingsListLibrary.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uidesigner/com.nokia.carbide.cpp.uiq.components/components/settingsListLibrary.js Tue Mar 24 22:20:21 2009 -0500 @@ -0,0 +1,259 @@ +/* +* 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: +* +*/ + + +function isSettingItemList(instance) { + return instance.isInstanceOf("com.nokia.sdt.series60.CAknSettingItemList"); +} + + + +DRAW_BOUNDING_RECTS = false; + +include("renderLibrary.js") +include("implLibrary.js") +include("srcgenLibrary.js") + + +function fontForType(silProperties, laf) { + return laf.getFont("NormalFont"); +} + +function getLineBounds(silProperties, laf) { + var font = fontForType(silProperties, laf); + // * 2 accounts for label and content + var p = new Point(0, getFontHeight(font) * 2 + laf.getInteger("list.padding", 8)); + p.y += laf.getInteger("extra.padding", 0) * 2; + //println("getLineBounds="+p); + return p; +} + +function maxDisplayableItems(silProperties, laf) { + var header = 0; + var bounds = getLineBounds(silProperties, laf); + var max = Math.floor((silProperties.size.height - laf.getInteger("list.padding", 8) / 2) / bounds.y) + //println("maxDisplayableItems="+max+" bounds="+bounds+" silProperties.size.height="+silProperties.size.height); + return max; +} + +function verticalContentMargin(silProperties, laf) { + var maxItems = maxDisplayableItems(silProperties, laf); + var lineBounds = getLineBounds(silProperties, laf); + return maxItems * lineBounds.y + laf.getInteger("list.padding", 8) / 2; +} + + +function isShowingNumbers(silInstance) { + return silInstance.properties.EAknSettingItemNumberedStyle; +} + +function getPromptDividerOffset(silInstance, laf) { + var column; + if (silInstance.properties.EAknSettingItemNumberedStyle) + column = laf.getInteger("settingitemlist.numbered.padding", 20); + else + column = laf.getInteger("settingitemlist.padding", 6); + return column; +} + +function getSILPaddingY(laf) { + return laf.getInteger("settingitemlist.padding.y", 6); +} + +function getSILPaddingX(laf) { + return laf.getInteger("settingitemlist.padding.x", 6); +} + +/** + * Get all the rectangles associated with an item in a setting item list. + * + * @param rect the item's rectangle (i.e. an entire row) + * @returns an array with: + * + * 0) Rectangle numeric prompt bounds, as a whole + * 1) Rectangle title bounds, as a whole + * 2) Rectangle compulsory indicator bounds, as a whole + * 3) Rectangle content bounds, as a whole + * 4) int column where divider is drawn + */ +var SIL_ITEM_RECT_INDEX = 0; +var SIL_NUMBER_RECT_INDEX = 1; +var SIL_TITLE_RECT_INDEX = 2; +var SIL_INDICATOR_RECT_INDEX = 3; +var SIL_CONTENT_RECT_INDEX = 4; +var SIL_DIVIDER_OFFSET_INDEX = 5; + +function getSettingItemRectanglesInRect(instance, laf, rect) { + var silInstance = instance.parent; + var dividerOffset = getPromptDividerOffset(instance.parent, laf); + + var promptRect, contentRect, titleRect, indiRect; + + var contentHeight = laf.getInteger("settingitemlist.content.height", 16); + var vertPadding = getSILPaddingY(laf); + var horizPadding = getSILPaddingX(laf); + + promptRect = new Rectangle(rect.x, rect.y + vertPadding, + dividerOffset - horizPadding, rect.height - vertPadding); + + var leftMargin = dividerOffset + horizPadding; + titleRect = new Rectangle(leftMargin, rect.y + vertPadding, + rect.width - leftMargin, contentHeight); + + var contentX = laf.getInteger("settingitemlist.content.x", 32); + contentRect = new Rectangle(rect.x + contentX, + rect.y + rect.height / 2 + vertPadding, + rect.width - contentX - horizPadding/2, + contentHeight); + + indiRect = new Rectangle(leftMargin, contentRect.y, + contentRect.x - leftMargin, contentRect.height); + + var rects = [ rect, promptRect, titleRect, indiRect, contentRect, dividerOffset ]; + //pr("Rects = " +rects); + return rects; +} + +function getSettingItemRectangles(instance, laf) { + var rect = new Rectangle(0, 0, + instance.properties.size.width, instance.properties.size.height); + return getSettingItemRectanglesInRect(instance, laf, rect); +} + +function getPromptFont(laf) { + return laf.getFont("AnnotationFont"); +} +function getTitleFont(laf) { + return laf.getFont("NormalFont"); +} +function getIndiFont(laf) { + return laf.getFont("NormalFont"); +} + +function getPromptFlags(instance) { + var flags = Font.OVERFLOW_ELLIPSIS; + + flags |= Font.ALIGN_CENTER; + + return flags; +} + +function isFirstField(instance) { + var siblings = instance.parent.children; + if (siblings != null) + return instance == siblings[0]; + + return false; +} + +function calcSettingItemNumber(silInstance, self) { + var number = silInstance.properties.initialNumber; + var numberHidden = silInstance.properties.EAknSettingItemIncludeHiddenInOrdinal; + for (var c in silInstance.children) { + var sib = silInstance.children[c]; + if (sib == self) + break; + if (numberHidden || !sib.properties.itemHidden) + number++; + } + return number; +} + +function setSettingsListLineStyle(laf, graphics) { + var version = getComponentVersions(); + if ((version.getMajor() >= 3 || (version.getMajor() == 2 && version.getMinor() >= 8)) + && laf.getDimension("screen.size").x > 208) { + // use dashed line + graphics.setLineWidth(2); + graphics.setLineDash([ 2 ]); + } else { + // use solid line + graphics.setLineWidth(1); + } + +} + +function drawSettingItemPrompt(prototype, instance, laf, graphics, rects) { + var formInstance = instance.parent; + var properties = instance.properties; + + var number = calcSettingItemNumber(instance.parent, instance); + + var rect = rects[SIL_NUMBER_RECT_INDEX]; + graphics.setBackground(laf.getColor("EEikColorControlBackground")); + //graphics.setBackground(getBackgroundColor(instance, laf)); + + graphics.fillRectangle(rect); + + graphics.setForeground(laf.getColor("EEikColorControlText")); + + var itemRect = rects[SIL_ITEM_RECT_INDEX]; + + // no decorations on 3.1+ + if (laf.getBoolean("decorations", true)) { + setSettingsListLineStyle(laf, graphics); + graphics.drawLine(rects[SIL_DIVIDER_OFFSET_INDEX], + itemRect.y + itemRect.height - 1, + itemRect.width, itemRect.y + itemRect.height - 1); + + //graphics.drawLine(rects[SIL_DIVIDER_OFFSET_INDEX], itemRect.y, rects[SIL_DIVIDER_OFFSET_INDEX], itemRect.height); + } + + // draw number + var font = getPromptFont(laf); + graphics.setFont(font); + if (isShowingNumbers(formInstance)) { + var numberRect = rects[SIL_NUMBER_RECT_INDEX]; + graphics.drawFormattedString(number, numberRect, + Font.ALIGN_RIGHT, + 0); + } + + // draw item title + var font = getTitleFont(laf); + graphics.setFont(font); + rect = rects[SIL_TITLE_RECT_INDEX]; + var height = getFontHeight(font); + var textRect = new Rectangle(rect.x, rect.y + (rect.height - height)/2, + rect.width, height); + var titleText = chooseScalableText(properties.itemTitle, font, textRect.width); + graphics.drawFormattedString(titleText, textRect, 0, 0); + + // draw compulsory indicator + var font = getIndiFont(laf); + graphics.setFont(font); + rect = rects[SIL_INDICATOR_RECT_INDEX]; + graphics.setForeground(laf.getColor("CAknSettingItemList.CompulsoryIndicator")); + graphics.drawFormattedString(properties.compulsoryLabel, rect, 0, 0); + + // draw content rect + rect = rects[SIL_CONTENT_RECT_INDEX]; + graphics.setBackground(laf.getColor("CAknSettingItemList.ContentBackground")); + graphics.fillRectangle(rect); + graphics.setForeground(laf.getColor("CAknSettingItemList.ContentForeground")); +} + +function getSettingItemContentBounds(instance, laf) { + var rect = new Rectangle(0, 0, + instance.properties.size.width, instance.properties.size.height); + if (isForm(instance.parent)) { + return getSettingItemRectanglesInRect(instance, laf, rect)[SIL_CONTENT_RECT_INDEX]; + } + return rect; +} + +