]> gitweb.factorcode.org Git - factor.git/blob - basis/ui/tools/tools.factor
f4205061cd5050345883b4d250e5291b9f75af16
[factor.git] / basis / ui / tools / tools.factor
1 ! Copyright (C) 2006, 2008 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors arrays assocs debugger ui.tools.workspace
4 ui.tools.operations ui.tools.traceback ui.tools.browser
5 ui.tools.inspector ui.tools.listener ui.tools.profiler
6 ui.tools.operations inspector io kernel math models namespaces
7 prettyprint quotations sequences ui ui.commands ui.gadgets
8 ui.gadgets.books ui.gadgets.buttons ui.gadgets.labelled
9 ui.gadgets.scrollers ui.gadgets.tracks ui.gadgets.worlds
10 ui.gadgets.presentations ui.gestures words vocabs.loader
11 tools.test tools.vocabs ui.gadgets.buttons ui.gadgets.status-bar
12 mirrors ;
13 IN: ui.tools
14
15 : <workspace-tabs> ( workspace -- tabs )
16     model>>
17         "tool-switching" workspace command-map commands>>
18         [ command-string ] { } assoc>map <enum> >alist
19     <toggle-buttons> ;
20
21 : <workspace-book> ( workspace -- gadget )
22     dup
23         <stack-display>
24         <browser-gadget>
25         <inspector-gadget>
26         <profiler-gadget>
27     4array
28     swap model>> <book> ;
29   
30 : <workspace> ( -- workspace )
31     { 0 1 } workspace new-track
32         0 <model> >>model
33         <listener-gadget> >>listener
34         dup <workspace-book> >>book
35
36         dup <workspace-tabs> f track-add
37         dup book>> 1/5 track-add
38         dup listener>> 4/5 track-add
39         dup <toolbar> f track-add ;
40
41 : resize-workspace ( workspace -- )
42     dup sizes>> over control-value zero? [
43         1/5 1 pick set-nth
44         4/5 2 rot set-nth
45     ] [
46         2/3 1 pick set-nth
47         1/3 2 rot set-nth
48     ] if relayout ;
49
50 M: workspace model-changed
51     nip
52     dup listener>> output>> scroll>bottom
53     dup resize-workspace
54     request-focus ;
55
56 [ workspace-window ] ui-hook set-global
57
58 : com-listener ( workspace -- ) stack-display select-tool ;
59
60 : com-browser ( workspace -- ) browser-gadget select-tool ;
61
62 : com-inspector ( workspace -- ) inspector-gadget select-tool ;
63
64 : com-profiler ( workspace -- ) profiler-gadget select-tool ;
65
66 workspace "tool-switching" f {
67     { T{ key-down f { A+ } "1" } com-listener }
68     { T{ key-down f { A+ } "2" } com-browser }
69     { T{ key-down f { A+ } "3" } com-inspector }
70     { T{ key-down f { A+ } "4" } com-profiler }
71 } define-command-map
72
73 workspace "multi-touch" f {
74     { T{ zoom-out-action } com-listener }
75     { T{ up-action } refresh-all }
76 } define-command-map
77
78 \ workspace-window
79 H{ { +nullary+ t } } define-command
80
81 \ refresh-all
82 H{ { +nullary+ t } { +listener+ t } } define-command
83
84 workspace "workflow" f {
85     { T{ key-down f { C+ } "n" } workspace-window }
86     { T{ key-down f f "ESC" } hide-popup }
87     { T{ key-down f f "F2" } refresh-all }
88 } define-command-map
89
90 [
91     <workspace> dup "Factor workspace" open-status-window
92 ] workspace-window-hook set-global
93
94 : inspect-continuation ( traceback -- )
95     control-value [ inspect ] curry call-listener ;
96
97 traceback-gadget "toolbar" f {
98     { T{ key-down f f "v" } variables }
99     { T{ key-down f f "n" } inspect-continuation }
100 } define-command-map