factor/library/ui/tools/browser.factor

79 lines
2.2 KiB
Factor
Raw Normal View History

! Copyright (C) 2006 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license.
2006-08-26 14:30:58 -04:00
IN: gadgets-browser
USING: arrays sequences kernel gadgets-panes definitions
prettyprint gadgets-tiles gadgets-theme gadgets-borders gadgets
generic gadgets-scrolling math io words models styles
namespaces gadgets-tracks gadgets-presentations ;
TUPLE: definitions showing ;
2006-05-20 16:42:33 -04:00
: find-definitions ( gadget -- definitions )
[ definitions? ] find-parent ;
2006-05-20 16:42:33 -04:00
: definition-index ( definition definitions -- n )
definitions-showing index ;
2006-03-25 17:41:40 -05:00
: close-definition ( gadget definition -- )
over find-definitions definitions-showing delete
unparent ;
: <definition-gadget> ( definition -- gadget )
dup [ see ] make-pane <default-border>
over unparse rot [ close-definition ] curry <tile>
dup faint-boundary ;
C: definitions ( -- gadget )
<pile> over set-delegate
{ 5 5 } over set-pack-gap
V{ } clone over set-definitions-showing ;
2006-03-24 03:28:46 -05:00
: show-definition ( definition definitions -- )
2dup definition-index dup 0 >= [
over nth-gadget swap scroll>rect drop
] [
drop 2dup definitions-showing push
swap <definition-gadget> over add-gadget
scroll>bottom
] if ;
: <list-control> ( model quot -- gadget )
[ map [ first2 write-object terpri ] each ] curry
<pane-control> ;
TUPLE: navigator vocab ;
: <vocab-list> ( -- gadget )
vocabs <model> [ dup <vocab-link> 2array ]
<list-control> ;
2006-05-20 16:42:33 -04:00
: <word-list> ( model -- gadget )
gadget get navigator-vocab
[ words natural-sort ] <filter>
[ dup word-name swap 2array ]
<list-control> ;
2006-05-20 16:42:33 -04:00
C: navigator ( -- gadget )
f <model> over set-navigator-vocab
{
{ [ <vocab-list> ] f [ <scroller> ] 1/2 }
{ [ <word-list> ] f [ <scroller> ] 1/2 }
2006-06-23 00:06:53 -04:00
} { 1 0 } make-track* ;
TUPLE: browser navigator definitions ;
C: browser ( -- gadget )
{
{ [ <navigator> ] set-browser-navigator f 1/4 }
{ [ <definitions> ] set-browser-definitions [ <scroller> ] 3/4 }
} { 0 1 } make-track* ;
2006-08-27 19:02:16 -04:00
M: browser gadget-title drop "Browser" <model> ;
: show-vocab ( vocab browser -- )
browser-navigator navigator-vocab set-model ;
: show-word ( word browser -- )
over word-vocabulary over show-vocab
browser-definitions show-definition ;