about summary refs log tree commit diff stats
path: root/sandbox/007-sandbox-delete.mu
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2016-04-22 22:53:39 -0700
committerKartik K. Agaram <vc@akkartik.com>2016-04-22 22:53:39 -0700
commitd31037ffdcdb8097b91af121a27ef18c15f7e802 (patch)
treec697eab36eeb21eb15d27937c68396f0d0786f14 /sandbox/007-sandbox-delete.mu
parentea5e7fd4cb5757589cf3cb52439a3d432517bc7a (diff)
downloadmu-d31037ffdcdb8097b91af121a27ef18c15f7e802.tar.gz
2854 - purge get-address from sandbox/ app
Diffstat (limited to 'sandbox/007-sandbox-delete.mu')
-rw-r--r--sandbox/007-sandbox-delete.mu51
1 files changed, 36 insertions, 15 deletions
diff --git a/sandbox/007-sandbox-delete.mu b/sandbox/007-sandbox-delete.mu
index dbf5d70c..f99012b6 100644
--- a/sandbox/007-sandbox-delete.mu
+++ b/sandbox/007-sandbox-delete.mu
@@ -85,8 +85,20 @@ def delete-sandbox t:touch-event, env:address:shared:programming-environment-dat
   at-right?:boolean <- equal click-column, right
   return-unless at-right?, 0/false
   click-row:number <- get t, row:offset
-  prev:address:address:shared:sandbox-data <- get-address *env, sandbox:offset
-  curr:address:shared:sandbox-data <- get *env, sandbox:offset
+  {
+    first:address:shared:sandbox-data <- get *env, sandbox:offset
+    reply-unless first, 0/false
+    target-row:number <- get *first, starting-row-on-screen:offset
+    delete-first?:boolean <- equal target-row, click-row
+    break-unless delete-first?
+    new-first:address:shared:sandbox-data <- get *first, next-sandbox:offset
+    *env <- put *env, sandbox:offset, new-first
+    env <- fixup-delete env, new-first
+    return 1/true  # force rerender
+  }
+  prev:address:shared:sandbox-data <- get *env, sandbox:offset
+  assert prev, [failed to find any sandboxes!]
+  curr:address:shared:sandbox-data <- get *prev, next-sandbox:offset
   {
     break-unless curr
     # more sandboxes to check
@@ -95,27 +107,36 @@ def delete-sandbox t:touch-event, env:address:shared:programming-environment-dat
       delete-curr?:boolean <- equal target-row, click-row
       break-unless delete-curr?
       # delete this sandbox
-      *prev <- get *curr, next-sandbox:offset
-      # update sandbox count
-      sandbox-count:address:number <- get-address *env, number-of-sandboxes:offset
-      *sandbox-count <- subtract *sandbox-count, 1
-      # if it's the last sandbox and if it was the only sandbox rendered, reset scroll
-      {
-        break-if *prev
-        render-from:address:number <- get-address *env, render-from:offset
-        reset-scroll?:boolean <- equal *render-from, *sandbox-count
-        break-unless reset-scroll?
-        *render-from <- copy -1
-      }
+      next:address:shared:sandbox-data <- get *curr, next-sandbox:offset
+      *prev <- put *prev, next-sandbox:offset, next
+      env <- fixup-delete env, next
       return 1/true  # force rerender
     }
-    prev <- get-address *curr, next-sandbox:offset
+    prev <- copy curr
     curr <- get *curr, next-sandbox:offset
     loop
   }
   return 0/false
 ]
 
+def fixup-delete env:address:shared:programming-environment-data, next:address:shared:sandbox-data -> env:address:shared:programming-environment-data [
+  local-scope
+  load-ingredients
+  # update sandbox count
+  sandbox-count:number <- get *env, number-of-sandboxes:offset
+  sandbox-count <- subtract sandbox-count, 1
+  *env <- put *env, number-of-sandboxes:offset, sandbox-count
+  {
+    break-if next
+    # deleted sandbox was last
+    render-from:number <- get *env, render-from:offset
+    reset-scroll?:boolean <- equal render-from, sandbox-count
+    break-unless reset-scroll?
+    # deleted sandbox was only sandbox rendered, so reset scroll
+    *env <- put *env, render-from:offset, -1
+  }
+]
+
 scenario deleting-sandbox-after-scroll [
   trace-until 100/app  # trace too long
   assume-screen 30/width, 10/height