Update of /cvsroot/qooxdoo/qooxdoo/source/script/core
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31017/source/script/core
Modified Files:
Tag: renderer
QxExtend.js
Log Message:
Initial split out of property setters
Index: QxExtend.js
===================================================================
RCS file: /cvsroot/qooxdoo/qooxdoo/source/script/core/QxExtend.js,v
retrieving revision 1.7.2.101
retrieving revision 1.7.2.102
diff -u -d -r1.7.2.101 -r1.7.2.102
--- QxExtend.js 23 Jan 2006 12:45:35 -0000 1.7.2.101
+++ QxExtend.js 23 Jan 2006 13:28:25 -0000 1.7.2.102
@@ -316,6 +316,153 @@
pp[QxConst.INTERNAL_SETDEFAULT + p.method] = null;
};
+
+
+
+
+
+
+var QxProperties =
+{
+ advancedCheck : function(newValue, p)
+ {
+ if (!(newValue == null && p.allowNull))
+ {
+ if (p.hasType && typeof newValue != p.type) {
+ return this.error("Attention! The value \"" + newValue + "\" is an invalid value for the property \"" + p.name + "\" which must be typeof \"" + p.type + "\" but is typeof \"" + typeof newValue + "\"!", QxConst.INTERNAL_SET + p.method);
+ };
+
+ if (p.hasInstance && !(newValue instanceof QxClasses[p.instance])) {
+ return this.error("Attention! The value \"" + newValue + "\" is an invalid value for the property \"" + p.name + "\" which must be an instance of \"" + p.instance + "\"!", QxConst.INTERNAL_SET + p.method);
+ };
+
+ if (p.hasClassName && newValue.classname != p.classname) {
+ return this.error("Attention! The value \"" + newValue + "\" is an invalid value for the property \"" + p.name + "\" which must be an object with the classname \"" + p.classname + "\"!", QxConst.INTERNAL_SET + p.method);
+ };
+
+ if (p.hasPossibleValues && newValue != null && !p.possibleValues.contains(newValue)) {
+ return this.error("Failed to save value for " + p.name + ". '" + newValue + "' is not a possible value!", QxConst.INTERNAL_SET + p.method);
+ };
+ };
+ },
+
+ userCheck : function(checkKey, newValue, oldValue, p)
+ {
+ // Allow to check and transform the new value before storage
+ if (typeof this[checkKey] == QxConst.TYPEOF_FUNCTION)
+ {
+ try
+ {
+ return this[checkKey](newValue, p);
+ }
+ catch(ex)
+ {
+ return this.error("Failed to check property " + p.name + ": " + ex, checkKey);
+ };
+ };
+
+ return newValue;
+ },
+
+ storeValue : function(valueKey, modifyKey, newValue, oldValue, p)
+ {
+ // Store new value
+ this[valueKey] = newValue;
+
+ // Check if there is a modifier implementation
+ if (typeof this[modifyKey] == QxConst.TYPEOF_FUNCTION)
+ {
+ try
+ {
+ var r = this[modifyKey](newValue, oldValue, p);
+ if (!r) {
+ return this.error("Modification of property \"" + p.name + "\" failed without exception (" + r + ")", modifyKey);
+ };
+ }
+ catch(ex)
+ {
+ return this.error("Modification of property \"" + p.name + "\" failed with exception (" + ex + ")", modifyKey);
+ };
+ };
+ },
+
+ unitDetection : function(unitDetectionKey, newValue, p)
+ {
+ // Unit detection support
+ if (p.hasUnitDetection) {
+ this[unitDetectionKey](p, newValue);
+ };
+ },
+
+ queueAdd : function(p)
+ {
+ // Auto queue addition support
+ if (p.addToQueue) {
+ this.addToQueue(p.name);
+ }
+ else if (p.addToQueueRuntime) {
+ this.addToQueueRuntime(p.name);
+ };
+
+ // Auto state queue addition support
+ if (p.addToStateQueue) {
+ this._addToGlobalStateQueue();
+ };
+ },
+
+ eventDispatch : function(changeKey, newValue, oldValue, p)
+ {
+ // Create Event
+ if (this instanceof QxTarget && this.hasEventListeners(changeKey))
+ {
+ var ce = new QxDataEvent(changeKey, newValue, oldValue, false);
+
+ ce.setTarget(this);
+
+ try
+ {
+ this.dispatchEvent(ce, true);
+ }
+ catch(ex)
+ {
+ throw new Error("Property " + p.name + " modified: Failed to dispatch change event: " + ex);
+ };
+ };
+ },
+
+ applyConvert : function(newValue, p)
+ {
+ // support converter methods
+ if (p.hasConvert)
+ {
+ try
+ {
+ return p.convert.call(this, newValue, p);
+ }
+ catch(ex)
+ {
+ throw new Error("Attention! Could not convert new value for " + p.name + ": " + newValue + ": " + ex);
+ };
+ };
+
+ return newValue;
+ },
+
+ multipleArguments : function(args, p)
+ {
+ // convert multiple arguments to array
+ if (p.allowMultipleArguments && args.length > 1) {
+ return QxUtil.convertArgumentsToArray(args);
+ };
+
+ return args[0];
+ }
+};
+
+
+
+
+
Function.prototype._createProperty = function(p)
{
if(typeof p != QxConst.TYPEOF_OBJECT) {
@@ -393,11 +540,42 @@
// apply default value
pp[valueKey] = p.defaultValue;
+
+
+
+
// building getFoo(): Returns current stored value
pp[QxConst.INTERNAL_GET + p.method] = function() {
return this[valueKey];
};
+ // building setFoo(): Setup new value, do type and change detection, converting types, call unit detection, ...
+ pp[QxConst.INTERNAL_SET + p.method] = function(newValue)
+ {
+ var oldValue = this[valueKey];
+
+ newValue = QxProperties.multipleArguments.call(this, arguments, p);
+ newValue = QxProperties.applyConvert.call(this, newValue, p);
+
+ if (newValue == oldValue) {
+ return newValue;
+ };
+
+ QxProperties.advancedCheck.call(this, newValue, p);
+
+ newValue = QxProperties.userCheck.call(this, checkKey, newValue, oldValue, p);
+
+ QxProperties.storeValue.call(this, valueKey, modifyKey, newValue, oldValue, p);
+ QxProperties.unitDetection.call(this, unitDetectionKey, newValue, p);
+ QxProperties.queueAdd.call(this, p);
+ QxProperties.eventDispatch.call(this, changeKey, newValue, oldValue, p);
+
+ return newValue;
+ };
+
+
+
+
// building forceFoo(): Set (override) without do anything else
pp[QxConst.INTERNAL_FORCE + p.method] = function(newValue) {
return this[valueKey] = newValue;
@@ -414,130 +592,9 @@
pp[QxConst.INTERNAL_TOGGLE + p.method] = function(newValue) {
return this[QxConst.INTERNAL_SET + p.method](!this[valueKey]);
};
- };
-
- // building setFoo(): Setup new value, do type and change detection, converting types, call unit detection, ...
- pp[QxConst.INTERNAL_SET + p.method] = function(newValue)
- {
- // convert multiple arguments to array
- if (p.allowMultipleArguments && arguments.length > 1) {
- newValue = QxUtil.convertArgumentsToArray(arguments);
- };
-
- // support converter methods
- if (p.hasConvert)
- {
- try
- {
- newValue = p.convert.call(this, newValue, p);
- }
- catch(ex)
- {
- throw new Error("Attention! Could not convert new value for " + p.name + ": " + newValue + ": " + ex);
- };
- };
-
- var oldValue = this[valueKey];
-
- if (newValue == oldValue) {
- return newValue;
- };
-
- if (!(newValue == null && p.allowNull))
- {
- if (p.hasType && typeof newValue != p.type) {
- return this.error("Attention! The value \"" + newValue + "\" is an invalid value for the property \"" + p.name + "\" which must be typeof \"" + p.type + "\" but is typeof \"" + typeof newValue + "\"!", QxConst.INTERNAL_SET + p.method);
- };
-
- if (p.hasInstance && !(newValue instanceof QxClasses[p.instance])) {
- return this.error("Attention! The value \"" + newValue + "\" is an invalid value for the property \"" + p.name + "\" which must be an instance of \"" + p.instance + "\"!", QxConst.INTERNAL_SET + p.method);
- };
-
- if (p.hasClassName && newValue.classname != p.classname) {
- return this.error("Attention! The value \"" + newValue + "\" is an invalid value for the property \"" + p.name + "\" which must be an object with the classname \"" + p.classname + "\"!", QxConst.INTERNAL_SET + p.method);
- };
-
- if (p.hasPossibleValues && newValue != null && !p.possibleValues.contains(newValue)) {
- return this.error("Failed to save value for " + p.name + ". '" + newValue + "' is not a possible value!", QxConst.INTERNAL_SET + p.method);
- };
- };
-
- // Allow to check and transform the new value before storage
- if (typeof this[checkKey] == QxConst.TYPEOF_FUNCTION)
- {
- try
- {
- newValue = this[checkKey](newValue, p);
-
- // Don't do anything if new value is indentical to old value
- if (newValue == oldValue) {
- return newValue;
- };
- }
- catch(ex)
- {
- return this.error("Failed to check property " + p.name + ": " + ex, checkKey);
- };
- };
-
- // Store new value
- this[valueKey] = newValue;
-
- // Check if there is a modifier implementation
- if (typeof this[modifyKey] == QxConst.TYPEOF_FUNCTION)
- {
- try
- {
- var r = this[modifyKey](newValue, oldValue, p);
- if (!r) {
- return this.error("Modification of property \"" + p.name + "\" failed without exception (" + r + ")", modifyKey);
- };
- }
- catch(ex)
- {
- return this.error("Modification of property \"" + p.name + "\" failed with exception (" + ex + ")", modifyKey);
- };
- };
-
- // Unit detection support
- if (p.hasUnitDetection) {
- this[unitDetectionKey](p, newValue);
- };
-
- // Auto queue addition support
- if (p.addToQueue) {
- this.addToQueue(p.name);
- }
- else if (p.addToQueueRuntime) {
- this.addToQueueRuntime(p.name);
- };
-
- // Auto state queue addition support
- if (p.addToStateQueue) {
- this._addToGlobalStateQueue();
- };
-
- // Create Event
- if (this instanceof QxTarget && this.hasEventListeners(changeKey))
- {
- var ce = new QxDataEvent(changeKey, newValue, oldValue, false);
-
- ce.setTarget(this);
-
- try
- {
- this.dispatchEvent(ce, true);
- }
- catch(ex)
- {
- throw new Error("Property " + p.name + " modified: Failed to dispatch change event: " + ex);
- };
-
- ce = null;
- };
-
- return newValue;
- };
+ };
+
+
// building user configured get alias for property
if (typeof p.getAlias == QxConst.TYPEOF_STRING) {
|