1
2
3 scenario deleting-sandboxes [
4 local-scope
5 trace-until 100/app
6 assume-screen 100/width, 15/height
7 assume-resources [
8 ]
9 env:&:environment <- new-programming-environment resources, screen, []
10
11 assume-console [
12 left-click 1, 80
13 type [divide-with-remainder 11, 3]
14 press F4
15 type [add 2, 2]
16 press F4
17 ]
18 event-loop screen, console, env, resources
19 screen-should-contain [
20 . run (F4) .
21 . ╎ .
22 .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎─────────────────────────────────────────────────.
23 . ╎0 edit copy delete .
24 . ╎add 2, 2 .
25 . ╎4 .
26 . ╎─────────────────────────────────────────────────.
27 . ╎1 edit copy delete .
28 . ╎divide-with-remainder 11, 3 .
29 . ╎3 .
30 . ╎2 .
31 . ╎─────────────────────────────────────────────────.
32 . ╎ .
33 ]
34
35 assume-console [
36 left-click 7, 85
37 ]
38 run [
39 event-loop screen, console, env, resources
40 ]
41 screen-should-contain [
42 . run (F4) .
43 . ╎ .
44 .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎─────────────────────────────────────────────────.
45 . ╎0 edit copy delete .
46 . ╎add 2, 2 .
47 . ╎4 .
48 . ╎─────────────────────────────────────────────────.
49 . ╎ .
50 . ╎ .
51 ]
52
53 assume-console [
54 left-click 3, 99
55 ]
56 run [
57 event-loop screen, console, env, resources
58 ]
59 screen-should-contain [
60 . run (F4) .
61 . ╎ .
62 .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎─────────────────────────────────────────────────.
63 . ╎ .
64 . ╎ .
65 ]
66 ]
67
68 after <global-touch> [
69
70 {
71 delete?:bool <- should-attempt-delete? click-row, click-column, env
72 break-unless delete?
73 delete?, env <- try-delete-sandbox click-row, env
74 break-unless delete?
75 hide-screen screen
76 screen <- render-sandbox-side screen, env, render
77 screen <- update-cursor screen, recipes, current-sandbox, sandbox-in-focus?, env
78 show-screen screen
79 loop +next-event
80 }
81 ]
82
83
84 def should-attempt-delete? click-row:num, click-column:num, env:&:environment -> result:bool [
85 local-scope
86 load-ingredients
87
88 click-sandbox-area?:bool <- click-on-sandbox-area? click-row, click-column, env
89 return-unless click-sandbox-area?, 0/false
90
91 first-sandbox:&:editor <- get *env, current-sandbox:offset
92 assert first-sandbox, [!!]
93 sandbox-left-margin:num <- get *first-sandbox, left:offset
94 sandbox-right-margin:num <- get *first-sandbox, right:offset
95 _, _, _, _, delete-button-left:num <- sandbox-menu-columns sandbox-left-margin, sandbox-right-margin
96 result <- within-range? click-column, delete-button-left, sandbox-right-margin
97 ]
98
99 def try-delete-sandbox click-row:num, env:&:environment -> clicked-on-delete-button?:bool, env:&:environment [
100 local-scope
101 load-ingredients
102
103 sandbox:&:sandbox <- find-sandbox env, click-row
104 return-unless sandbox, 0/false
105 clicked-on-delete-button? <- copy 1/true
106 env <- delete-sandbox env, sandbox
107 ]
108
109 def delete-sandbox env:&:environment, sandbox:&:sandbox -> env:&:environment [
110 local-scope
111 load-ingredients
112 curr-sandbox:&:sandbox <- get *env, sandbox:offset
113 first-sandbox?:bool <- equal curr-sandbox, sandbox
114 {
115
116 break-unless first-sandbox?
117 next-sandbox:&:sandbox <- get *curr-sandbox, next-sandbox:offset
118 *env <- put *env, sandbox:offset, next-sandbox
119 }
120 {
121
122 break-if first-sandbox?
123 prev-sandbox:&:sandbox <- copy curr-sandbox
124 curr-sandbox <- get *curr-sandbox, next-sandbox:offset
125 {
126 assert curr-sandbox, [sandbox not found! something is wrong.]
127 found?:bool <- equal curr-sandbox, sandbox
128 break-if found?
129 prev-sandbox <- copy curr-sandbox
130 curr-sandbox <- get *curr-sandbox, next-sandbox:offset
131 loop
132 }
133
134 next-sandbox:&:sandbox <- get *curr-sandbox, next-sandbox:offset
135 *prev-sandbox <- put *prev-sandbox, next-sandbox:offset, next-sandbox
136 }
137
138 sandbox-count:num <- get *env, number-of-sandboxes:offset
139 sandbox-count <- subtract sandbox-count, 1
140 *env <- put *env, number-of-sandboxes:offset, sandbox-count
141
142 {
143 break-if next-sandbox
144 render-from:num <- get *env, render-from:offset
145 reset-scroll?:bool <- equal render-from, sandbox-count
146 break-unless reset-scroll?
147 *env <- put *env, render-from:offset, -1
148 }
149 ]
150
151 scenario deleting-sandbox-after-scroll [
152 local-scope
153 trace-until 100/app
154 assume-screen 100/width, 10/height
155
156 assume-resources [
157 ]
158 env:&:environment <- new-programming-environment resources, screen, []
159 render-all screen, env, render
160
161 assume-console [
162 press ctrl-n
163 type [add 2, 2]
164 press F4
165 type [add 1, 1]
166 press F4
167 press page-down
168 ]
169 event-loop screen, console, env, resources
170 screen-should-contain [
171 . run (F4) .
172 . ╎─────────────────────────────────────────────────.
173 .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎0 edit copy delete .
174 . ╎add 1, 1 .
175 . ╎2 .
176 . ╎─────────────────────────────────────────────────.
177 . ╎1 edit copy delete .
178 ]
179
180 assume-console [
181 left-click 6, 99
182 ]
183 run [
184 event-loop screen, console, env, resources
185 ]
186
187 screen-should-contain [
188 . run (F4) .
189 . ╎─────────────────────────────────────────────────.
190 .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎0 edit copy delete .
191 . ╎add 1, 1 .
192 . ╎2 .
193 . ╎─────────────────────────────────────────────────.
194 . ╎ .
195 ]
196 ]
197
198 scenario deleting-top-sandbox-after-scroll [
199 local-scope
200 trace-until 100/app
201 assume-screen 100/width, 10/height
202
203 assume-resources [
204 ]
205 env:&:environment <- new-programming-environment resources, screen, []
206 render-all screen, env, render
207
208 assume-console [
209 press ctrl-n
210 type [add 2, 2]
211 press F4
212 type [add 1, 1]
213 press F4
214 press page-down
215 ]
216 event-loop screen, console, env, resources
217 screen-should-contain [
218 . run (F4) .
219 . ╎─────────────────────────────────────────────────.
220 .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎0 edit copy delete .
221 . ╎add 1, 1 .
222 . ╎2 .
223 . ╎─────────────────────────────────────────────────.
224 . ╎1 edit copy delete .
225 ]
226
227 assume-console [
228 left-click 2, 99
229 ]
230 run [
231 event-loop screen, console, env, resources
232 ]
233
234 screen-should-contain [
235 . run (F4) .
236 . ╎─────────────────────────────────────────────────.
237 .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎0 edit copy delete .
238 . ╎add 2, 2 .
239 . ╎4 .
240 . ╎─────────────────────────────────────────────────.
241 . ╎ .
242 ]
243 ]
244
245 scenario deleting-final-sandbox-after-scroll [
246 local-scope
247 trace-until 100/app
248 assume-screen 100/width, 10/height
249
250 assume-resources [
251 ]
252 env:&:environment <- new-programming-environment resources, screen, []
253 render-all screen, env, render
254
255 assume-console [
256 press ctrl-n
257 type [add 2, 2]
258 press F4
259 type [add 1, 1]
260 press F4
261 press page-down
262 press page-down
263 ]
264 event-loop screen, console, env, resources
265 screen-should-contain [
266 . run (F4) .
267 . ╎─────────────────────────────────────────────────.
268 .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎1 edit copy delete .
269 . ╎add 2, 2 .
270 . ╎4 .
271 . ╎─────────────────────────────────────────────────.
272 . ╎ .
273 ]
274
275 assume-console [
276 left-click 2, 99
277 ]
278 run [
279 event-loop screen, console, env, resources
280 ]
281
282 screen-should-contain [
283 . run (F4) .
284 . ╎ .
285 .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎─────────────────────────────────────────────────.
286 . ╎0 edit copy delete .
287 . ╎add 1, 1 .
288 . ╎2 .
289 . ╎─────────────────────────────────────────────────.
290 . ╎ .
291 ]
292 ]
293
294 scenario deleting-updates-sandbox-count [
295 local-scope
296 trace-until 100/app
297 assume-screen 100/width, 10/height
298
299 assume-resources [
300 ]
301 env:&:environment <- new-programming-environment resources, screen, []
302 render-all screen, env, render
303
304 assume-console [
305 press ctrl-n
306 type [add 2, 2]
307 press F4
308 type [add 1, 1]
309 press F4
310 ]
311 event-loop screen, console, env, resources
312 screen-should-contain [
313 . run (F4) .
314 . ╎ .
315 .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎─────────────────────────────────────────────────.
316 . ╎0 edit copy delete .
317 . ╎add 1, 1 .
318 . ╎2 .
319 . ╎─────────────────────────────────────────────────.
320 . ╎1 edit copy delete .
321 . ╎add 2, 2 .
322 . ╎4 .
323 ]
324
325 assume-console [
326 left-click 3, 99
327 press page-down
328 press page-down
329 ]
330 run [
331 event-loop screen, console, env, resources
332 ]
333
334 screen-should-contain [
335 . run (F4) .
336 . ╎─────────────────────────────────────────────────.
337 .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎0 edit copy delete .
338 . ╎add 2, 2 .
339 . ╎4 .
340 . ╎─────────────────────────────────────────────────.
341 . ╎ .
342 ]
343 ]