Paste: Layout Protocol rough draft
Author: | bogiebro |
Mode: | factor |
Date: | Fri, 7 Aug 2009 18:15:23 |
Plain Text |
MIXIN: layout
GENERIC: (layout-info)
M: layout (layout-info) 2drop f ;
: layout-info dup parent>> (layout-info) ;
<PRIVATE
: move-from
over parent>> [ class ] bi@ =
[ dup layout-info ] [ f ] if
[ unparent ] dip ;
:: with-layout
not-in-layout
[let | info' [ info child parent move-from or ] |
info' child parent
[ >>parent drop ]
[ quot call ]
[ graft-state>> second [ graft ] [ drop ] if ] 2tri
parent dup relayout
] ;
PRIVATE>
GENERIC: add-info
M: layout add-info 2drop ;
: add-gadget*
[ [ ?push ] change-children add-info ] with-layout ;
: add-gadget f add-gadget* ;
GENERIC: add-info-at
M: layout add-info-at 3drop ;
: add-gadget-at rot roll
[| info child parent index |
child index parent children>> [ insert-nth ] change-children
info swap index add-info-at
] curry with-layout ;
New Annotation