2006-03-24 13:19:14 -05:00
|
|
|
! Copyright (C) 2006 Slava Pestov.
|
|
|
|
! See http://factorcode.org/license.txt for BSD license.
|
2006-03-24 03:28:46 -05:00
|
|
|
IN: gadgets-browser
|
2006-05-20 02:13:44 -04:00
|
|
|
USING: gadgets gadgets-buttons gadgets-inspector gadgets-labels
|
|
|
|
gadgets-layouts gadgets-panes gadgets-presentations
|
|
|
|
gadgets-scrolling gadgets-theme gadgets-tracks generic
|
|
|
|
hashtables help inspector kernel math prettyprint sequences
|
|
|
|
words ;
|
|
|
|
|
|
|
|
TUPLE: browser
|
|
|
|
vocabs
|
|
|
|
vocab-track showing-vocabs
|
|
|
|
word-track showing-words ;
|
2006-03-24 13:19:14 -05:00
|
|
|
|
|
|
|
: find-browser [ browser? ] find-parent ;
|
|
|
|
|
2006-05-20 02:13:44 -04:00
|
|
|
: <title-border> ( gadget title -- gadget )
|
|
|
|
{
|
|
|
|
{ [ <label> dup highlight-theme ] f @top }
|
|
|
|
{ [ ] f @center }
|
|
|
|
} make-frame ;
|
2006-03-24 03:28:46 -05:00
|
|
|
|
2006-05-20 02:13:44 -04:00
|
|
|
: showing-word? ( word browser -- ? )
|
|
|
|
browser-showing-words hash-member? ;
|
2006-03-24 03:28:46 -05:00
|
|
|
|
2006-05-20 02:13:44 -04:00
|
|
|
: (show-word) ( gadget word browser -- )
|
|
|
|
[ browser-showing-words set-hash ] 3keep nip
|
|
|
|
browser-word-track track-add ;
|
2006-03-24 03:28:46 -05:00
|
|
|
|
2006-05-20 02:13:44 -04:00
|
|
|
DEFER: show-vocab
|
2006-03-24 13:39:18 -05:00
|
|
|
|
2006-05-20 02:13:44 -04:00
|
|
|
: show-word ( word browser -- )
|
|
|
|
2dup showing-word? [
|
|
|
|
2drop
|
2006-03-25 17:41:40 -05:00
|
|
|
] [
|
2006-05-20 02:13:44 -04:00
|
|
|
over word-vocabulary over show-vocab
|
|
|
|
>r [ f <inspector> ] keep r> (show-word)
|
|
|
|
] if ;
|
2006-03-25 17:41:40 -05:00
|
|
|
|
2006-05-20 02:13:44 -04:00
|
|
|
: hide-word ( word browser -- )
|
|
|
|
[ browser-showing-words remove-hash* ] keep
|
|
|
|
browser-word-track track-remove ;
|
|
|
|
|
|
|
|
: toggle-word ( word browser -- )
|
|
|
|
2dup showing-word? [ hide-word ] [ show-word ] if ;
|
|
|
|
|
|
|
|
: <word-button> ( word -- gadget )
|
|
|
|
dup word-name <label> swap
|
|
|
|
[ swap find-browser toggle-word ] curry
|
|
|
|
<roll-button> ;
|
2006-03-24 03:28:46 -05:00
|
|
|
|
2006-05-20 02:13:44 -04:00
|
|
|
: <vocab> ( vocab -- gadget )
|
2006-03-24 03:28:46 -05:00
|
|
|
[
|
2006-05-20 02:13:44 -04:00
|
|
|
words natural-sort
|
|
|
|
[ <word-button> ] map make-pile <scroller>
|
|
|
|
] keep <title-border> ;
|
2006-03-24 03:28:46 -05:00
|
|
|
|
2006-05-20 02:13:44 -04:00
|
|
|
: showing-vocab? ( vocab browser -- ? )
|
|
|
|
browser-showing-vocabs hash-member? ;
|
|
|
|
|
|
|
|
: (show-vocab) ( gadget vocab browser -- )
|
|
|
|
[ browser-showing-vocabs set-hash ] 3keep nip
|
|
|
|
browser-vocab-track track-add ;
|
|
|
|
|
|
|
|
: show-vocab ( vocab browser -- )
|
|
|
|
2dup showing-vocab?
|
|
|
|
[ 2drop ] [ >r [ <vocab> ] keep r> (show-vocab) ] if ;
|
|
|
|
|
|
|
|
: hide-vocab-words ( vocab browser -- )
|
|
|
|
[
|
|
|
|
browser-showing-words hash-keys
|
|
|
|
[ word-vocabulary = ] subset-with
|
|
|
|
] keep swap [ swap hide-word ] each-with ;
|
|
|
|
|
|
|
|
: hide-vocab ( vocab browser -- )
|
|
|
|
2dup hide-vocab-words
|
|
|
|
[ browser-showing-vocabs remove-hash* ] keep
|
|
|
|
browser-vocab-track track-remove ;
|
|
|
|
|
|
|
|
: toggle-vocab ( word browser -- )
|
|
|
|
2dup showing-vocab? [ hide-vocab ] [ show-vocab ] if ;
|
|
|
|
|
|
|
|
: <vocab-button> ( vocab -- gadget )
|
|
|
|
dup <label> swap
|
|
|
|
[ swap find-browser toggle-vocab ] curry
|
|
|
|
<roll-button> ;
|
|
|
|
|
|
|
|
: <vocabs> ( -- gadget )
|
|
|
|
vocabs [ <vocab-button> ] map make-pile <scroller>
|
|
|
|
"Vocabularies" <title-border> ;
|
|
|
|
|
|
|
|
: add-vocabs ( vocabs browser -- )
|
|
|
|
[ set-browser-vocabs ] 2keep track-add ;
|
|
|
|
|
|
|
|
: add-vocab-track ( track browser -- )
|
|
|
|
[ set-browser-vocab-track ] 2keep track-add ;
|
|
|
|
|
|
|
|
: add-word-track ( track browser -- )
|
|
|
|
[ set-browser-word-track ] 2keep track-add ;
|
|
|
|
|
|
|
|
C: browser ( -- browser )
|
|
|
|
H{ } clone over set-browser-showing-vocabs
|
|
|
|
H{ } clone over set-browser-showing-words
|
|
|
|
<y-track> over set-delegate
|
|
|
|
<vocabs> over add-vocabs
|
|
|
|
<x-track> over add-vocab-track
|
|
|
|
<x-track> over add-word-track
|
|
|
|
{ 1/4 1/4 1/2 } over set-track-sizes ;
|
|
|
|
|
|
|
|
: browser-window ( word -- )
|
2006-05-20 02:31:32 -04:00
|
|
|
<browser> [ "Browser" open-window ] keep
|
|
|
|
over [ show-word ] [ 2drop ] if ;
|
2006-05-20 02:13:44 -04:00
|
|
|
|
|
|
|
M: word show-object ( word button -- )
|
|
|
|
find-browser [ show-word ] [ browser-window ] if* ;
|