diff options
author | Kartik K. Agaram <vc@akkartik.com> | 2016-05-19 21:35:34 -0700 |
---|---|---|
committer | Kartik K. Agaram <vc@akkartik.com> | 2016-05-19 21:35:34 -0700 |
commit | 607ddf3391dba72725a368e047169004ada0fcbe (patch) | |
tree | baa3557cae6220a7e9be943af0d76edd7e0eb588 /sandbox/007-sandbox-delete.mu | |
parent | 66ee78a7bbc209d640c3c360d8973248bc66c898 (diff) | |
download | mu-607ddf3391dba72725a368e047169004ada0fcbe.tar.gz |
2983 - migrate buttons over to sandbox/
Diffstat (limited to 'sandbox/007-sandbox-delete.mu')
-rw-r--r-- | sandbox/007-sandbox-delete.mu | 260 |
1 files changed, 133 insertions, 127 deletions
diff --git a/sandbox/007-sandbox-delete.mu b/sandbox/007-sandbox-delete.mu index f8ea3450..252b6708 100644 --- a/sandbox/007-sandbox-delete.mu +++ b/sandbox/007-sandbox-delete.mu @@ -7,7 +7,6 @@ scenario deleting-sandboxes [ 2:address:programming-environment-data <- new-programming-environment screen:address:screen, 1:address:array:character # run a few commands assume-console [ - left-click 1, 0 type [divide-with-remainder 11, 3] press F4 type [add 2, 2] @@ -18,20 +17,20 @@ scenario deleting-sandboxes [ . 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, 49 + left-click 7, 34 ] run [ event-loop screen:address:screen, console:address:console, 2:address:programming-environment-data @@ -40,14 +39,13 @@ scenario deleting-sandboxes [ . 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, 49 ] @@ -59,15 +57,16 @@ scenario deleting-sandboxes [ . . .━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━. . . - . . ] ] 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, current-sandbox, env @@ -76,70 +75,77 @@ after <global-touch> [ } ] -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 + # are we below the sandbox editor? + click-sandbox-area?:boolean <- click-on-sandbox-area? click-row, 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 - 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 + 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 50/width, 10/height # initialize environment 1:address:array:character <- new [] 2:address:programming-environment-data <- new-programming-environment screen:address:screen, 1:address:array:character @@ -155,39 +161,39 @@ scenario deleting-sandbox-after-scroll [ ] event-loop screen:address:screen, console:address:console, 2:address:programming-environment-data screen-should-contain [ - . . # menu - .━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━. - .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 assume-console [ - left-click 6, 29 + left-click 6, 34 ] run [ event-loop screen:address:screen, console:address:console, 2: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 50/width, 10/height # initialize environment 1:address:array:character <- new [] 2:address:programming-environment-data <- new-programming-environment screen:address:screen, 1:address:array:character @@ -203,39 +209,39 @@ scenario deleting-top-sandbox-after-scroll [ ] event-loop screen:address:screen, console:address:console, 2:address:programming-environment-data screen-should-contain [ - . . # menu - .━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━. - .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 assume-console [ - left-click 2, 29 + left-click 2, 34 ] run [ event-loop screen:address:screen, console:address:console, 2: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 50/width, 10/height # initialize environment 1:address:array:character <- new [] 2:address:programming-environment-data <- new-programming-environment screen:address:screen, 1:address:array:character @@ -252,37 +258,37 @@ scenario deleting-final-sandbox-after-scroll [ ] event-loop screen:address:screen, console:address:console, 2: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, 34 ] run [ event-loop screen:address:screen, console:address:console, 2: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 50/width, 10/height # initialize environment 1:address:array:character <- new [] 2:address:programming-environment-data <- new-programming-environment screen:address:screen, 1:address:array:character @@ -297,20 +303,20 @@ scenario deleting-updates-sandbox-count [ ] event-loop screen:address:screen, console:address:console, 2: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 + left-click 3, 34 press page-down press page-down ] @@ -319,12 +325,12 @@ scenario deleting-updates-sandbox-count [ ] # 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 . + .━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━. + . . ] ] |