2 USING: kernel sequences math math.order
3 ui.gadgets ui.gadgets.tracks ui.gestures accessors fry
9 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
11 ARTICLE: "ui.gadgets.tiling" "Tiling Layout Gadgets"
15 A gadget which tiles it's children.
17 A tiling gadget may contain any number of children, but only a
18 fixed number is displayed at one time. How many are displayed can
19 be controlled via Control-[ and Control-].
21 The focus may be switched with Alt-Left and Alt-Right.
23 The focused child may be moved via Shift-Alt-Left and
29 "resource:" directory-files
30 [ [ drop ] <bevel-button> tiling-add ]
32 "Files" open-window ..
36 ABOUT: "ui.gadgets.tiling"
38 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
40 TUPLE: tiling < track gadgets tiles first focused ;
42 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
44 : init-tiling ( tiling -- tiling )
52 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
54 : <tiling> ( -- gadget ) tiling new init-tiling ;
56 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
58 : bounded-subseq ( seq a b -- seq )
60 pick length [ min ] curry bi@
64 : tiling-gadgets-to-map ( tiling -- gadgets )
67 [ [ first>> ] [ tiles>> ] bi + ]
71 : tiling-map-gadgets ( tiling -- tiling )
73 dup tiling-gadgets-to-map [ 1 track-add ] each ;
75 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
77 : tiling-add ( tiling gadget -- tiling )
81 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
83 : first-gadget ( tiling -- index ) drop 0 ;
85 : last-gadget ( tiling -- index ) gadgets>> length 1 - ;
87 : first-viewable ( tiling -- index ) first>> ;
89 : last-viewable ( tiling -- index ) [ first>> ] [ tiles>> ] bi + 1 - ;
91 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
93 : make-focused-mapped ( tiling -- tiling )
95 dup [ focused>> ] [ first>> ] bi <
96 [ dup first>> 1 - >>first ]
100 dup [ last-viewable ] [ focused>> ] bi <
101 [ dup first>> 1 + >>first ]
105 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
107 : check-focused-bounds ( tiling -- tiling )
108 dup focused>> 0 max over gadgets>> length 1 - min >>focused ;
110 : focus-prev ( tiling -- tiling )
111 dup focused>> 1 - >>focused
117 : focus-next ( tiling -- tiling )
118 dup focused>> 1 + >>focused
124 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
126 : exchanged! ( seq a b -- )
128 pick length 1 - '[ _ min ] bi@
131 : move-prev ( tiling -- tiling )
132 dup [ gadgets>> ] [ focused>> 1 - ] [ focused>> ] tri exchanged!
135 : move-next ( tiling -- tiling )
136 dup [ gadgets>> ] [ focused>> ] [ focused>> 1 + ] tri exchanged!
139 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
141 : add-tile ( tiling -- tiling )
142 dup tiles>> 1 + >>tiles
145 : del-tile ( tiling -- tiling )
146 dup tiles>> 1 - 1 max >>tiles
149 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
151 M: tiling focusable-child* ( tiling -- child/t )
152 [ focused>> ] [ gadgets>> ] bi nth ;
154 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
156 TUPLE: tiling-shelf < tiling ;
157 TUPLE: tiling-pile < tiling ;
159 : <tiling-shelf> ( -- gadget )
160 tiling-shelf new init-tiling { 1 0 } >>orientation ;
162 : <tiling-pile> ( -- gadget )
163 tiling-pile new init-tiling { 0 1 } >>orientation ;
167 { T{ key-down f { A+ } "LEFT" } [ focus-prev drop ] }
168 { T{ key-down f { A+ } "RIGHT" } [ focus-next drop ] }
169 { T{ key-down f { S+ A+ } "LEFT" } [ move-prev drop ] }
170 { T{ key-down f { S+ A+ } "RIGHT" } [ move-next drop ] }
171 { T{ key-down f { C+ } "[" } [ del-tile drop ] }
172 { T{ key-down f { C+ } "]" } [ add-tile drop ] }
178 { T{ key-down f { A+ } "UP" } [ focus-prev drop ] }
179 { T{ key-down f { A+ } "DOWN" } [ focus-next drop ] }
180 { T{ key-down f { S+ A+ } "UP" } [ move-prev drop ] }
181 { T{ key-down f { S+ A+ } "DOWN" } [ move-next drop ] }
182 { T{ key-down f { C+ } "[" } [ del-tile drop ] }
183 { T{ key-down f { C+ } "]" } [ add-tile drop ] }