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-08-02 15:17:13 -04:00
|
|
|
USING: arrays definitions gadgets gadgets-books gadgets-borders
|
2006-07-09 19:50:56 -04:00
|
|
|
gadgets-buttons gadgets-frames gadgets-labels gadgets-panes
|
2006-06-12 02:41:19 -04:00
|
|
|
gadgets-presentations gadgets-scrolling gadgets-search
|
2006-07-09 19:50:56 -04:00
|
|
|
gadgets-theme gadgets-tiles gadgets-tracks generic hashtables
|
|
|
|
help inspector kernel math models namespaces prettyprint
|
|
|
|
sequences styles words ;
|
2006-05-20 02:13:44 -04:00
|
|
|
|
2006-06-27 03:26:52 -04:00
|
|
|
TUPLE: asset-track showing builder closer ;
|
2006-05-20 16:42:33 -04:00
|
|
|
|
2006-06-27 03:26:52 -04:00
|
|
|
C: asset-track ( builder closer -- gadget )
|
2006-06-23 00:06:53 -04:00
|
|
|
{ 0 1 } <track> over set-delegate
|
2006-06-27 03:26:52 -04:00
|
|
|
H{ } clone over set-asset-track-showing
|
|
|
|
[ set-asset-track-closer ] keep
|
|
|
|
[ set-asset-track-builder ] keep ;
|
2006-05-20 16:42:33 -04:00
|
|
|
|
|
|
|
: showing-asset? ( asset track -- ? )
|
2006-06-27 03:26:52 -04:00
|
|
|
asset-track-showing hash-member? ;
|
2006-05-20 16:42:33 -04:00
|
|
|
|
|
|
|
: (show-asset) ( gadget asset track -- )
|
2006-06-27 03:26:52 -04:00
|
|
|
[ asset-track-showing set-hash ] 3keep nip track-add ;
|
2006-05-20 16:42:33 -04:00
|
|
|
|
|
|
|
: show-asset ( asset track -- )
|
|
|
|
2dup showing-asset? [
|
|
|
|
2drop
|
|
|
|
] [
|
2006-06-27 03:26:52 -04:00
|
|
|
[ asset-track-builder call ] 2keep (show-asset)
|
2006-05-20 16:42:33 -04:00
|
|
|
] if ;
|
|
|
|
|
|
|
|
: hide-asset ( asset track -- )
|
2006-06-27 03:26:52 -04:00
|
|
|
[ dup asset-track-closer call ] 2keep
|
|
|
|
[ asset-track-showing remove-hash* ] keep track-remove ;
|
2006-05-20 16:42:33 -04:00
|
|
|
|
2006-06-27 03:26:52 -04:00
|
|
|
TUPLE: browser track page ;
|
|
|
|
|
|
|
|
TUPLE: browser-tracks vocabs words ;
|
|
|
|
|
|
|
|
: browser-vocab-track browser-track browser-tracks-vocabs ;
|
|
|
|
|
|
|
|
: browser-word-track browser-track browser-tracks-words ;
|
2006-03-24 13:19:14 -05:00
|
|
|
|
|
|
|
: find-browser [ browser? ] find-parent ;
|
|
|
|
|
2006-05-20 16:42:33 -04:00
|
|
|
: close-tile ( tile -- )
|
|
|
|
dup gadget-parent [
|
2006-06-27 03:26:52 -04:00
|
|
|
asset-track-showing hash>alist rassoc
|
2006-05-20 16:42:33 -04:00
|
|
|
] keep hide-asset ;
|
|
|
|
|
2006-05-25 23:25:00 -04:00
|
|
|
: <browser-tile> ( gadget title -- gadget )
|
|
|
|
[ close-tile ] <tile> ;
|
2006-05-20 16:42:33 -04:00
|
|
|
|
|
|
|
: showing-word? ( word browser -- ? )
|
|
|
|
browser-word-track showing-asset? ;
|
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-06-27 03:26:52 -04:00
|
|
|
: browser-tabs
|
2006-05-25 23:25:00 -04:00
|
|
|
{
|
2006-06-17 01:03:56 -04:00
|
|
|
{ "Documentation" [ help ] }
|
2006-06-27 03:26:52 -04:00
|
|
|
{ "Definition" [ see ] }
|
|
|
|
{ "Calls in" [ usage. ] }
|
|
|
|
{ "Properties" [ word-props describe ] }
|
|
|
|
} ;
|
2006-05-25 23:25:00 -04:00
|
|
|
|
2006-06-27 03:26:52 -04:00
|
|
|
: <word-book> ( model word -- book )
|
|
|
|
browser-tabs [ second ] map make-book ;
|
|
|
|
|
|
|
|
: <word-view> ( word browser -- gadget )
|
|
|
|
browser-page swap [ <word-book> ] keep
|
|
|
|
word-name <browser-tile> ;
|
2006-05-20 16:42:33 -04:00
|
|
|
|
2006-05-20 02:13:44 -04:00
|
|
|
: show-word ( word browser -- )
|
2006-05-20 16:42:33 -04:00
|
|
|
over word-vocabulary over show-vocab
|
|
|
|
browser-word-track show-asset ;
|
2006-03-25 17:41:40 -05:00
|
|
|
|
2006-05-20 02:13:44 -04:00
|
|
|
: hide-word ( word browser -- )
|
2006-05-20 16:42:33 -04:00
|
|
|
browser-word-track hide-asset ;
|
2006-05-20 02:13:44 -04:00
|
|
|
|
|
|
|
: toggle-word ( word browser -- )
|
|
|
|
2dup showing-word? [ hide-word ] [ show-word ] if ;
|
|
|
|
|
|
|
|
: <word-button> ( word -- gadget )
|
2006-06-27 03:26:52 -04:00
|
|
|
dup word-name swap
|
2006-05-20 02:13:44 -04:00
|
|
|
[ swap find-browser toggle-word ] curry
|
|
|
|
<roll-button> ;
|
2006-03-24 03:28:46 -05:00
|
|
|
|
2006-05-20 16:42:33 -04:00
|
|
|
: <vocab-view> ( 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>
|
2006-05-25 23:25:00 -04:00
|
|
|
] keep <browser-tile> ;
|
2006-03-24 03:28:46 -05:00
|
|
|
|
2006-05-20 02:13:44 -04:00
|
|
|
: showing-vocab? ( vocab browser -- ? )
|
2006-05-20 16:42:33 -04:00
|
|
|
browser-vocab-track showing-asset? ;
|
2006-05-20 02:13:44 -04:00
|
|
|
|
|
|
|
: show-vocab ( vocab browser -- )
|
2006-05-30 18:57:34 -04:00
|
|
|
over [ browser-vocab-track show-asset ] [ 2drop ] if ;
|
2006-05-20 02:13:44 -04:00
|
|
|
|
|
|
|
: hide-vocab-words ( vocab browser -- )
|
|
|
|
[
|
2006-06-27 03:26:52 -04:00
|
|
|
browser-word-track asset-track-showing hash-keys
|
2006-05-20 02:13:44 -04:00
|
|
|
[ word-vocabulary = ] subset-with
|
|
|
|
] keep swap [ swap hide-word ] each-with ;
|
|
|
|
|
|
|
|
: hide-vocab ( vocab browser -- )
|
2006-05-20 16:42:33 -04:00
|
|
|
browser-vocab-track hide-asset ;
|
2006-05-20 02:13:44 -04:00
|
|
|
|
|
|
|
: toggle-vocab ( word browser -- )
|
|
|
|
2dup showing-vocab? [ hide-vocab ] [ show-vocab ] if ;
|
|
|
|
|
|
|
|
: <vocab-button> ( vocab -- gadget )
|
2006-06-27 03:26:52 -04:00
|
|
|
dup [ swap find-browser toggle-vocab ] curry
|
2006-05-20 02:13:44 -04:00
|
|
|
<roll-button> ;
|
|
|
|
|
|
|
|
: <vocabs> ( -- gadget )
|
|
|
|
vocabs [ <vocab-button> ] map make-pile <scroller>
|
2006-05-20 16:42:33 -04:00
|
|
|
"Vocabularies" f <tile> ;
|
2006-05-20 02:13:44 -04:00
|
|
|
|
2006-05-20 16:42:33 -04:00
|
|
|
: <vocab-track> ( -- track )
|
|
|
|
[ <vocab-view> ] [ find-browser hide-vocab-words ]
|
2006-06-27 03:26:52 -04:00
|
|
|
<asset-track> ;
|
2006-05-20 16:42:33 -04:00
|
|
|
|
2006-06-27 03:26:52 -04:00
|
|
|
: <word-track> ( browser -- track )
|
|
|
|
[ <word-view> ] curry [ 2drop ] <asset-track> ;
|
2006-05-20 16:42:33 -04:00
|
|
|
|
2006-06-27 03:26:52 -04:00
|
|
|
C: browser-tracks ( browser -- browser-track )
|
2006-05-25 23:25:00 -04:00
|
|
|
{
|
2006-06-29 01:54:11 -04:00
|
|
|
{ [ <vocabs> ] f f 1/5 }
|
|
|
|
{ [ <vocab-track> ] set-browser-tracks-vocabs f 1/5 }
|
|
|
|
{ [ <word-track> ] set-browser-tracks-words f 3/5 }
|
2006-06-23 00:06:53 -04:00
|
|
|
} { 1 0 } make-track* ;
|
2006-05-25 23:25:00 -04:00
|
|
|
|
2006-06-27 03:26:52 -04:00
|
|
|
: <browser-tabs> ( browser -- tabs )
|
|
|
|
browser-page
|
|
|
|
browser-tabs dup length [ swap first 2array ] 2map
|
|
|
|
<radio-box> ;
|
|
|
|
|
|
|
|
: <browser-toolbar> ( browser -- toolbar )
|
|
|
|
[
|
|
|
|
<browser-tabs> ,
|
|
|
|
<spacing> ,
|
|
|
|
"Apropos" [ drop apropos-window ] <bevel-button> ,
|
|
|
|
] make-toolbar ;
|
|
|
|
|
|
|
|
C: browser ( -- browser )
|
|
|
|
0 <model> over set-browser-page
|
|
|
|
dup dup {
|
2006-06-29 01:54:11 -04:00
|
|
|
{ [ <browser-toolbar> ] f f @top }
|
|
|
|
{ [ <browser-tracks> ] set-browser-track f @center }
|
2006-06-27 03:26:52 -04:00
|
|
|
} make-frame* ;
|
|
|
|
|
2006-07-05 17:12:30 -04:00
|
|
|
M: browser gadget-title drop "Browser" <model> ;
|
2006-05-26 02:29:44 -04:00
|
|
|
|
|
|
|
: browser-window ( -- ) <browser> open-window ;
|
2006-05-20 02:13:44 -04:00
|
|
|
|
2006-07-09 19:50:56 -04:00
|
|
|
: browse ( obj browser -- )
|
|
|
|
over vocab-link? [
|
|
|
|
>r vocab-link-name r> show-vocab
|
|
|
|
] [
|
|
|
|
show-word
|
|
|
|
] if ;
|
|
|
|
|
|
|
|
: browser-tool [ browser? ] [ <browser> ] [ browse ] ;
|
2006-05-20 02:13:44 -04:00
|
|
|
|
2006-08-15 03:01:24 -04:00
|
|
|
M: word show browser-tool call-tool ;
|
2006-07-09 19:50:56 -04:00
|
|
|
|
2006-08-15 03:01:24 -04:00
|
|
|
M: vocab-link show browser-tool call-tool ;
|