1 ! Copyright (C) 2014 John Benediktsson
2 ! See http://factorcode.org/license.txt for BSD license
4 USING: accessors arrays debugger fonts gopher gopher.private
5 kernel math.vectors models present sequences ui ui.commands
6 ui.gadgets ui.gadgets.editors ui.gadgets.panes
7 ui.gadgets.scrollers ui.gadgets.status-bar ui.gadgets.toolbar
8 ui.gadgets.tracks ui.gadgets.viewports ui.gestures ui.operations
9 ui.tools.browser ui.tools.browser.history ui.tools.common urls
14 TUPLE: gopher-gadget < tool history scroller url-field ;
16 gopher-gadget default-font-size { 50 50 } n*v set-tool-dim
18 M: gopher-gadget history-value
19 [ control-value ] [ scroller>> scroll-position ]
22 M: gopher-gadget set-history-value
24 [ set-control-value ] [ scroller>> set-scroll-position ]
27 M: gopher-gadget model-changed
29 [ url-field>> editor>> set-editor-string ] bi* ;
31 : show-gopher ( url gopher-gadget -- )
32 [ [ >url ] [ f ] if* ] dip
33 over [ protocol>> "gopher" = ] [ t ] if* [
36 [ 2drop ] [ nip history>> add-history ] if
40 ] [ drop open-url ] if ;
42 : <url-field> ( gopher-gadget -- field )
43 '[ >url _ show-gopher ] <action-field>
44 "Gopher URL" >>default-text
47 : <gopher-pane> ( gopher-gadget -- gadget )
48 model>> [ '[ _ [ gopher. ] when* ] try ] <pane-control> ;
50 : <gopher-toolbar> ( browser -- toolbar )
55 over <toolbar> f track-add
56 swap url-field>> 1 track-add ;
58 : add-gopher-toolbar ( track -- track )
59 dup <gopher-toolbar> format-toolbar f track-add ;
61 : add-gopher-pane ( track -- track )
62 dup dup <gopher-pane> margins
63 <scroller> >>scroller scroller>> white-interior 1 track-add ;
65 : <gopher-gadget> ( -- gadget )
66 vertical gopher-gadget new-track with-lines
68 dup <history> >>history
69 dup <url-field> >>url-field
73 : open-gopher-window ( url -- )
75 [ "Gopher" open-status-window ]
78 : com-clear ( gopher -- )
79 f swap set-control-value ;
81 : com-gopher ( url -- )
82 [ gopher-gadget? ] find-window
83 [ [ raise-window ] [ gadget-child show-gopher ] bi ]
84 [ open-gopher-window ] if* ;
86 gopher-gadget "toolbar" f {
92 gopher-gadget "scrolling" f {
93 { T{ key-down f f "UP" } com-scroll-up }
94 { T{ key-down f f "DOWN" } com-scroll-down }
95 { T{ key-down f f "PAGE_UP" } com-page-up }
96 { T{ key-down f f "PAGE_DOWN" } com-page-down }
99 [ gopher-link? ] \ com-gopher H{ { +primary+ t } } define-operation