factor/unmaintained/tabs/tabs.factor

63 lines
1.9 KiB
Factor
Raw Normal View History

! Copyright (C) 2008 William Schlieper
! See http://factorcode.org/license.txt for BSD license.
USING: accessors kernel fry math math.vectors sequences arrays vectors assocs
2009-02-26 17:15:28 -05:00
hashtables models models.range models.product combinators
ui ui.gadgets ui.gadgets.buttons ui.gadgets.frames ui.gadgets.packs
2008-07-14 21:45:06 -04:00
ui.gadgets.grids ui.gadgets.viewports ui.gadgets.books locals ;
IN: ui.gadgets.tabs
TUPLE: tabbed < frame names toggler content ;
DEFER: (del-page)
:: add-toggle ( n name model toggler -- )
2008-07-14 21:45:06 -04:00
<frame>
n name toggler parent>> '[ drop _ _ _ (del-page) ] "X" swap <bevel-button>
2008-07-25 13:34:41 -04:00
@right grid-add
n model name <toggle-button> @center grid-add
2008-07-14 21:45:06 -04:00
toggler swap add-gadget drop ;
: redo-toggler ( tabbed -- )
[ names>> ] [ model>> ] [ toggler>> ] tri
[ clear-gadget ] keep
[ [ length ] keep ] 2dip
'[ _ _ add-toggle ] 2each ;
2008-07-10 16:40:12 -04:00
: refresh-book ( tabbed -- )
model>> [ ] change-model ;
: (del-page) ( n name tabbed -- )
{ [ [ remove ] change-names redo-toggler ]
2008-07-10 16:40:12 -04:00
[ dupd [ names>> length ] [ model>> ] bi
[ [ = ] keep swap [ 1- ] when
2008-07-10 16:40:12 -04:00
[ < ] keep swap [ 1- ] when ] change-model ]
[ content>> nth-gadget unparent ]
2008-07-10 16:40:12 -04:00
[ refresh-book ]
} cleave ;
: add-page ( page name tabbed -- )
[ names>> push ] 2keep
[ [ names>> length 1 - swap ]
[ model>> ]
[ toggler>> ] tri add-toggle ]
2008-07-13 02:25:44 -04:00
[ content>> swap add-gadget drop ]
2008-07-10 16:40:12 -04:00
[ refresh-book ] tri ;
: del-page ( name tabbed -- )
[ names>> index ] 2keep (del-page) ;
2008-08-11 01:22:26 -04:00
: new-tabbed ( assoc class -- tabbed )
new-frame
2008-07-14 19:00:29 -04:00
0 <model> >>model
<pile> 1 >>fill >>toggler
2008-07-25 13:34:41 -04:00
dup toggler>> @left grid-add
2008-07-14 19:00:29 -04:00
swap
[ keys >vector >>names ]
2008-07-25 13:34:41 -04:00
[ values over model>> <book> >>content dup content>> @center grid-add ]
2008-07-14 19:00:29 -04:00
bi
dup redo-toggler ;
2008-08-11 01:22:26 -04:00
: <tabbed> ( assoc -- tabbed ) tabbed new-tabbed ;