factor/basis/ui/tools/tools.factor

98 lines
2.8 KiB
Factor

! Copyright (C) 2006, 2008 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license.
USING: accessors arrays assocs debugger ui.tools.workspace
ui.tools.operations ui.tools.traceback ui.tools.browser
ui.tools.inspector ui.tools.listener
ui.tools.operations ui ui.commands ui.gadgets
ui.gadgets.books ui.gadgets.buttons ui.gadgets.labelled
ui.gadgets.scrollers ui.gadgets.tracks ui.gadgets.worlds
ui.gadgets.presentations ui.gestures words vocabs.loader
tools.test tools.vocabs ui.gadgets.buttons ui.gadgets.status-bar
mirrors fry inspector io kernel math models namespaces
prettyprint quotations sequences ;
IN: ui.tools
: <workspace-tabs> ( workspace -- tabs )
model>>
"tool-switching" workspace command-map commands>>
[ command-string ] { } assoc>map <enum> >alist
<toggle-buttons> ;
: <workspace-book> ( workspace -- gadget )
<gadget>
<browser-gadget>
<inspector-gadget>
3array
swap model>> <book> ;
: <workspace> ( -- workspace )
{ 0 1 } workspace new-track
0 <model> >>model
<listener-gadget> >>listener
dup <workspace-book> >>book
dup <workspace-tabs> f track-add
dup book>> 0 track-add
dup listener>> 1 track-add
add-toolbar ;
: resize-workspace ( workspace -- )
dup sizes>> over control-value 0 = [
0 over set-second
1 swap set-third
] [
2/3 over set-second
1/3 swap set-third
] if relayout ;
M: workspace model-changed
nip
dup listener>> output>> scroll>bottom
dup resize-workspace
request-focus ;
[ workspace-window ] ui-hook set-global
: select-tool ( workspace n -- ) swap book>> model>> set-model ;
: com-listener ( workspace -- ) 0 select-tool ;
: com-browser ( workspace -- ) 1 select-tool ;
: com-inspector ( workspace -- ) 2 select-tool ;
workspace "tool-switching" f {
{ T{ key-down f { A+ } "1" } com-listener }
{ T{ key-down f { A+ } "2" } com-browser }
{ T{ key-down f { A+ } "3" } com-inspector }
} define-command-map
workspace "multi-touch" f {
{ T{ zoom-out-action } com-listener }
{ T{ up-action } refresh-all }
} define-command-map
\ workspace-window
H{ { +nullary+ t } } define-command
\ refresh-all
H{ { +nullary+ t } { +listener+ t } } define-command
workspace "workflow" f {
{ T{ key-down f { C+ } "n" } workspace-window }
{ T{ key-down f f "ESC" } hide-popup }
{ T{ key-down f f "F2" } refresh-all }
} define-command-map
[
<workspace> dup "Factor workspace" open-status-window
] workspace-window-hook set-global
: inspect-continuation ( traceback -- )
control-value '[ _ inspect ] call-listener ;
traceback-gadget "toolbar" f {
{ T{ key-down f f "v" } variables }
{ T{ key-down f f "n" } inspect-continuation }
} define-command-map