]> gitweb.factorcode.org Git - factor.git/blob - basis/ui/gadgets/tracks/tracks.factor
Updating code for make and fry changes
[factor.git] / basis / ui / gadgets / tracks / tracks.factor
1 ! Copyright (C) 2006, 2008 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors io kernel math namespaces
4        sequences words math.vectors ui.gadgets ui.gadgets.packs
5        math.geometry.rect fry ;
6
7 IN: ui.gadgets.tracks
8
9 TUPLE: track < pack sizes ;
10
11 : normalized-sizes ( track -- seq )
12   sizes>> dup sift sum '[ dup [ _ / ] when ] map ;
13
14 : init-track ( track -- track )
15   init-gadget
16   V{ } clone >>sizes
17   1          >>fill ;
18
19 : new-track ( orientation class -- track )
20   new
21     init-track
22     swap >>orientation ;
23
24 : <track> ( orientation -- track ) track new-track ;
25
26 : alloted-dim ( track -- dim )
27   [ children>> ] [ sizes>> ] bi { 0 0 }
28   [ [ drop { 0 0 } ] [ pref-dim ] if v+ ] 2reduce ;
29
30 : available-dim ( track -- dim ) [ dim>> ] [ alloted-dim ] bi v- ;
31
32 : track-layout ( track -- sizes )
33     [ available-dim ] [ children>> ] [ normalized-sizes ] tri
34     [ [ over n*v ] [ pref-dim ] ?if ] 2map nip ;
35
36 M: track layout* ( track -- ) dup track-layout pack-layout ;
37
38 : track-pref-dims-1 ( track -- dim ) children>> pref-dims max-dim ;
39
40 : track-pref-dims-2 ( track -- dim )
41   [ children>> pref-dims ] [ normalized-sizes ] bi
42   [ [ v/n ] when* ] 2map
43   max-dim
44   [ >fixnum ] map ;
45
46 M: track pref-dim* ( gadget -- dim )
47    [ track-pref-dims-1                           ]
48    [ [ alloted-dim ] [ track-pref-dims-2 ] bi v+ ]
49    [ orientation>>                               ]
50    tri
51    set-axis ;
52
53 : track-add ( track gadget constraint -- track )
54   pick sizes>> push add-gadget ;
55
56 : track-remove ( track gadget -- track )
57   dupd dup
58     [
59       [ swap children>> index ]
60       [ unparent sizes>>      ] 2bi
61       delete-nth 
62     ]
63     [ 2drop ]
64   if ;
65
66 : clear-track ( track -- ) V{ } clone >>sizes clear-gadget ;