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