]> gitweb.factorcode.org Git - factor.git/blob - extra/ui/tools/deploy/deploy.factor
Merge branch 'master' of git://factorcode.org/git/factor
[factor.git] / extra / ui / tools / deploy / deploy.factor
1 ! Copyright (C) 2007 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: ui.gadgets colors kernel ui.render namespaces
4 models sequences ui.gadgets.buttons
5 ui.gadgets.packs ui.gadgets.labels tools.deploy.config
6 namespaces ui.gadgets.editors ui.gadgets.borders ui.gestures
7 ui.commands assocs ui.gadgets.tracks ui ui.tools.listener
8 tools.deploy vocabs ui.tools.workspace system ;
9 IN: ui.tools.deploy
10
11 TUPLE: deploy-gadget vocab settings ;
12
13 : bundle-name ( -- )
14     deploy-name get <field>
15     "Executable name:" label-on-left gadget, ;
16
17 : deploy-ui ( -- )
18     deploy-ui? get
19     "Include user interface framework" <checkbox> gadget, ;
20
21 : exit-when-windows-closed ( -- )
22     "stop-after-last-window?" get
23     "Exit when last UI window closed" <checkbox> gadget, ;
24
25 : io-settings ( -- )
26     "Input/output support:" <label> gadget,
27     deploy-io get deploy-io-options <radio-buttons> gadget, ;
28
29 : reflection-settings ( -- )
30     "Reflection support:" <label> gadget,
31     deploy-reflection get deploy-reflection-options <radio-buttons> gadget, ;
32
33 : advanced-settings ( -- )
34     "Advanced:" <label> gadget,
35     deploy-compiler? get "Use optimizing compiler" <checkbox> gadget,
36     deploy-math? get "Rational and complex number support" <checkbox> gadget,
37     deploy-threads? get "Threading support" <checkbox> gadget,
38     deploy-random? get "Random number generator support" <checkbox> gadget,
39     deploy-word-props? get "Retain all word properties" <checkbox> gadget,
40     deploy-word-defs? get "Retain all word definitions" <checkbox> gadget,
41     deploy-c-types? get "Retain all C types" <checkbox> gadget, ;
42
43 : deploy-settings-theme
44     { 10 10 } over set-pack-gap
45     1 swap set-pack-fill ;
46
47 : <deploy-settings> ( vocab -- control )
48     default-config [ <model> ] assoc-map [
49         [
50             bundle-name
51             deploy-ui
52             os macosx? [ exit-when-windows-closed ] when
53             io-settings
54             reflection-settings
55             advanced-settings
56         ] make-pile dup deploy-settings-theme
57         namespace <mapping> over set-gadget-model
58     ] bind ;
59
60 : find-deploy-gadget
61     [ deploy-gadget? ] find-parent ;
62
63 : find-deploy-vocab
64     find-deploy-gadget deploy-gadget-vocab ;
65
66 : find-deploy-config
67     find-deploy-vocab deploy-config ;
68
69 : find-deploy-settings
70     find-deploy-gadget deploy-gadget-settings ;
71
72 : com-revert ( gadget -- )
73     dup find-deploy-config
74     swap find-deploy-settings set-control-value ;
75
76 : com-save ( gadget -- )
77     dup find-deploy-settings control-value
78     swap find-deploy-vocab set-deploy-config ;
79
80 : com-deploy ( gadget -- )
81     dup com-save
82     dup find-deploy-vocab [ deploy ] curry call-listener
83     close-window ;
84
85 : com-help ( -- )
86     "ui.tools.deploy" help-window ;
87
88 \ com-help H{
89     { +nullary+ t }
90 } define-command
91
92 : com-close ( gadget -- )
93     close-window ;
94
95 deploy-gadget "toolbar" f {
96     { f com-close }
97     { f com-help }
98     { f com-revert }
99     { f com-save }
100     { T{ key-down f f "RET" } com-deploy }
101 } define-command-map
102
103 : buttons,
104     g <toolbar> { 10 10 } over set-pack-gap gadget, ;
105
106 : <deploy-gadget> ( vocab -- gadget )
107     f deploy-gadget boa [
108         dup <deploy-settings>
109         g-> set-deploy-gadget-settings gadget,
110         buttons,
111     ] { 0 1 } build-pack
112     dup deploy-settings-theme
113     dup com-revert ;
114
115 : deploy-tool ( vocab -- )
116     vocab-name dup <deploy-gadget> 10 <border>
117     "Deploying \"" rot "\"" 3append open-window ;