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)+ " &lt;- 
event-" + e.name);//state-" + state?state.name:null );
+                    if (log) log("state:"+(state?state.name:null)+ " &lt;- 
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

Reply via email to