diff options
Diffstat (limited to 'webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/util/fsm/Transition.js')
-rw-r--r-- | webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/util/fsm/Transition.js | 384 |
1 files changed, 0 insertions, 384 deletions
diff --git a/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/util/fsm/Transition.js b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/util/fsm/Transition.js deleted file mode 100644 index e417e23298..0000000000 --- a/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/util/fsm/Transition.js +++ /dev/null @@ -1,384 +0,0 @@ -/* ************************************************************************ - - qooxdoo - the new era of web development - - http://qooxdoo.org - - Copyright: - 2006 by Derrell Lipman - - License: - LGPL 2.1: http://www.gnu.org/licenses/lgpl.html - - Authors: - * Derrell Lipman (derrell) - -************************************************************************ */ - -/* ************************************************************************ - -#module(util_fsm) -#require(qx.util.fsm.FiniteStateMachine) - -************************************************************************ */ - -/** - * Create a new possible transition from one state to another. - * - * *EXPERIMENTAL* - * The interface to the finite state machine, states, and transitions is - * experimental. It may change in non-backward-compatible ways as more - * experience is gained in its use. - * - * @param transitionName {string} - * The name of this transition, used in debug messages. - * - * @param transitionInfo {Object} - * An object optionally containing any of the following properties: - * - * predicate - - * A function which is called to determine whether this transition is - * acceptable. An acceptable transition will cause the transition's - * "ontransition" function to be run, the current state's "onexit" - * function to be run, and the new state's "onentry" function to be run. - * - * The predicate function's signature is function(fsm, event) and it is - * saved in the predicate property of the transition object. In the - * predicate function: - * - * fsm - - * The finite state machine object to which this state is attached. - * - * event - - * The event that caused a run of the finite state machine - * - * The predicate function should return one of the following three - * values: - * - * - true means the transition is acceptable - * - * - false means the transition is not acceptable, and the next - * transition (if one exists) should be tried to determine if it is - * acceptable - * - * - null means that the transition determined that no further - * transitions should be tried. This might be used when the - * transition ascertained that the event is for a target that is not - * available in the current state, and the event has called - * fsm.queueEvent() to have the event delivered upon state - * transition. - * - * It is possible to create a default predicate -- one that will cause a - * transition to be acceptable always -- by either not providing a - * predicate property, or by explicitely either setting the predicate - * property to 'true' or setting it to a function that unconditionally - * returns 'true'. This default transition should, of course, always be - * the last transition added to a state, since no transition added after - * it will ever be tried. - * - * nextState - - * The state to which we transition, if the predicate returns true - * (meaning the transition is acceptable). The value of nextState may - * be: - * - * - a string, the state name of the state to transition to - * - * - One of the constants: - * - qx.util.fsm.FiniteStateMachine.StateChange.CURRENT_STATE: - * Remain in whatever is the current state - * - qx.util.fsm.FiniteStateMachine.StateChange.POP_STATE_STACK: - * Transition to the state at the top of the saved-state stack, - * and remove the top element from the saved-state stack. - * Elements are added to the saved-state stack using - * fsm.pushState(). It is an error if no state exists on the - * saved-state stack. - * - qx.util.fsm.FiniteStateMachine.StateChange.TERMINATE: - * TBD - * - * autoActionsBeforeOntransition - - * autoActionsAfterOntransition - - * Automatic actions which take place at the time specified by the - * property name. In all cases, the action takes place immediately - * before or after the specified function. - * - * The property value for each of these properties is an object which - * describes some number of functions to invoke on a set of specified - * objects (typically widgets). - * - * See {@see qx.util.fsm.State} for an example of autoActions. - * - * ontransition - - * A function which is called if the predicate function for this - * transition returns true. Its signature is function(fsm, event) and - * it is saved in the ontransition property of the transition object. - * In the ontransition function: - * - * fsm - - * The finite state machine object to which this state is attached. - * - * event - - * The event that caused a run of the finite state machine - * - * Additional properties may be provided in transInfo. They will not be - * used by the finite state machine, but will be available via - * this.getUserData("<propertyName>") during the transition's predicate - * and ontransition functions. - */ -qx.OO.defineClass("qx.util.fsm.Transition", qx.core.Object, -function(transitionName, transitionInfo) -{ - // Call our superclass' constructor - qx.core.Object.call(this, true); - - // Save the state name - this.setName(transitionName); - - // Save data from the transitionInfo object - for (var field in transitionInfo) - { - // If we find one of our properties, call its setter. - switch(field) - { - case "predicate": - this.setPredicate(transitionInfo[field]); - break; - - case "nextState": - this.setNextState(transitionInfo[field]); - break; - - case "autoActionsBeforeOntransition": - this.setAutoActionsBeforeOntransition(transitionInfo[field]); - break; - - case "autoActionsAfterOntransition": - this.setAutoActionsAfterOntransition(transitionInfo[field]); - break; - - case "ontransition": - this.setOntransition(transitionInfo[field]); - break; - - default: - // Anything else is user-provided data for their own use. Save it. - this.setUserData(field, transitionInfo[field]); - - // Log it in case it was a typo and they intended a built-in field - this.debug("Transition " + transitionName + ": " + - "Adding user-provided field to transition: " + field); - - break; - } - } -}); - - - - -/* ---------------------------------------------------------------------------- - PROPERTIES ---------------------------------------------------------------------------- -*/ - -/** - * The name of this transition - */ -qx.OO.addProperty( - { - name : "name", - type : "string" - }); - -/** - * The predicate function for this transition. This is documented in the - * constructor, and is typically provided through the constructor's - * transitionInfo object, but it is also possible (but highly NOT recommended) - * to change this dynamically. - */ -qx.OO.addProperty( - { - name : "predicate", - defaultValue : function(fsm, event) { return true; } - }); - -/** - * The state to transition to, if the predicate determines that this - * transition is acceptable. This is documented in the constructor, and is - * typically provided through the constructor's transitionInfo object, but it - * is also possible (but highly NOT recommended) to change this dynamically. - */ -qx.OO.addProperty( - { - name : "nextState", - defaultValue : qx.util.fsm.FiniteStateMachine.StateChange.CURRENT_STATE - }); - -/** - * Automatic actions to take prior to calling the transition's ontransition - * function. This is documented in the constructor, and is typically provided - * through the constructor's transitionInfo object, but it is also possible - * (but highly NOT recommended) to change this dynamically. - */ -qx.OO.addProperty( - { - name : "autoActionsBeforeOntransition", - defaultValue : function(fsm, event) { } - }); - -/** - * Automatic actions to take immediately after calling the transition's - * ontransition function. This is documented in the constructor, and is - * typically provided through the constructor's transitionInfo object, but it - * is also possible (but highly NOT recommended) to change this dynamically. - */ -qx.OO.addProperty( - { - name : "autoActionsAfterOntransition", - defaultValue : function(fsm, event) { } - }); - - -/** - * The function run when the transition is accepted. This is documented in - * the constructor, and is typically provided through the constructor's - * transitionInfo object, but it is also possible (but highly NOT recommended) - * to change this dynamically. - */ -qx.OO.addProperty( - { - name : "ontransition", - defaultValue : function(fsm, event) { } - }); - - - - -/* ---------------------------------------------------------------------------- - MODIFIER ---------------------------------------------------------------------------- -*/ - -qx.Proto._checkName = function(propValue, propData) -{ - // Ensure that we got a valid state name - if (typeof(propValue) != "string" || propValue.length < 1) - { - throw new Error("Invalid transition name"); - } - - return propValue; -}; - -qx.Proto._checkPredicate = function(propValue, propData) -{ - // Validate the predicate. Convert all valid types to function. - switch(typeof(propValue)) - { - case "undefined": - // No predicate means predicate passes - return function(fsm, event) { return true; }; - - case "boolean": - // Convert boolean predicate to a function which returns that value - return function(fsm, event) { return propValue; }; - - case "function": - // Use user-provided function. - return propValue; - - default: - throw new Error("Invalid transition predicate type: " + - typeof(propValue)); - break; - } -}; - -qx.Proto._checkNextState = function(propValue, propData) -{ - // Validate nextState. It must be a string or a number. - switch(typeof(propValue)) - { - case "string": - return propValue; - - case "number": - // Ensure that it's one of the possible state-change constants - switch(propValue) - { - case qx.util.fsm.FiniteStateMachine.StateChange.CURRENT_STATE: - case qx.util.fsm.FiniteStateMachine.StateChange.POP_STATE_STACK: - case qx.util.fsm.FiniteStateMachine.StateChange.TERMINATE: - return propValue; - - default: - throw new Error("Invalid transition nextState value: " + - propValue + - ": nextState must be an explicit state name, " + - "or one of the Fsm.StateChange constants"); - } - break; - - default: - throw new Error("Invalid transition nextState type: " + typeof(propValue)); - break; - } -}; - -qx.Proto._checkOntransition = function(propValue, propData) -{ - // Validate the ontransition function. Convert undefined to function. - switch(typeof(propValue) ) - { - case "undefined": - // No provided function just means do nothing. Use a null function. - return function(fsm, event) { }; - - case "function": - // Use user-provided function. - return propValue; - - default: - throw new Error("Invalid ontransition type: " + typeof(propValue)); - break; - } -}; - -/* ---------------------------------------------------------------------------- - UTILITIES ---------------------------------------------------------------------------- -*/ - - -/* ---------------------------------------------------------------------------- - EVENT LISTENERS ---------------------------------------------------------------------------- -*/ - - - -/* ---------------------------------------------------------------------------- - CLASS CONSTANTS ---------------------------------------------------------------------------- -*/ - - - -/* ---------------------------------------------------------------------------- - DISPOSER ---------------------------------------------------------------------------- -*/ - -qx.Proto.dispose = function() -{ - if (this.getDisposed()) { - return true; - } - - return qx.core.Object.prototype.dispose.call(this); -} |