diff --git a/extra/recipes/recipes.factor b/extra/recipes/recipes.factor index a99e65cf5c..7fd7dc559c 100644 --- a/extra/recipes/recipes.factor +++ b/extra/recipes/recipes.factor @@ -11,7 +11,7 @@ STORED-TUPLE: recipe { title { VARCHAR 100 } } { votes INTEGER } { txt TEXT } { "recipes.db" temp-file recipe define-db : top-recipes ( offset search -- recipes ) T{ recipe } rot >>title >>tuple "votes" >>order 30 >>limit swap >>offset get-tuples ; -: top-genres ( -- genres ) f f top-recipes [ genre>> ] map prune 4 (head-slice) ; +: top-genres ( -- genres ) f f top-recipes [ genre>> ] map prune 4 short head-slice ; : interface ( -- book ) [ [ diff --git a/extra/ui/gadgets/layout/layout.factor b/extra/ui/gadgets/layout/layout.factor index 309c86c5f6..3949ba6ee4 100644 --- a/extra/ui/gadgets/layout/layout.factor +++ b/extra/ui/gadgets/layout/layout.factor @@ -35,7 +35,7 @@ M: model -> dup , ; : ( -- ) 1 , ; -: add-layout ( track layout -- track ) [ gadget>> ] [ size>> ] bi track-add ; inline +: add-layout ( track layout -- track ) [ gadget>> ] [ size>> ] bi track-add ; : layouts ( sized? gadgets -- layouts ) [ [ gadget? ] [ layout? ] bi or ] filter swap [ [ dup layout? [ f ] unless ] map ] [ [ dup gadget? [ gadget>> ] unless ] map ] if ; @@ -61,10 +61,16 @@ SYNTAX: $ CREATE-WORD dup : insert-size ( number parent size -- ) -rot [ but-last insert-nth ] change-sizes drop ; : insertion-point ( placeholder -- number parent ) dup parent>> [ children>> index ] keep ; +GENERIC: >layout ( gadget -- layout ) +M: gadget >layout f ; +M: layout >layout ; + +GENERIC# (add-gadget-at) 2 ( parent item n -- ) +M: gadget (add-gadget-at) -rot [ add-gadget ] keep insert-gadget ; +M: track (add-gadget-at) -rot >layout [ add-layout ] keep [ gadget>> insert-gadget ] [ size>> insert-size ] 3bi ; + GENERIC# add-gadget-at 1 ( item location -- ) -M: gadget add-gadget-at dup parent>> track? [ [ f ] dip add-gadget-at ] - [ insertion-point rot [ add-gadget ] keep insert-gadget ] if ; -M: layout add-gadget-at insertion-point rot [ add-layout ] keep [ gadget>> insert-gadget ] [ size>> insert-size ] 3bi ; +M: object add-gadget-at insertion-point -rot (add-gadget-at) ; M: model add-gadget-at parent>> dup book:book? [ "No models in books" throw ] [ dup model>> dup collection? [ nip swap add-connection ] [ drop [ 1array ] dip (>>model) ] if ] if ; : track-add-at ( item location size -- ) swap [ ] dip add-gadget-at ;