about summary refs log tree commit diff stats
path: root/edit/007-sandbox-delete.mu
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2016-04-22 18:35:10 -0700
committerKartik K. Agaram <vc@akkartik.com>2016-04-22 21:49:29 -0700
commitea5e7fd4cb5757589cf3cb52439a3d432517bc7a (patch)
tree13aa8596e6caedc3e22543be659ff968eeee2890 /edit/007-sandbox-delete.mu
parent537e7812c998b468142b16bde8901d8405dbc690 (diff)
downloadmu-ea5e7fd4cb5757589cf3cb52439a3d432517bc7a.tar.gz
2853 - purge get-address from edit/ app
Phew!
Diffstat (limited to 'edit/007-sandbox-delete.mu')
-rw-r--r--edit/007-sandbox-delete.mu53
1 files changed, 37 insertions, 16 deletions
diff --git a/edit/007-sandbox-delete.mu b/edit/007-sandbox-delete.mu
index 567e3cd6..e59d333e 100644
--- a/edit/007-sandbox-delete.mu
+++ b/edit/007-sandbox-delete.mu
@@ -71,7 +71,7 @@ after <global-touch> [
     break-unless was-delete?
     hide-screen screen
     screen <- render-sandbox-side screen, env
-    screen <- update-cursor screen, recipes, current-sandbox, *sandbox-in-focus?, env
+    screen <- update-cursor screen, recipes, current-sandbox, sandbox-in-focus?, env
     show-screen screen
     loop +next-event:label
   }
@@ -86,8 +86,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
@@ -96,27 +108,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