uidesigner/com.nokia.carbide.cpp.uiq.components/components/settingsListLibrary.js
changeset 2 d760517a8095
--- /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;		
+}
+
+