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