diff --git a/basis/ui/gadgets/tracks/tracks-tests.factor b/basis/ui/gadgets/tracks/tracks-tests.factor index ab9de3c238..9abe70bfaa 100644 --- a/basis/ui/gadgets/tracks/tracks-tests.factor +++ b/basis/ui/gadgets/tracks/tracks-tests.factor @@ -1,5 +1,5 @@ USING: kernel ui.gadgets ui.gadgets.tracks tools.test - math.rectangles accessors ; +math.rectangles accessors sequences ; IN: ui.gadgets.tracks.tests [ { 100 100 } ] [ @@ -37,4 +37,26 @@ IN: ui.gadgets.tracks.tests { 10 10 } >>dim f track-add { 10 10 } >>dim f track-add pref-dim +] unit-test + +[ V{ { 10 10 } { 10 80 } { 10 10 } } ] [ + vertical + 0 >>fill + { 10 10 } >>dim f track-add + { 10 10 } >>dim 1 track-add + { 10 10 } >>dim f track-add + { 10 100 } >>dim + [ layout ] [ children>> [ dim>> ] map ] bi +] unit-test + +[ V{ { 10 10 } { 10 35 } { 10 10 } { 10 35 } { 10 10 } } ] [ + vertical + 0 >>fill + { 10 10 } >>dim f track-add + { 10 10 } >>dim 1/2 track-add + { 10 10 } >>dim f track-add + { 10 10 } >>dim 1/2 track-add + { 10 10 } >>dim f track-add + { 10 100 } >>dim + [ layout ] [ children>> [ dim>> ] map ] bi ] unit-test \ No newline at end of file diff --git a/basis/ui/gadgets/tracks/tracks.factor b/basis/ui/gadgets/tracks/tracks.factor index fb43ceaa78..bf86c7f34e 100644 --- a/basis/ui/gadgets/tracks/tracks.factor +++ b/basis/ui/gadgets/tracks/tracks.factor @@ -1,40 +1,40 @@ -! Copyright (C) 2006, 2008 Slava Pestov. +! Copyright (C) 2006, 2009 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. -USING: accessors io kernel namespaces fry -math math.vectors math.rectangles math.order -sequences words ui.gadgets ui.gadgets.packs ; +USING: accessors io kernel namespaces fry math math.vectors +math.rectangles math.order sequences words ui.gadgets ui.gadgets.packs +ui.gadgets.packs.private combinators ; IN: ui.gadgets.tracks TUPLE: track < pack sizes ; -: normalized-sizes ( track -- seq ) - sizes>> dup sift sum '[ dup [ _ / ] when ] map ; - -: init-track ( track -- track ) - V{ } clone >>sizes - 1 >>fill ; inline - : new-track ( orientation class -- track ) - new-gadget - init-track + new + 1 >>fill + V{ } clone >>sizes swap >>orientation ; inline : ( orientation -- track ) track new-track ; +> dup sift sum '[ dup [ _ / ] when ] map ; + : alloted-dim ( track -- dim ) [ children>> ] [ sizes>> ] bi { 0 0 } - [ [ drop { 0 0 } ] [ pref-dim ] if v+ ] 2reduce ; - -: gap-dim ( track -- dim ) - [ gap>> ] [ children>> length 1 [-] ] bi v*n ; + [ [ drop ] [ pref-dim v+ ] if ] 2reduce ; : available-dim ( track -- dim ) [ dim>> ] [ alloted-dim ] bi v- ; : track-layout ( track -- sizes ) - [ [ available-dim ] [ gap-dim ] bi v- ] - [ children>> ] [ normalized-sizes ] tri - [ [ over n*v ] [ pref-dim ] ?if ] 2map nip ; + { + [ children>> pref-dims ] + [ normalized-sizes ] + [ [ available-dim ] [ gap-dim ] bi v- ] + [ orientation>> ] + } cleave + '[ [ _ n*v _ set-axis ] when* ] 2map ; M: track layout* ( track -- ) dup track-layout pack-layout ; @@ -55,14 +55,17 @@ M: track pref-dim* ( gadget -- dim ) tri set-axis ; +PRIVATE> + : track-add ( track gadget constraint -- track ) pick sizes>> push add-gadget ; : track-remove ( track gadget -- track ) - dupd dup [ + [ drop ] [ [ swap children>> index ] - [ unparent sizes>> ] 2bi - delete-nth - ] [ 2drop ] if ; + [ drop sizes>> ] + [ nip unparent ] + 2tri delete-nth + ] 2bi ; : clear-track ( track -- ) [ sizes>> delete-all ] [ clear-gadget ] bi ;