2009-06-04 22:22:30 -04:00
|
|
|
USING: accessors assocs arrays fry kernel lexer make math math.parser
|
|
|
|
|
models models.product namespaces parser sequences
|
|
|
|
|
ui.frp.gadgets ui.gadgets ui.gadgets.books ui.gadgets.tracks
|
|
|
|
|
words tools.continuations ;
|
2009-05-24 10:36:24 -04:00
|
|
|
IN: ui.frp.layout
|
|
|
|
|
|
2009-06-06 21:58:12 -04:00
|
|
|
TUPLE: layout gadget size ; C: <layout> layout
|
2009-06-07 18:43:07 -04:00
|
|
|
ERROR: no-models models ;
|
2009-05-24 10:36:24 -04:00
|
|
|
|
2009-06-04 22:22:30 -04:00
|
|
|
SYNTAX: ,% scan string>number [ <layout> , ] curry over push-all ;
|
|
|
|
|
SYNTAX: ->% scan string>number '[ [ _ <layout> , ] [ output-model ] bi ] over push-all ;
|
2009-05-24 10:36:24 -04:00
|
|
|
|
|
|
|
|
GENERIC: -> ( uiitem -- model )
|
|
|
|
|
M: gadget -> dup , output-model ;
|
|
|
|
|
M: model -> dup , ;
|
|
|
|
|
|
2009-06-04 22:22:30 -04:00
|
|
|
: <spacer> ( -- ) <gadget> 1 <layout> , ;
|
|
|
|
|
|
|
|
|
|
SYMBOL: wordnames
|
2009-06-07 18:03:32 -04:00
|
|
|
: insert-layout ( track layout -- track ) [ gadget>> ] [ size>> ] bi track-add ; inline
|
|
|
|
|
: layouts ( sized? gadgets -- layouts ) [ [ gadget? ] [ layout? ] bi or ] filter swap
|
|
|
|
|
[ [ dup layout? [ f <layout> ] unless ] map ] when ;
|
|
|
|
|
: make-layout ( building sized? -- models words layouts ) [ swap layouts ] curry
|
|
|
|
|
[ { } make [ [ model? ] filter ] [ [ word? ] filter ] ] dip tri ; inline
|
|
|
|
|
: handle-words ( words gadget -- gadget ) tuck
|
|
|
|
|
[ [ swap 2array ] curry wordnames get swap change-at ] curry each ;
|
2009-05-24 10:36:24 -04:00
|
|
|
: <box> ( gadgets type -- track )
|
2009-06-07 18:03:32 -04:00
|
|
|
[ t make-layout ] dip <track>
|
|
|
|
|
swap [ insert-layout ] each
|
|
|
|
|
handle-words
|
2009-06-04 22:22:30 -04:00
|
|
|
swap [ <product> >>model ] unless-empty ; inline
|
2009-05-24 10:36:24 -04:00
|
|
|
: <hbox> ( gadgets -- track ) horizontal <box> ; inline
|
|
|
|
|
: <vbox> ( gadgets -- track ) vertical <box> ; inline
|
2009-05-30 11:58:32 -04:00
|
|
|
|
2009-06-07 18:43:07 -04:00
|
|
|
: <frp-book> ( quot: ( -- model ) -- book ) f make-layout roll dup activate-model <book> handle-words
|
|
|
|
|
swap [ no-models ] unless-empty ; inline
|
2009-06-07 19:42:20 -04:00
|
|
|
: <frp-book*> ( quot -- book ) f make-layout f <book> handle-words
|
|
|
|
|
swap [ no-models ] unless-empty ; inline
|
2009-06-04 22:22:30 -04:00
|
|
|
|
|
|
|
|
SYNTAX: $ CREATE-WORD dup [ , ] curry (( -- )) define-declared "$" expect
|
|
|
|
|
word [ [ building get length swap wordnames get set-at ] [ , ] bi ] curry over push-all ;
|
|
|
|
|
|
2009-06-07 18:03:32 -04:00
|
|
|
: insert-gadget ( number parent gadget -- ) -rot [ but-last insert-nth ] change-children drop ;
|
2009-06-07 19:42:20 -04:00
|
|
|
: insert-size ( number parent size -- ) -rot [ but-last insert-nth ] change-sizes drop ;
|
2009-06-07 18:03:32 -04:00
|
|
|
|
2009-06-04 22:22:30 -04:00
|
|
|
GENERIC# insert-item 1 ( item location -- )
|
2009-06-07 18:03:32 -04:00
|
|
|
M: gadget insert-item dup first book? [ first2 spin [ add-gadget ] keep insert-gadget ]
|
|
|
|
|
[ [ f <layout> ] dip insert-item ] if ;
|
2009-06-07 19:42:20 -04:00
|
|
|
M: layout insert-item first2 spin [ insert-layout ] keep [ gadget>> insert-gadget ] [ size>> insert-size ] 3bi ;
|
2009-06-07 18:43:07 -04:00
|
|
|
M: model insert-item dup first book? [ no-models ]
|
2009-06-07 18:03:32 -04:00
|
|
|
[ first model>> swap add-connection ] if ;
|
2009-06-04 22:22:30 -04:00
|
|
|
|
|
|
|
|
: insert-items ( makelist -- ) f swap [ dup word?
|
2009-06-07 18:03:32 -04:00
|
|
|
[ nip ] [
|
|
|
|
|
over [ wordnames get at insert-item ] [ wordnames get [ first2 1 + 2array ] change-at ] bi
|
|
|
|
|
] if ] each drop ;
|
2009-06-04 22:22:30 -04:00
|
|
|
|
|
|
|
|
: with-interface ( quot: ( -- gadget ) -- gadget ) H{ } clone wordnames
|
2009-06-06 21:58:12 -04:00
|
|
|
[ { } make insert-items ] with-variable ; inline
|
2009-06-07 19:42:20 -04:00
|
|
|
|
|
|
|
|
! while children are changed, sizes aren't
|