1 ! Copyright (C) 2006, 2008 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: debugger ui.tools.workspace help help.topics kernel
4 models models.history ui.commands ui.gadgets ui.gadgets.panes
5 ui.gadgets.scrollers ui.gadgets.tracks ui.gestures
6 ui.gadgets.buttons compiler.units assocs words vocabs
10 TUPLE: browser-gadget < track pane history ;
12 : show-help ( link help -- )
13 dup history>> add-history
14 >r >link r> history>> set-model ;
16 : <help-pane> ( browser-gadget -- gadget )
17 history>> [ [ help ] curry try ] <pane-control> ;
19 : init-history ( browser-gadget -- )
20 "handbook" >link <history> >>history drop ;
22 : <browser-gadget> ( -- gadget )
23 { 0 1 } browser-gadget new-track
25 dup <toolbar> f track-add
26 dup <help-pane> >>pane
27 dup pane>> <scroller> 1 track-add ;
29 M: browser-gadget call-tool* show-help ;
31 M: browser-gadget tool-scroller
32 pane>> find-scroller ;
34 M: browser-gadget graft*
35 [ add-definition-observer ] [ call-next-method ] bi ;
37 M: browser-gadget ungraft*
38 [ call-next-method ] [ remove-definition-observer ] bi ;
40 : showing-definition? ( defspec assoc -- ? )
42 [ >r dup word-link? [ name>> ] when r> key? ] 2keep
43 >r dup vocab-link? [ vocab ] when r> key?
46 M: browser-gadget definitions-changed ( assoc browser -- )
48 dup value>> rot showing-definition?
49 [ notify-connections ] [ drop ] if ;
51 : help-action ( browser-gadget -- link )
52 history>> value>> >link ;
54 : com-follow ( link -- ) browser-gadget call-tool ;
56 : com-back ( browser -- ) history>> go-back ;
58 : com-forward ( browser -- ) history>> go-forward ;
60 : com-documentation ( browser -- ) "handbook" swap show-help ;
62 : com-vocabularies ( browser -- ) "vocab-index" swap show-help ;
64 : browser-help ( -- ) "ui-browser" help-window ;
66 \ browser-help H{ { +nullary+ t } } define-command
68 browser-gadget "toolbar" f {
69 { T{ key-down f { A+ } "b" } com-back }
70 { T{ key-down f { A+ } "f" } com-forward }
71 { T{ key-down f { A+ } "h" } com-documentation }
72 { T{ key-down f { A+ } "v" } com-vocabularies }
73 { T{ key-down f f "F1" } browser-help }
76 browser-gadget "multi-touch" f {
77 { T{ left-action } com-back }
78 { T{ right-action } com-forward }