Revision: 3149
http://vexi.svn.sourceforge.net/vexi/?rev=3149&view=rev
Author: mkpg2
Date: 2008-10-28 06:07:57 +0000 (Tue, 28 Oct 2008)
Log Message:
-----------
Features.
- Added a trappable exit property. So the creator of the workflow can execute
code when the workflow has finished.
- Added autoexiting, where the holders current pageflow will exit if it has
the 'exit' transition available in its current state.
Modified Paths:
--------------
trunk/widgets/org.vexi.pageflow/src/vexi/pageflow/holder.t
trunk/widgets/org.vexi.pageflow/src/vexi/pageflow/pageflow.t
trunk/widgets/org.vexi.pageflow/src/vexi/pageflow/state.t
Modified: trunk/widgets/org.vexi.pageflow/src/vexi/pageflow/holder.t
===================================================================
--- trunk/widgets/org.vexi.pageflow/src/vexi/pageflow/holder.t 2008-10-28
00:34:09 UTC (rev 3148)
+++ trunk/widgets/org.vexi.pageflow/src/vexi/pageflow/holder.t 2008-10-28
06:07:57 UTC (rev 3149)
@@ -6,6 +6,8 @@
</meta:doc>
<ui:box>
+ // FEATURE - trappable property which tells us if its possible to exit
+ // from any current workflows and free up the holder
var locked = null;
@@ -19,6 +21,13 @@
locked = null;
};
+ thisbox.attemptExit = function(){
+ vexi.trace(locked);
+ if(locked!=null){
+ locked.event = "exit";
+ }
+ };
+
// Position in children
thisbox.Children ++= function(c) {
if (c) {
Modified: trunk/widgets/org.vexi.pageflow/src/vexi/pageflow/pageflow.t
===================================================================
--- trunk/widgets/org.vexi.pageflow/src/vexi/pageflow/pageflow.t
2008-10-28 00:34:09 UTC (rev 3148)
+++ trunk/widgets/org.vexi.pageflow/src/vexi/pageflow/pageflow.t
2008-10-28 06:07:57 UTC (rev 3149)
@@ -17,8 +17,10 @@
thisbox.log = null;
thisbox.holder = arguments[0];
thisbox.startstate;
- thisbox.state;
- thisbox.event;
+ thisbox.state;
+ thisbox.event; // containers, external actors put to this to
transition the pageflow
+ thisbox.exit; // put to when the workflow has finished
+ // TODO FEATURE - exception handler
var syncFlag = false;
var asyncError = null;
@@ -46,10 +48,12 @@
thisbox.start = function() {
if (log) log("pageflow starting");
- thisbox.event = "[start]";
+ thisbox.holder.attemptExit();
+ thisbox.event = "start";
thisbox.state = states[startstate];
};
+ // DEPRECATED
thisbox.startAndWait = function() {
start();
syncFlag = true;
@@ -66,24 +70,28 @@
if (typeof(e)=="string") e = {name: e};
static.checkEvent(e);
var name = e.name;
- if (state!=null) {
- var transition = state.transitions[name];
- if(transition==null) throw "no such transition: '" + name+"'";
- var next = transition.next;
- if (next=="[exit]") state = null;
- else if (next=="[self]") state = state;
- else if (states[next] == null) throw "no such state:
'"+next+"'";
- else state = states[next];
- } else {
- // we should be the start event
- assert(name=="[start]");
- }
+
+ if(state){
+ var transition = state.transitions[name];
+ if(transition==null) throw "no such transition: '" +
name+"'";
+ var next = transition.next;
+ if (next=="[exit]") state = null;
+ else if (next=="[self]") state = state;
+ else if (states[next] == null) throw "no such state:
'"+next+"'";
+ else state = states[next];
+ }else{
+ // the start event
+ assert(name=="start");
+ }
cascade = e;
vexi.thread = function() {
try {
- if (log) log("state-"+(state?state.name:null)+ " <-
event-" + e.name);//state-" + state?state.name:null );
+ if (log) log("state:"+(state?state.name:null)+ " <-
event:" + e.name);//state-" + state?state.name:null );
if (state) state.event = e;
- else syncFlag = false;
+ else {
+ exit = e;
+ syncFlag = false;
+ }
} catch(exn) {
if (syncFlag) {
syncFlag = false;
Modified: trunk/widgets/org.vexi.pageflow/src/vexi/pageflow/state.t
===================================================================
--- trunk/widgets/org.vexi.pageflow/src/vexi/pageflow/state.t 2008-10-28
00:34:09 UTC (rev 3148)
+++ trunk/widgets/org.vexi.pageflow/src/vexi/pageflow/state.t 2008-10-28
06:07:57 UTC (rev 3149)
@@ -36,5 +36,9 @@
return;
};
+ thisbox.hasExit ++= function(){
+ return transitions["exit"]!=null;
+ };
+
</ui:box>
</vexi>
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Vexi-svn mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/vexi-svn