// Calculator — terse/elegant edition. Demonstrates: // - selective imports (bare `button("+")`, no `ui.` prefix) // - mutable captures (closures write straight to `num`, `prev`, `op`) // - closure-as-operator (`op` holds a |a,b| closure; equals dispatches // via `call(op, prev, num)` — no opcode ints or if/else chain) // - DSL-with-Scope surface: `window(…) { vstack(…) { grid(…) { … } } }` — the // window block builds the tree, then its builder body runs the loop. // No `root` handle, no trailing app_run: in-block modifiers // (`margin`, `enable_test_server`) act on the ambient element/surface. import ui ( window, vstack, grid, equal_cells, btn, button, bg_color, onclick, divider, text_bound, ui_state, ui_set, margin, enable_test_server ) import std.os (os_getenv) main() { num = 0 prev = 0 op = |a: int, b: int| { return a } display = ui_state(0) digit = |d: int| { num = num * 10 + d; ui_set(display, num) } apply_op = |fn: fn| { prev = num; num = 0; op = fn; ui_set(display, 0) } equals = || { num = call(op, prev, num); prev = 0; ui_set(display, num) } clear = || { num = 0; prev = 0; ui_set(display, 0) } window("Calculator", 280, 260) { vstack(4) { margin(12, 12, 12, 12) text_bound(display, " ", "") divider() // The keypad: a 4-column grid, filled a row at a time, every // key the same size. grid(4, 4, 4) { equal_cells() btn("7") callback { call(digit, 7) } btn("8") callback { call(digit, 8) } btn("9") callback { call(digit, 9) } button("+") { bg_color(0.95, 0.85, 0.5, 1.0) onclick() callback { call(apply_op, |a: int, b: int| { return a + b }) } } btn("4") callback { call(digit, 4) } btn("5") callback { call(digit, 5) } btn("6") callback { call(digit, 6) } button("-") { bg_color(0.95, 0.85, 0.5, 1.0) onclick() callback { call(apply_op, |a: int, b: int| { return a - b }) } } btn("1") callback { call(digit, 1) } btn("2") callback { call(digit, 2) } btn("3") callback { call(digit, 3) } button("*") { bg_color(0.95, 0.85, 0.5, 1.0) onclick() callback { call(apply_op, |a: int, b: int| { return a * b }) } } btn("0") callback { call(digit, 0) } button("C") { bg_color(0.9, 0.6, 0.6, 1.0) onclick() callback { call(clear) } } btn("=") callback { call(equals) } button("/") { bg_color(0.95, 0.85, 0.5, 1.0) onclick() callback { call(apply_op, |a: int, b: int| { if b != 0 { return a / b } return a }) } } } } test_port = os_getenv("AETHER_UI_TEST_PORT") if test_port != null { enable_test_server(9222) } } }