From 2f02189ddcdeb7d25b0ca9bd5b955b764d41a1a7 Mon Sep 17 00:00:00 2001 From: "Kartik K. Agaram" Date: Sat, 21 May 2016 17:44:53 -0700 Subject: 2996 --- html/edit/007-sandbox-delete.mu.html | 257 ++++++++++++++++++----------------- 1 file changed, 133 insertions(+), 124 deletions(-) (limited to 'html/edit/007-sandbox-delete.mu.html') diff --git a/html/edit/007-sandbox-delete.mu.html b/html/edit/007-sandbox-delete.mu.html index b29c649d..137a7887 100644 --- a/html/edit/007-sandbox-delete.mu.html +++ b/html/edit/007-sandbox-delete.mu.html @@ -53,20 +53,20 @@ body { font-size: 12pt; font-family: monospace; color: #eeeeee; background-color . run (F4) . . ┊ . .┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┊━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━. - . ┊0 x. + . ┊0 edit copy delete . . ┊add 2, 2 . . ┊4 . . ┊━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━. - . ┊1 x. + . ┊1 edit copy delete . . ┊divide-with-remainder 11, 3 . . ┊3 . . ┊2 . . ┊━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━. . ┊ . ] - # delete second sandbox + # delete second sandbox by clicking on left edge of 'delete' button assume-console [ - left-click 7, 99 + left-click 7, 85 ] run [ event-loop screen:address:screen, console:address:console, 3:address:programming-environment-data @@ -75,14 +75,14 @@ body { font-size: 12pt; font-family: monospace; color: #eeeeee; background-color . run (F4) . . ┊ . .┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┊━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━. - . ┊0 x. + . ┊0 edit copy delete . . ┊add 2, 2 . . ┊4 . . ┊━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━. . ┊ . . ┊ . ] - # delete first sandbox + # delete first sandbox by clicking at right edge of 'delete' button assume-console [ left-click 3, 99 ] @@ -99,10 +99,12 @@ body { font-size: 12pt; font-family: monospace; color: #eeeeee; background-color ] after <global-touch> [ - # on a sandbox delete icon? process delete + # support 'delete' button { - was-delete?:boolean <- delete-sandbox t, env - break-unless was-delete? + delete?:boolean <- should-attempt-delete? click-row, click-column, env + break-unless delete? + delete?, env <- try-delete-sandbox click-row, env + break-unless delete? hide-screen screen screen <- render-sandbox-side screen, env screen <- update-cursor screen, recipes, current-sandbox, sandbox-in-focus?, env @@ -111,70 +113,77 @@ body { font-size: 12pt; font-family: monospace; color: #eeeeee; background-color } ] -def delete-sandbox t:touch-event, env:address:programming-environment-data -> was-delete?:boolean, env:address:programming-environment-data [ +# some preconditions for attempting to delete a sandbox +def should-attempt-delete? click-row:number, click-column:number, env:address:programming-environment-data -> result:boolean [ local-scope load-ingredients - click-column:number <- get t, column:offset - current-sandbox:address:editor-data <- get *env, current-sandbox:offset - right:number <- get *current-sandbox, right:offset - at-right?:boolean <- equal click-column, right - return-unless at-right?, 0/false - click-row:number <- get t, row:offset + # are we below the sandbox editor? + click-sandbox-area?:boolean <- click-on-sandbox-area? click-row, click-column, env + reply-unless click-sandbox-area?, 0/false + # narrower, is the click in the columns spanning the 'copy' button? + first-sandbox:address:editor-data <- get *env, current-sandbox:offset + assert first-sandbox, [!!] + sandbox-left-margin:number <- get *first-sandbox, left:offset + sandbox-right-margin:number <- get *first-sandbox, right:offset + _, _, _, _, delete-button-left:number <- sandbox-menu-columns sandbox-left-margin, sandbox-right-margin + result <- within-range? click-column, delete-button-left, sandbox-right-margin +] + +def try-delete-sandbox click-row:number, env:address:programming-environment-data -> clicked-on-delete-button?:boolean, env:address:programming-environment-data [ + local-scope + load-ingredients + # identify the sandbox to delete, if the click was actually on the 'delete' button + sandbox:address:sandbox-data <- find-sandbox env, click-row + return-unless sandbox, 0/false + clicked-on-delete-button? <- copy 1/true + env <- delete-sandbox env, sandbox +] + +def delete-sandbox env:address:programming-environment-data, sandbox:address:sandbox-data -> env:address:programming-environment-data [ + local-scope + load-ingredients + curr-sandbox:address:sandbox-data <- get *env, sandbox:offset + first-sandbox?:boolean <- equal curr-sandbox, sandbox { - first:address: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: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 + # first sandbox? pop + break-unless first-sandbox? + next-sandbox:address:sandbox-data <- get *curr-sandbox, next-sandbox:offset + *env <- put *env, sandbox:offset, next-sandbox } - prev:address:sandbox-data <- get *env, sandbox:offset - assert prev, [failed to find any sandboxes!] - curr:address:sandbox-data <- get *prev, next-sandbox:offset { - break-unless curr - # more sandboxes to check + # not first sandbox? + break-if first-sandbox? + prev-sandbox:address:sandbox-data <- copy curr-sandbox + curr-sandbox <- get *curr-sandbox, next-sandbox:offset { - target-row:number <- get *curr, starting-row-on-screen:offset - delete-curr?:boolean <- equal target-row, click-row - break-unless delete-curr? - # delete this sandbox - next:address:sandbox-data <- get *curr, next-sandbox:offset - *prev <- put *prev, next-sandbox:offset, next - env <- fixup-delete env, next - return 1/true # force rerender + assert curr-sandbox, [sandbox not found! something is wrong.] + found?:boolean <- equal curr-sandbox, sandbox + break-if found? + prev-sandbox <- copy curr-sandbox + curr-sandbox <- get *curr-sandbox, next-sandbox:offset + loop } - prev <- copy curr - curr <- get *curr, next-sandbox:offset - loop + # snip sandbox out of its list + next-sandbox:address:sandbox-data <- get *curr-sandbox, next-sandbox:offset + *prev-sandbox <- put *prev-sandbox, next-sandbox:offset, next-sandbox } - return 0/false -] - -def fixup-delete env:address:programming-environment-data, next:address:sandbox-data -> env:address: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 + # reset scroll if deleted sandbox was last { - break-if next - # deleted sandbox was last + break-if next-sandbox 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 + assume-screen 100/width, 10/height # initialize environment 1:address:array:character <- new [] 2:address:array:character <- new [] @@ -187,40 +196,40 @@ body { font-size: 12pt; font-family: monospace; color: #eeeeee; background-color press F4 type [add 1, 1] press F4 - press down-arrow + press page-down ] event-loop screen:address:screen, console:address:console, 3:address:programming-environment-data screen-should-contain [ - . . - . ┊━━━━━━━━━━━━━━. - .┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┊0 x. - . ┊add 1, 1 . - . ┊2 . - . ┊━━━━━━━━━━━━━━. - . ┊1 x. + . run (F4) . + . ┊━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━. + .┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┊0 edit copy delete . + . ┊add 1, 1 . + . ┊2 . + . ┊━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━. + . ┊1 edit copy delete . ] # delete the second sandbox assume-console [ - left-click 6, 29 + left-click 6, 99 ] run [ event-loop screen:address:screen, console:address:console, 3:address:programming-environment-data ] # second sandbox shows in editor; scroll resets to display first sandbox screen-should-contain [ - . . - . ┊━━━━━━━━━━━━━━. - .┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┊0 x. - . ┊add 1, 1 . - . ┊2 . - . ┊━━━━━━━━━━━━━━. - . ┊ . + . run (F4) . + . ┊━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━. + .┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┊0 edit copy delete . + . ┊add 1, 1 . + . ┊2 . + . ┊━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━. + . ┊ . ] ] scenario deleting-top-sandbox-after-scroll [ trace-until 100/app # trace too long - assume-screen 30/width, 10/height + assume-screen 100/width, 10/height # initialize environment 1:address:array:character <- new [] 2:address:array:character <- new [] @@ -233,40 +242,40 @@ body { font-size: 12pt; font-family: monospace; color: #eeeeee; background-color press F4 type [add 1, 1] press F4 - press down-arrow + press page-down ] event-loop screen:address:screen, console:address:console, 3:address:programming-environment-data screen-should-contain [ - . . - . ┊━━━━━━━━━━━━━━. - .┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┊0 x. - . ┊add 1, 1 . - . ┊2 . - . ┊━━━━━━━━━━━━━━. - . ┊1 x. + . run (F4) . + . ┊━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━. + .┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┊0 edit copy delete . + . ┊add 1, 1 . + . ┊2 . + . ┊━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━. + . ┊1 edit copy delete . ] # delete the second sandbox assume-console [ - left-click 2, 29 + left-click 2, 99 ] run [ event-loop screen:address:screen, console:address:console, 3:address:programming-environment-data ] # second sandbox shows in editor; scroll resets to display first sandbox screen-should-contain [ - . . - . ┊━━━━━━━━━━━━━━. - .┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┊0 x. - . ┊add 2, 2 . - . ┊4 . - . ┊━━━━━━━━━━━━━━. - . ┊ . + . run (F4) . + . ┊━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━. + .┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┊0 edit copy delete . + . ┊add 2, 2 . + . ┊4 . + . ┊━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━. + . ┊ . ] ] scenario deleting-final-sandbox-after-scroll [ trace-until 100/app # trace too long - assume-screen 30/width, 10/height + assume-screen 100/width, 10/height # initialize environment 1:address:array:character <- new [] 2:address:array:character <- new [] @@ -279,42 +288,42 @@ body { font-size: 12pt; font-family: monospace; color: #eeeeee; background-color press F4 type [add 1, 1] press F4 - press down-arrow - press down-arrow + press page-down + press page-down ] event-loop screen:address:screen, console:address:console, 3:address:programming-environment-data screen-should-contain [ - . . - . ┊━━━━━━━━━━━━━━. - .┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┊1 x. - . ┊add 2, 2 . - . ┊4 . - . ┊━━━━━━━━━━━━━━. - . ┊ . + . run (F4) . + . ┊━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━. + .┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┊1 edit copy delete . + . ┊add 2, 2 . + . ┊4 . + . ┊━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━. + . ┊ . ] # delete the second sandbox assume-console [ - left-click 2, 29 + left-click 2, 99 ] run [ event-loop screen:address:screen, console:address:console, 3:address:programming-environment-data ] # implicitly scroll up to first sandbox screen-should-contain [ - . . - . ┊ . - .┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┊━━━━━━━━━━━━━━. - . ┊0 x. - . ┊add 1, 1 . - . ┊2 . - . ┊━━━━━━━━━━━━━━. - . ┊ . + . run (F4) . + . ┊ . + .┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┊━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━. + . ┊0 edit copy delete . + . ┊add 1, 1 . + . ┊2 . + . ┊━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━. + . ┊ . ] ] scenario deleting-updates-sandbox-count [ trace-until 100/app # trace too long - assume-screen 30/width, 10/height + assume-screen 100/width, 10/height # initialize environment 1:address:array:character <- new [] 2:address:array:character <- new [] @@ -330,35 +339,35 @@ body { font-size: 12pt; font-family: monospace; color: #eeeeee; background-color ] event-loop screen:address:screen, console:address:console, 3:address:programming-environment-data screen-should-contain [ - . . - . ┊ . - .┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┊━━━━━━━━━━━━━━. - . ┊0 x. - . ┊add 1, 1 . - . ┊2 . - . ┊━━━━━━━━━━━━━━. - . ┊1 x. - . ┊add 2, 2 . - . ┊4 . + . run (F4) . + . ┊ . + .┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┊━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━. + . ┊0 edit copy delete . + . ┊add 1, 1 . + . ┊2 . + . ┊━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━. + . ┊1 edit copy delete . + . ┊add 2, 2 . + . ┊4 . ] # delete the second sandbox, then try to scroll down twice assume-console [ - left-click 3, 29 - press down-arrow - press down-arrow + left-click 3, 99 + press page-down + press page-down ] run [ event-loop screen:address:screen, console:address:console, 3:address:programming-environment-data ] # shouldn't go past last sandbox screen-should-contain [ - . . - . ┊━━━━━━━━━━━━━━. - .┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┊0 x. - . ┊add 2, 2 . - . ┊4 . - . ┊━━━━━━━━━━━━━━. - . ┊ . + . run (F4) . + . ┊━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━. + .┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┊0 edit copy delete . + . ┊add 2, 2 . + . ┊4 . + . ┊━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━. + . ┊ . ] ] -- cgit 1.4.1-2-gfad0