1 ! Copyright (C) 2006 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
4 USING: help arrays compiler gadgets gadgets-books
5 gadgets-browser gadgets-buttons
6 gadgets-dataflow gadgets-frames gadgets-grids gadgets-help
7 gadgets-listener gadgets-presentations gadgets-walker
8 gadgets-workspace generic kernel math modules scratchpad
9 sequences syntax words io namespaces hashtables
10 gadgets-scrolling gadgets-panes gadgets-messages ;
12 C: tool ( gadget -- tool )
15 [ dup dup class tool 2array <toolbar> ]
28 M: tool focusable-child* tool-gadget ;
30 M: tool call-tool* tool-gadget call-tool* ;
32 M: tool tool-scroller tool-gadget tool-scroller ;
34 M: tool tool-help tool-gadget tool-help ;
36 : help-window ( topic -- )
37 [ [ help ] make-pane <scroller> ] keep
38 article-title open-titled-window ;
40 : tool-help-window ( tool -- )
41 tool-help [ help-window ] when* ;
44 { "Tool help" T{ key-down f f "F1" } [ tool-help-window ] }
49 { "Listener" <listener-gadget> }
50 { "Messages" <messages> }
51 { "Definitions" <browser> }
52 { "Documentation" <help-gadget> }
53 { "Walker" <walker-gadget> }
54 { "Dataflow" <dataflow-gadget> }
57 C: workspace ( -- workspace )
58 workspace-tabs [ second execute <tool> ] map <book>
59 over set-gadget-delegate dup dup set-control-self ;
61 M: workspace pref-dim* delegate pref-dim* { 550 650 } vmax ;
63 : <workspace-tabs> ( book -- tabs )
65 workspace-tabs dup length [ swap first 2array ] 2map
68 : init-status ( world -- )
69 dup world-status <presentation-help> swap @bottom grid-add ;
71 : init-tabs ( world -- )
72 [ world-gadget <workspace-tabs> ] keep @top grid-add ;
74 : workspace-window ( -- workspace )
75 <workspace> dup <world>
79 listener-gadget get-tool start-listener ;
81 : tool-window ( class -- ) workspace-window show-tool drop ;
83 : tool-scroll-up ( workspace -- )
84 current-page tool-scroller [ scroll-up-page ] when* ;
86 : tool-scroll-down ( workspace -- )
87 current-page tool-scroller [ scroll-down-page ] when* ;
89 workspace "scrolling" {
90 { "Scroll up" T{ key-down f { C+ } "PAGE_UP" } [ tool-scroll-up ] }
91 { "Scroll down" T{ key-down f { C+ } "PAGE_DOWN" } [ tool-scroll-down ] }
94 workspace "tool-switch" {
95 { "Listener" T{ key-down f f "F2" } [ listener-gadget select-tool ] }
96 { "Messages" T{ key-down f f "F3" } [ messages select-tool ] }
97 { "Definitions" T{ key-down f f "F4" } [ browser select-tool ] }
98 { "Documentation" T{ key-down f f "F5" } [ help-gadget select-tool ] }
99 { "Walker" T{ key-down f f "F6" } [ walker-gadget select-tool ] }
100 { "Dataflow" T{ key-down f f "F7" } [ dataflow-gadget select-tool ] }
103 workspace "tool-window" {
104 { "New listener" T{ key-down f { S+ } "F2" } [ listener-gadget tool-window drop ] }
105 { "New definitions" T{ key-down f { S+ } "F3" } [ browser tool-window drop ] }
106 { "New documentation" T{ key-down f { S+ } "F4" } [ help-gadget tool-window drop ] }
109 workspace "workflow" {
110 { "Reload changed sources" T{ key-down f f "F8" } [ drop [ reload-modules ] call-listener ] }
111 { "Recompile changed words" T{ key-down f { S+ } "F8" } [ drop [ recompile ] call-listener ] }