2 USING: accessors ui.gadgets ui.gadgets.packs ui.gadgets.worlds
3 tools.test namespaces models kernel dlists deques math sets
4 math.parser ui sequences hashtables assocs io arrays prettyprint
5 io.streams.string math.geometry.rect ;
9 ! c contains b contains a
12 "a" get "b" get swap add-gadget drop
14 "b" get "c" get swap add-gadget drop
17 { 100 200 } "a" get set-rect-loc
18 { 200 100 } "b" get set-rect-loc
20 ! give c a loc, it doesn't matter
21 { -1000 23 } "c" get set-rect-loc
23 ! what is the location of a inside c?
24 "a" get "c" get relative-loc
28 { 10 10 } "g1" get set-rect-loc
29 { 30 30 } "g1" get set-rect-dim
31 { 20 20 } "g2" get set-rect-loc
32 { 50 500 } "g2" get set-rect-dim
34 { 100 200 } "g3" get set-rect-dim
36 "g1" get "g2" get swap add-gadget drop
37 "g2" get "g3" get swap add-gadget drop
39 [ { 30 30 } ] [ "g1" get screen-loc ] unit-test
40 [ { 30 30 } ] [ "g1" get screen-rect rect-loc ] unit-test
41 [ { 30 30 } ] [ "g1" get screen-rect rect-dim ] unit-test
42 [ { 20 20 } ] [ "g2" get screen-loc ] unit-test
43 [ { 20 20 } ] [ "g2" get screen-rect rect-loc ] unit-test
44 [ { 50 180 } ] [ "g2" get screen-rect rect-dim ] unit-test
45 [ { 0 0 } ] [ "g3" get screen-loc ] unit-test
46 [ { 0 0 } ] [ "g3" get screen-rect rect-loc ] unit-test
47 [ { 100 200 } ] [ "g3" get screen-rect rect-dim ] unit-test
50 { 300 300 } "g1" get set-rect-dim
52 "g2" get "g1" get swap add-gadget drop
53 { 20 20 } "g2" get set-rect-loc
54 { 20 20 } "g2" get set-rect-dim
56 "g3" get "g1" get swap add-gadget drop
57 { 100 100 } "g3" get set-rect-loc
58 { 20 20 } "g3" get set-rect-dim
60 [ t ] [ { 30 30 } "g2" get inside? ] unit-test
62 [ t ] [ { 30 30 } "g1" get (pick-up) "g2" get eq? ] unit-test
64 [ t ] [ { 30 30 } "g1" get pick-up "g2" get eq? ] unit-test
66 [ t ] [ { 110 110 } "g1" get pick-up "g3" get eq? ] unit-test
69 "g4" get "g2" get swap add-gadget drop
70 { 5 5 } "g4" get set-rect-loc
71 { 1 1 } "g4" get set-rect-dim
73 [ t ] [ { 25 25 } "g1" get pick-up "g4" get eq? ] unit-test
75 TUPLE: mock-gadget < gadget graft-called ungraft-called ;
77 : <mock-gadget> ( -- gadget )
78 mock-gadget new-gadget 0 >>graft-called 0 >>ungraft-called ;
81 dup mock-gadget-graft-called 1+
82 swap set-mock-gadget-graft-called ;
84 M: mock-gadget ungraft*
85 dup mock-gadget-ungraft-called 1+
86 swap set-mock-gadget-ungraft-called ;
88 ! We can't print to output-stream here because that might be a pane
89 ! stream, and our graft-queue rebinding here would be captured
90 ! by code adding children to the pane...
92 <dlist> \ graft-queue [
93 [ ] [ <mock-gadget> dup queue-graft unqueue-graft ] unit-test
94 [ t ] [ graft-queue deque-empty? ] unit-test
97 <dlist> \ graft-queue [
98 [ t ] [ graft-queue deque-empty? ] unit-test
100 <mock-gadget> "g" set
101 [ ] [ "g" get queue-graft ] unit-test
102 [ f ] [ graft-queue deque-empty? ] unit-test
103 [ { f t } ] [ "g" get gadget-graft-state ] unit-test
104 [ ] [ "g" get graft-later ] unit-test
105 [ { f t } ] [ "g" get gadget-graft-state ] unit-test
106 [ ] [ "g" get ungraft-later ] unit-test
107 [ { f f } ] [ "g" get gadget-graft-state ] unit-test
108 [ t ] [ graft-queue deque-empty? ] unit-test
109 [ ] [ "g" get ungraft-later ] unit-test
110 [ ] [ "g" get graft-later ] unit-test
111 [ ] [ notify-queued ] unit-test
112 [ { t t } ] [ "g" get gadget-graft-state ] unit-test
113 [ t ] [ graft-queue deque-empty? ] unit-test
114 [ ] [ "g" get graft-later ] unit-test
115 [ 1 ] [ "g" get mock-gadget-graft-called ] unit-test
116 [ ] [ "g" get ungraft-later ] unit-test
117 [ { t f } ] [ "g" get gadget-graft-state ] unit-test
118 [ ] [ notify-queued ] unit-test
119 [ 1 ] [ "g" get mock-gadget-ungraft-called ] unit-test
120 [ { f f } ] [ "g" get gadget-graft-state ] unit-test
125 <mock-gadget> over <model> over set-gadget-model
126 dup "g" get swap add-gadget drop
127 swap 1+ number>string set
131 { "g" "1" "2" "3" } [ get gadget-graft-state ] map prune ;
133 : notify-combo ( ? ? -- )
134 nl "===== Combo: " write 2dup 2array . nl
135 <dlist> \ graft-queue [
136 <mock-gadget> "g" set
137 [ ] [ add-some-children ] unit-test
138 [ V{ { f f } } ] [ status-flags ] unit-test
139 [ ] [ "g" get graft ] unit-test
140 [ V{ { f t } } ] [ status-flags ] unit-test
141 dup [ [ ] [ notify-queued ] unit-test ] when
142 [ ] [ "g" get clear-gadget ] unit-test
143 [ [ 1 ] [ graft-queue dlist-length ] unit-test ] unless
144 [ [ ] [ notify-queued ] unit-test ] when
145 [ ] [ add-some-children ] unit-test
146 [ { f t } ] [ "1" get gadget-graft-state ] unit-test
147 [ { f t } ] [ "2" get gadget-graft-state ] unit-test
148 [ { f t } ] [ "3" get gadget-graft-state ] unit-test
149 [ ] [ graft-queue [ "x" print notify ] slurp-deque ] unit-test
150 [ ] [ notify-queued ] unit-test
151 [ V{ { t t } } ] [ status-flags ] unit-test
154 { { f f } { f t } { t f } { t t } } [ notify-combo ] assoc-each
155 ] with-string-writer print
157 \ <gadget> must-infer
158 \ unparent must-infer
159 \ add-gadget must-infer
160 \ add-gadgets must-infer
161 \ clear-gadget must-infer
163 \ relayout must-infer
164 \ relayout-1 must-infer
165 \ pref-dim must-infer