uidesigner/com.nokia.sdt.series60.componentlibrary/components/implLibrary.js
author timkelly
Mon, 26 Jul 2010 11:32:21 -0500
branchC3_BUILDER_WORK
changeset 1681 6636e8c75e66
parent 0 fb279309251b
permissions -rw-r--r--
Fix problem with sbs config xml parsing. Make sure to trim error message to avoid erroneously adding an error when there is none. Fix problem with adding system includes for variants.

/*
* 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: 
*
*/


// This file has routines which initialize component implementations
// according to patterns.

include ("messageLibrary.js")

implLibraryStrings = getLocalizedStrings("implLibrary");

/**
 *	Set up direct label editing implementation for a component with
 *	one editable label
 *	@param prototype the impl prototype to update
 *	@param property the name of the edited property
 *	@param areafunction a function, taking an instance and laf, which returns the
 *		editable area of the label (or null).  If null, the default behavior is
 *	to use the entire rendered area.
 *	@param fontfunction a function, taking an instance and laf, which returns the
 *		IFont to edit with (or null).  If null, the default behavior is to return
 *		null, indicating a default system font.
 */
function setupCommonDirectLabelEditing(prototype, property, areafunction, fontfunction) {

	prototype.getPropertyPaths = function(instance) {
		return [ property ];
	}

	prototype.getLabelBounds = function(instance, propertyPath, laf) {
		if (areafunction)
			return areafunction(instance, laf);
		var size = instance.properties.size;
	    return new Rectangle(0, 0, size.width, size.height);
	}

	prototype.getLabelFont = function(instance, propertyPath, laf) {
		if (fontfunction)
			return fontfunction(instance, laf)
		return null;
	}

}


//	Set up direct image editing implementation for a component
//	with one image property.  
//
//	@param prototype the impl prototype to update
//	@param property the name of the edited property
//	@param areafunction a function, taking an instance, laf, and propertyPath, or null.
//		If not null, the function which returns a rectangle for the clickable area 
//		of the rendered area of the component to respond to.
//		If null, the default behavior is to use the entire rendered area.

function setupCommonDirectImageEditing(prototype, property, areafunction, sizefunction, isScalingFunction) {

	// implementation for IDirectImageEdit
	prototype.getImagePropertyPaths = function(instance) {
		return [ property ];
	}

	// implementation for IDirectImageEdit
	prototype.getImageBounds = function(instance, propertyPath, laf) {
		//println( "image: " + instance.properties[propertyPath].bmpfile + "/" 
		//		+instance.properties[propertyPath].bmpid + "/" 
		//		+instance.properties[propertyPath].bmpmask );
				
		if (areafunction) 
			return areafunction(instance, laf, property);
		else {
			var size = instance.properties.size;
		    return new Rectangle(0, 0, size.width, size.height);
		}
	}
}

/**	Create a simple IModelMessage that refers to an error on a property. */
function createSimpleModelError(instance, propertyId, messageFormat, argList) {
	var modelMessage = newModelMessage(IStatus.ERROR, 
			formatString(messageFormat, argList), 
			instance, propertyId, null);
	return modelMessage;
}

/**
 *	Set up common IComponentValidator script for an editor that has
 *	minimum, maximum, and current value properties.
 *	@param prototype to modify
 *	@param noun localized string for the unit being edited (i.e. "duration")
 *	@param nouns localized string for the plural unit being edited (i.e. "durations")
 *	@param minProperty, maxProperty, valueProperty properties to check
 *	@param converter a function taking a property value used to convert a property to a comparable value;
 *		if null, the property is treated as an integer
 */
function setupCommonRangeCheckingValidation(prototype, noun, nouns,
		minProperty, maxProperty, valueProperty, converter) {

	if (converter == null)
		converter = function(value) { return value; };

			// note that laf will be null if a display model was not created
	prototype.validate = function(instance, laf) {
		var properties = instance.properties;

		var min = converter(properties[minProperty]);
		var max = converter(properties[maxProperty]);
		var value = converter(properties[valueProperty]);

		var messages = new java.util.ArrayList();
		
		if (min > max) {
			messages.add(createSimpleModelError(instance, 
				minProperty, 
				implLibraryStrings.getString("minMaxValueError"), 
				[ noun, nouns, instance.name, min, max ]));
		} 
		if (value < min || value > max) {
			messages.add(createSimpleModelError(instance, 
				valueProperty, 
				implLibraryStrings.getString("valueRangeError"), 
				[ noun, nouns, instance.name, min, max, value ]));
		}	
		return messages;
	}
	
		// note that laf will be null if a display model was not created
	prototype.queryPropertyChange = function(instance, propertyPath,
					newVal, laf) {
					
		var properties = instance.properties;
		var message = null;

		newValue = converter(newVal);
		if (propertyPath == minProperty) {
			if (newValue > converter(properties[valueProperty]) ||
				newValue >= converter(properties[maxProperty])) {
				message = formatString(implLibraryStrings.getString("minValueConstraint"), noun, nouns );
			}
		}
		else if (propertyPath == valueProperty) {
			if (newValue < converter(properties[minProperty]) ||
			    newValue > converter(properties[maxProperty])) {
				message = formatString(implLibraryStrings.getString("valueConstraint"), noun, nouns );
			}
		}
		else if (propertyPath == maxProperty) {
			if (newValue <= converter(properties[minProperty]) ||
				newValue < converter(properties[valueProperty]))
				message = formatString(implLibraryStrings.getString("maxValueConstraint"), noun, nouns );
		}
	
		return message;		
	}

}