]> gitweb.factorcode.org Git - factor.git/commitdiff
frp.layout works with books
authorSam Anklesaria <sam@Tintin.local>
Sun, 7 Jun 2009 22:03:32 +0000 (17:03 -0500)
committerSam Anklesaria <sam@Tintin.local>
Sun, 7 Jun 2009 22:03:32 +0000 (17:03 -0500)
extra/persistency/persistency.factor
extra/ui/frp/layout/layout.factor

index 9a4b99c457034221388315ba63be30fac2478dd0..683318f98bd47c8ae0aa43cdce36202045d08d4e 100644 (file)
@@ -6,11 +6,12 @@ IN: persistency
 
 TUPLE: persistent id ;
 UNION: bool word POSTPONE: f ;
-PREDICATE: short-string < string length 100 <= ;
+UNION: short-string string ;
+
 : db-ize ( class -- db-class ) {
    { bool [ BOOLEAN ] }
-   { string [ TEXT ] }
    { short-string [ { VARCHAR 100 } ] }
+   { string [ TEXT ] }
    { float [ DOUBLE ] }
    { timestamp [ TIMESTAMP ] }
    { fixnum [ INTEGER ] }
index 17fc4a8abda45ddb49fcc5052cdbc178fc533d65..48cb0398e068bfa26e1f32b81a429ef10477244e 100644 (file)
@@ -16,30 +16,39 @@ M: model -> dup , ;
 : <spacer> ( -- ) <gadget> 1 <layout> , ;
 
 SYMBOL: wordnames
-: layouts ( gadgets -- layouts ) [ [ gadget? ] [ layout? ] bi or ] filter
-   [ dup layout? [ f <layout> ] unless ] map ;
+: 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 ;
 : <box> ( gadgets type -- track )
-   [ { } make [ [ model? ] filter ] [ [ word? ] filter ] [ layouts ] tri ] dip <track>
-   swap [ [ gadget>> ] [ size>> ] bi track-add ] each
-   tuck [ [ swap 2array ] curry wordnames get swap change-at ] curry each
+   [ t make-layout ] dip <track>
+   swap [ insert-layout ] each
+   handle-words
    swap [ <product> >>model ] unless-empty ; inline
 : <hbox> ( gadgets -- track ) horizontal <box> ; inline
 : <vbox> ( gadgets -- track ) vertical <box> ; inline
 
-: <frp-book> ( gadgets -- book ) { } make [ gadget>> ] map f <book> ; inline
+: <frp-book> ( gadgets -- book ) f make-layout f <book> handle-words ; inline
 
 SYNTAX: $ CREATE-WORD dup [ , ] curry (( -- )) define-declared "$" expect
    word [ [ building get length swap wordnames get set-at ] [ , ] bi ] curry over push-all ;
 
+: insert-gadget ( number parent gadget -- ) -rot [ but-last insert-nth ] change-children drop ;
+
 GENERIC# insert-item 1 ( item location -- )
-M: gadget insert-item [ f <layout> ] dip insert-item ;
-M: layout insert-item first2 spin [ [ gadget>> ] [ size>> ] bi track-add ] keep gadget>> 
-   -rot [ but-last insert-nth ] change-children drop ;
-M: model insert-item first model>> swap add-connection ;
+M: gadget insert-item dup first book? [ first2 spin [ add-gadget ] keep insert-gadget ]
+   [ [ f <layout> ] dip insert-item ] if ;
+M: layout insert-item first2 spin [ insert-layout ] keep gadget>> insert-gadget ;
+M: model insert-item dup first book? [ "Books can't contain models" throw ]
+   [ first model>> swap add-connection ] if ;
 
 : insert-items ( makelist -- ) f swap [ dup word?
-      [ nip ] [ over [ wordnames get at insert-item ] [ wordnames get [ first2 1 + 2array ] change-at ] bi ] if
-   ] each drop ;
+   [ nip ] [
+      over [ wordnames get at insert-item ] [ wordnames get [ first2 1 + 2array ] change-at ] bi
+   ] if ] each drop ;
 
 : with-interface ( quot: ( -- gadget ) -- gadget ) H{ } clone wordnames
    [ { } make insert-items ] with-variable ; inline