uidesigner/com.nokia.carbide.cpp.uiq.components/components/settingsListLibrary.js
Fix bug 11210. NPEs when editing SBSv2 config tab data on old SBSv2 build configs.
Now allows saving SBSv2 variant data for old SBSv2 configs
(i.e. before we display the build alias in the config name)
/*
* 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;
}