! Copyright (C) 2006 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. 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 ; : find-definitions ( gadget -- definitions ) [ definitions? ] find-parent ; : definition-index ( definition definitions -- n ) definitions-showing index ; : close-definition ( gadget definition -- ) over find-definitions definitions-showing delete unparent ; : ( definition -- gadget ) dup [ see ] make-pane over unparse rot [ close-definition ] curry dup faint-boundary ; C: definitions ( -- gadget ) over set-delegate { 5 5 } over set-pack-gap V{ } clone over set-definitions-showing ; : show-definition ( definition definitions -- ) 2dup definition-index dup 0 >= [ over nth-gadget swap scroll>rect drop ] [ drop 2dup definitions-showing push swap over add-gadget scroll>bottom ] if ; : ( model quot -- gadget ) [ map [ first2 write-object terpri ] each ] curry ; TUPLE: navigator vocab ; : ( -- gadget ) vocabs [ dup 2array ] ; : ( model -- gadget ) gadget get navigator-vocab [ words natural-sort ] [ dup word-name swap 2array ] ; C: navigator ( -- gadget ) f over set-navigator-vocab { { [ ] f [ ] 1/2 } { [ ] f [ ] 1/2 } } { 1 0 } make-track* ; TUPLE: browser navigator definitions ; C: browser ( -- gadget ) { { [ ] set-browser-navigator f 1/4 } { [ ] set-browser-definitions [ ] 3/4 } } { 0 1 } make-track* ; M: browser gadget-title drop "Browser" ; : show-vocab ( vocab browser -- ) browser-navigator navigator-vocab set-model ; : show-word ( word browser -- ) over word-vocabulary over show-vocab browser-definitions show-definition ;