Revision: 2285
          http://vexi.svn.sourceforge.net/vexi/?rev=2285&view=rev
Author:   clrg
Date:     2007-09-20 11:42:09 -0700 (Thu, 20 Sep 2007)

Log Message:
-----------
Refine selectable:
- make selectable more robust especially to group removal
- micro-optimizations and cleaner code (trapee.groupref->var g)

Modified Paths:
--------------
    trunk/widgets/org.vexi.widgets/src/org/vexi/lib/role/selectable.t

Modified: trunk/widgets/org.vexi.widgets/src/org/vexi/lib/role/selectable.t
===================================================================
--- trunk/widgets/org.vexi.widgets/src/org/vexi/lib/role/selectable.t   
2007-09-20 17:58:32 UTC (rev 2284)
+++ trunk/widgets/org.vexi.widgets/src/org/vexi/lib/role/selectable.t   
2007-09-20 18:42:09 UTC (rev 2285)
@@ -37,20 +37,20 @@
         thisbox.prevselect;       // previous group member to select
         thisbox.selected = false; // selection status
         
-        group      ++= static.groupReadFunc;
-        group      ++= static.groupWriteFunc;
-        nextselect ++= static.nextSelectFunc;
-        prevselect ++= static.prevSelectFunc;
-        selected   ++= static.selectedReadFunc;
-        selected   ++= static.selectedWriteFunc;
-        action     ++= static.actionFunc;
-        focusable  ++= static.focusableFunc;
-        KeyPressed ++= static.keyPressFunc;
+        group      ++= static.groupRead;
+        group      ++= static.groupWrite;
+        nextselect ++= static.nextselectRead;
+        prevselect ++= static.prevselectRead;
+        selected   ++= static.selectedRead;
+        selected   ++= static.selectedWrite;
+        action     ++= static.actionWrite;
+        focusable  ++= static.focusableWrite;
+        KeyPressed ++= static.keypressWrite;
         
     </ui:box>
     
     /** group read trap */
-    static.groupReadFunc = function()
+    static.groupRead = function()
     {
         // if no group, get one
         if (!trapee.groupref) trapee.groupref = static.toGroup(trapee);
@@ -58,7 +58,7 @@
     }
     
     /** group write trap */
-    static.groupWriteFunc = function(v)
+    static.groupWrite = function(v)
     {
         // add us to group v
         trapee.groupref = static.toGroup(trapee, trapee.groupref, v);
@@ -66,60 +66,63 @@
     }
     
     /** find the next selectable member */
-    static.nextSelectFunc = function()
+    static.nextselectRead = function()
     {
         var ns = trapee;
+        var g = ns.groupref;
         do
         {
-            ns = trapee.groupref.members.after(ns);
-            if (!ns) ns = trapee.groupref.members.first;
+            ns = g.members.after(ns);
+            if (!ns) ns = g.members.first;
         } while (!ns.focusable and ns != trapee);
         
         return ns;
     }
     
     /** find the previous selectable member */
-    static.prevSelectFunc = function()
+    static.prevselectRead = function()
     {
         var ps = trapee;
+        var g = ps.groupref;
         do
         {
-            ps = trapee.groupref.members.before(ps);
-            if (!ps) ps = trapee.groupref.members.last;
+            ps = g.members.before(ps);
+            if (!ps) ps = g.members.last;
         } while (!ps.focusable and ps != trapee);
 
         return ps;
     }
     
     /** selected read trap */
-    static.selectedReadFunc = function()
+    static.selectedRead = function()
     {
         if (trapee.mixed) return true;
         else return cascade;
     }
     
     /** selected write trap */
-    static.selectedWriteFunc = function(v)
+    static.selectedWrite = function(v)
     {
-        if (trapee.groupref)
+        var g = trapee.groupref;
+        if (g)
         {
             if (v)
             {
-                if (trapee.groupref.selected != trapee)
+                if (g.selected != trapee)
                 {
-                    if (trapee.groupref.selected)
-                        trapee.groupref.selected.selected = false;
-                    trapee.groupref.selected = trapee;
+                    if (g.selected)
+                        g.selected.selected = false;
+                    g.selected = trapee;
                 }
             }
-            else if (trapee.groupref.selected == trapee)
-                trapee.groupref.selected = null;
+            else if (g.selected == trapee)
+                g.selected = null;
         }
         cascade = v;
     }
     
     /** clickable integration */
-    static.actionFunc = function(v)
+    static.actionWrite = function(v)
     {
         if (trapee.enabled)
             trapee.selected = true;
@@ -127,28 +130,35 @@
     }
     
     /** integration with clickable and focusable */
-    static.focusableFunc = function()
+    static.focusableWrite = function()
     {
-        return cascade and (trapee.primed or trapee.selected or 
!trapee.groupref or
+        return cascade and (trapee.groupref.keygroup or trapee.primed or 
trapee.selected or !trapee.groupref or
             (!trapee.groupref.selected and trapee.groupref.firstMember == 
trapee));
     }
     
     /** selection by keyboard navigation for selectable groups */
-    static.keyPressFunc = function(v)
+    static.keypressWrite = function(v)
     {
+        var g = trapee.groupref;
         // can't do anything
-        if (!trapee.groupref) { cascade = v; return; }
+        if (!g) { cascade = v; return; }
         
         // deal with key event
+        g.keygroup = true;
+        // forwards
         if (v == "down" or v == "right")
             trapee.nextselect.selected = true;
+        // backwards
         else if (v == "up" or v == "left")
             trapee.prevselect.selected = true;
+        // pass to other widget code
         else cascade = v;
+        // finished - move on
+        g.keygroup = false;
         
         // focus the next selected
-        if (trapee.groupref.selected and trapee.groupref.selected != trapee)
-            trapee.groupref.selected.focused = true;
+        if (g.selected and g.selected != trapee)
+            g.selected.focused = true;
     }
     
     // static content
@@ -158,8 +168,7 @@
     {
         // initialize new group
         var g = { members : (vexi..vexi.util.vector..newVector(v)),
-                  selected : null,
-                  selection : [] };
+                  keygroup : false, selected : null, selection : [] };
         
         // merge another select group with this one
         g.merge = function(group, after)


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: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Vexi-svn mailing list
Vexi-svn@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/vexi-svn

Reply via email to