uidesigner/com.nokia.sdt.series60.componentlibrary/components/settingsListLibrary.js
author timkelly
Thu, 10 Jun 2010 11:33:29 -0500
branchC3_BUILDER_WORK
changeset 1453 bd6bc4d000fd
parent 0 fb279309251b
permissions -rw-r--r--
clean up SDK/Config tree by removing SDK Id from display (it's redundant) and also adding text that SDK location does not exist so users can see the config tree and know it won't work (not have it be hidden and users wonder why it's not there)

/*
* 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);

	var indiFont = getIndiFont(laf);
	var indiWidth = (indiFont.getCharWidth("5") * 3) / 2;
	indiRect = new Rectangle(contentRect.x - indiWidth, contentRect.y,
			indiWidth, 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) {
	var font = laf.getFont("Settings.list.indicator");
	if (font != null)
		return font;
		
	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("listitem.text"));

	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;		
}