uidesigner/com.nokia.sdt.series60.componentlibrary/components/toolbar/Toolbar.js
author timkelly
Tue, 03 Aug 2010 16:29:13 -0500
branchC3_BUILDER_WORK
changeset 1757 ec3c1e4702be
parent 0 fb279309251b
permissions -rw-r--r--
Remove makefile dependency checks on SBSv2 builder since they don't apply. Remove SBSv2BuilderInfo.java and functionality. That has been used for loading the SBSv2 tab, which no longer exists. Now the SBSv2 data in the .cproject is loaded directly by the build configuration loading mechanism.

/*
* Copyright (c) 2007 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: 
*
*/


include("../containers/containerLibrary.js")
include("../renderLibrary.js")

function CAknToolbar() {
	this.lafInfo = null;

	// the bounds of the dialog, rel. to instance
	this.dialogBounds = null;	
	// the bounds of the prompt part, rel. to dialogBounds
	this.promptBounds = null;
	// the bounds of the list box part, rel. to dialogBounds
	this.listBounds = null;
}

///////////////////////////////////
// IQueryContainment
///////////////////////////////////
function canContainComponent(instance, component) {
	
	if (isSupportedToolbarComponent(component))
		return null;
	
	return buildSimpleContainmentErrorStatus(
			lookupString("unsupportedComponentErr"), new Array( component.friendlyName ));			
}

CAknToolbar.prototype.canContainComponent = function(instance, otherComponent) {
	return canContainComponent(instance, otherComponent);
}

CAknToolbar.prototype.canContainChild = function(instance, child) {
	return canContainComponent(instance, child.component);
}

CAknToolbar.prototype.canRemoveChild = function(instance) {
	return true;
}

CAknToolbar.prototype.isValidComponentInPalette = function(instance, otherComponent) {
	return canContainComponent(instance, otherComponent) == null;
}

function isSupportedToolbarComponent(component) {
	if (component.id == "com.nokia.sdt.series60.CAknChoiceList"){
		return true;
	} else if (component.id == "com.nokia.sdt.series60.CAknButton"){
		return true;
	} else {
		return false;
	}
}

///////////////////////////////////
// IVisualAppearance
///////////////////////////////////
CAknToolbar.prototype.draw = function(instance, laf, graphics) {

	var width = instance.properties.size.width - 3;
	var height = instance.properties.size.height - 3;
	var x = 0;
	var y = 0;
	
	// fill 
	graphics.setBackground(laf.getColor("control.button.fill"));
	graphics.setForeground(laf.getColor("screen.background"));
	graphics.setBackground(laf.getColor("control.button.fill")); 
	graphics.fillGradientRectangle(x, y, width, height, true)
	
	// edge
	graphics.setForeground(Colors.getColor(0, 0, 0))
	graphics.drawRectangle(new Rectangle(0, 0, width, height))
	
	// shadows
	graphics.setForeground(laf.getColor("control.shadow.inner"))
	graphics.drawLine(x + 1, y + height + 1, x + width + 1, y + height + 1)
	graphics.drawLine(x + width + 1, y + 1, x + width + 1, y + height + 1)
	
	graphics.setForeground(laf.getColor("control.shadow.outer"))
	graphics.drawLine(x + 2, y + height + 2, x + width + 2, y + height + 2)
	graphics.drawLine(x + width + 2, y + 2, x + width + 2, y + height + 2)

	graphics.setForeground(laf.getColor("EEikColorDialogText"));
	
	if (instance.children.length == 0) {
			//drawTextItem(" No data ", new Point(0, 0), new Point(width + 5, height + 2), laf, graphics);
	}
}

CAknToolbar.prototype.getPreferredSize = function(instance, laf, wHint, hHint) {
	return null;
}

////////////////////////////////////////
// IComponentInstancePropertyListener
////////////////////////////////////////
CAknToolbar.prototype.propertyChanged = function(instance, property) {

	var messages = null;
	// insure that there isn't choice list in the small bar
	var properties = instance.properties; 
	if (properties.smallToolbar == true)
	{
		for (var i in instance.children) {
			var child = instance.children[i];
			if (child.component.isOfType("com.nokia.sdt.series60.CAknChoiceList")){
				// TODO: We're setting a property back but should create a status message
				// Not sure how to do that...
				properties.smallToolbar = false;
				instance.forceRedraw();  // refreshes the properties
			}
		}
	}

	if (property == "orientation" || property == "smallToolbar"){
		instance.forceLayout();
	}
	
	return messages;
}


///////////////////////////////////
// IComponentValidator
///////////////////////////////////
CAknToolbar.prototype.validate = function(instance) { 
	
	// Find out if there's a small toolbar
	// If a small toolbar has a choice list, emit error and set back to regular toolbar
	
	var properties = instance.properties;
	var messages = null;
	
	if (properties.smallToolbar == true)
	{
		for (var i in instance.children) {
			var child = instance.children[i];
		}
	}

	return messages;
}

CAknToolbar.prototype.queryPropertyChange = function(instance, propertyPath,
					newValue, laf) {
	return null;
}

////////////////////////////////////
// IComponentInstanceChildListener
////////////////////////////////////

CAknToolbar.prototype.childAdded = function(parent, child){
	parent.parent.forceLayout();
}

CAknToolbar.prototype.childRemoved = function(parent, child){
	parent.parent.forceLayout();
}

CAknToolbar.prototype.childrenReordered = function(parent){
	parent.parent.forceLayout();
}
	
////////////////////////////////////
// ILayout
////////////////////////////////////	
CAknToolbar.prototype.layout = function(instance, laf) {
	
	var isPortrait = laf.getBoolean("is.portrait", true);
	var properties = instance.properties;
	var isHorizontal = properties.orientation == "Horizontal" ? true : false;
	var toolBarMarginPadding = laf.getInteger("control.toolbar.margin", 0);
	var isSmallBar =   properties.smallToolbar == true ? true : false;
	var toolBarWidth = laf.getInteger("control.toolbar.height", 0);
	var toolBarButtonWidth = toolBarWidth - toolBarMarginPadding*2;
	var toolBarButtonHeight = toolBarButtonWidth;
	var toolBarHeight = toolBarWidth;
	
	var numChillens = instance.children.length;
	
	if (isSmallBar){
		// init defaults for small bar, half size of regular toolbar
		toolBarHeight /= 2;
		toolBarWidth /= 2;
		toolBarButtonWidth = toolBarHeight;
		toolBarButtonHeight = toolBarWidth;
		toolBarMarginPadding = 0;
	}
	
	///////////////////////////
	// layout children
	///////////////////////////
	if (isHorizontal){
		// horizontal toolbar grows in width only
		var childX = toolBarMarginPadding; 
		var childY = toolBarMarginPadding;
		if (numChillens > 0) {
			toolBarWidth = toolBarMarginPadding*2 - toolBarMarginPadding; // remove padding for last item added
		}
		for (var i in instance.children) {
			var child = instance.children[i];
			var childProperties = child.properties;
			if (child.component.isOfType("com.nokia.sdt.series60.CAknButton")){
				// button is fixed width

				if (childProperties.size.width != toolBarButtonWidth){
					childProperties.size.width = toolBarButtonWidth;
				}
			} else {
				// other components can be variable width, minimum width preserved
				if (childProperties.size.width < toolBarButtonWidth){
					childProperties.size.width = toolBarButtonWidth;
				}
			}
			
			if (childProperties.size.height != toolBarButtonHeight){
				childProperties.size.height = toolBarButtonHeight; // fixed height
			}
			toolBarWidth += child.properties.size.width + toolBarMarginPadding;	
			childProperties.location.x = childX;
			childProperties.location.y = childY;
			childX += childProperties.size.width + toolBarMarginPadding;
		}

	} else {
		// Vertical orientation, all items are the same size
		var temp = toolBarWidth;
		toolBarWidth = toolBarHeight;
		toolBarHeight = temp;
		var childX = toolBarMarginPadding; 
		var childY = toolBarMarginPadding;
		
		if (numChillens > 0) {
			toolBarHeight = toolBarMarginPadding;
		}
		for (var i in instance.children) {
			var child = instance.children[i];
			var childProperties = child.properties;
			toolBarHeight += child.properties.size.height + toolBarMarginPadding;
			childProperties.size.width = toolBarWidth - toolBarMarginPadding*2;
			childProperties.size.height = toolBarButtonHeight;
			childProperties.location.x = childX;
			childProperties.location.y = childY;
			childY += toolBarButtonHeight + toolBarMarginPadding;	
		}
	}
	
}