--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/uidesigner/com.nokia.carbide.cpp.uiq.components/components/implLibrary.js Tue Mar 24 22:20:21 2009 -0500
@@ -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