uidesigner/com.nokia.carbide.cpp.uiq.components/components/implLibrary.js
changeset 0 fb279309251b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/uidesigner/com.nokia.carbide.cpp.uiq.components/components/implLibrary.js	Fri Apr 03 23:33:03 2009 +0100
@@ -0,0 +1,215 @@
+/*
+* 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;
+	}
+
+}
+
+function areaWithParentWidth(instance, laf){
+	var size = instance.properties.size;
+	if (instance.parent != null) {
+		var sizeParent = instance.parent.properties.size;
+		var x = instance.properties.location.x;
+		return new Rectangle(-x, 0, sizeParent.width, size.height);
+	}
+	return new Rectangle(0, 0, size.width, size.height);
+}
+
+//	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, maxLengthProperty 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 setupCommonAndMaxLengthRangeCheckingValidation(prototype, noun, nouns,
+		minProperty, maxProperty, valueProperty, converter, maxLengthProperty) {
+
+	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 messages = new java.util.ArrayList();
+
+		var min = converter(properties[minProperty]);
+		var max = converter(properties[maxProperty]);
+		var value = converter(properties[valueProperty]);
+
+		if (converter(properties[maxLengthProperty])!= null) {
+			var maxLength = converter(properties[maxLengthProperty]);
+			if ( maxLength < 3 || maxLength > 32 ){
+				messages.add(createSimpleModelError(instance, maxLengthProperty, 
+				implLibraryStrings.getString("maxLengthValueError"), 
+				[ maxLength ]));
+			} else {
+				var textValue = value.toString();
+				if (textValue.length > maxLength){
+					messages.add(createSimpleModelError(instance, valueProperty,
+					implLibraryStrings.getString("maxLengthConstraint"), 
+					[noun, maxLength ]));
+				}	
+			}
+		} 
+		
+		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 (converter(properties[maxLengthProperty])!= null){
+					if (newValue.toString().length() > converter(properties[maxLengthProperty])) {
+						message = formatString(implLibraryStrings.getString("maxLengthConstraint"), noun );
+					}
+				}
+			}
+		}
+		else if (propertyPath == maxProperty) {
+			if (newValue <= converter(properties[minProperty]) ||
+				newValue < converter(properties[valueProperty]))
+				message = formatString(implLibraryStrings.getString("maxValueConstraint"), noun, nouns );
+		}
+		return message;		
+	}
+
+}
+
+/**
+ *	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) {
+	setupCommonAndMaxLengthRangeCheckingValidation(prototype, noun, nouns,
+		minProperty, maxProperty, valueProperty, converter, null);
+}
\ No newline at end of file