factor/library/ui/tools/browser.factor

106 lines
2.9 KiB
Factor
Raw Normal View History

! Copyright (C) 2006 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license.
USING: arrays sequences kernel gadgets-panes definitions
2006-08-28 18:14:54 -04:00
prettyprint gadgets-theme gadgets-borders gadgets
generic gadgets-scrolling math io words models styles
2006-08-28 18:14:54 -04:00
namespaces gadgets-tracks gadgets-presentations gadgets-grids
gadgets-frames help gadgets-buttons ;
IN: gadgets-browser
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 ;
C: definitions ( -- gadget )
<pile> over set-delegate
2006-08-28 18:14:54 -04:00
{ 2 2 } over set-pack-gap
V{ } clone over set-definitions-showing ;
2006-03-24 03:28:46 -05:00
2006-08-28 18:14:54 -04:00
TUPLE: tile definition gadget ;
: find-tile [ tile? ] find-parent ;
: close-tile ( tile -- )
dup tile-definition over find-definitions
definitions-showing delete
unparent ;
: <tile-toolbar> ( -- gadget )
{
{ "Close" [ close-tile ] }
{ "Help" [ tile-definition help ] }
{ "Callers" [ tile-definition usage. ] }
{ "Edit" [ tile-definition edit ] }
{ "Reload" [ tile-definition reload ] }
{ "Watch" [ tile-definition watch ] }
} [ first2 \ find-tile add* <bevel-button> ] map
make-shelf ;
: tile-theme ( gadget -- )
{ 5 5 } over set-grid-gap faint-boundary ;
C: tile ( definition -- gadget )
[ set-tile-definition ] 2keep
{
{ [ <tile-toolbar> ] f f @top }
{ [ [ see ] make-pane ] f f @center }
} make-frame*
dup tile-theme ;
: show-definition ( definition definitions -- )
2dup definition-index dup 0 >= [
over nth-gadget swap scroll>rect drop
] [
drop 2dup definitions-showing push
2006-08-28 18:14:54 -04:00
swap <tile> 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 ;