diff --git a/README.md b/README.md index cf2fbb3..633a22b 100644 --- a/README.md +++ b/README.md @@ -98,6 +98,20 @@ as you fix it, and `Esc` abandons the edit. Here a `TIME(15)` column rejects `08 --- +### `LOOKUP` columns — pick a value instead of typing it + +A column declared `LOOKUP . DISPLAY ` edits through a dropdown in +both BROWSE and forms — showing the friendlier label, storing the code. Here `SCHEDID` +is constrained to `SCHEDULES.SCHEDID`, displaying `DESCR`. + +![BROWSE editing a LOOKUP column via dropdown](docs/screenshots/screenshot-lookup-browse.png) + +A field-bound `@ SAY GET` (one whose name matches a table column) renders the same picker: + +![A form field bound to a LOOKUP column](docs/screenshots/screenshot-lookup-form.png) + +--- + ### Aggregate commands & dBASE III parity `SUM`, `AVERAGE`, `? ROUND(…)`, `? MAX(…)`, and `SORT ON … TO` — numeric aggregates and sorted copies, honouring the active filter. diff --git a/docs/screenshots/screenshot-assistant-wizard.png b/docs/screenshots/screenshot-assistant-wizard.png index 0edd42e..18f882d 100644 Binary files a/docs/screenshots/screenshot-assistant-wizard.png and b/docs/screenshots/screenshot-assistant-wizard.png differ diff --git a/docs/screenshots/screenshot-assistant.png b/docs/screenshots/screenshot-assistant.png index 52d8c26..eafb182 100644 Binary files a/docs/screenshots/screenshot-assistant.png and b/docs/screenshots/screenshot-assistant.png differ diff --git a/docs/screenshots/screenshot-csv.png b/docs/screenshots/screenshot-csv.png index 25fa95e..8811f0b 100644 Binary files a/docs/screenshots/screenshot-csv.png and b/docs/screenshots/screenshot-csv.png differ diff --git a/docs/screenshots/screenshot-index.png b/docs/screenshots/screenshot-index.png index 8884642..d61869a 100644 Binary files a/docs/screenshots/screenshot-index.png and b/docs/screenshots/screenshot-index.png differ diff --git a/docs/screenshots/screenshot-list.png b/docs/screenshots/screenshot-list.png index c635a5b..bd06029 100644 Binary files a/docs/screenshots/screenshot-list.png and b/docs/screenshots/screenshot-list.png differ diff --git a/docs/screenshots/screenshot-lookup-browse.png b/docs/screenshots/screenshot-lookup-browse.png new file mode 100644 index 0000000..fa8d10c Binary files /dev/null and b/docs/screenshots/screenshot-lookup-browse.png differ diff --git a/docs/screenshots/screenshot-lookup-form.png b/docs/screenshots/screenshot-lookup-form.png new file mode 100644 index 0000000..3237adc Binary files /dev/null and b/docs/screenshots/screenshot-lookup-form.png differ diff --git a/docs/screenshots/screenshot-modify-structure.png b/docs/screenshots/screenshot-modify-structure.png index bd10f65..b9957d4 100644 Binary files a/docs/screenshots/screenshot-modify-structure.png and b/docs/screenshots/screenshot-modify-structure.png differ diff --git a/docs/screenshots/screenshot-parity.png b/docs/screenshots/screenshot-parity.png index 4ade517..4cfcad6 100644 Binary files a/docs/screenshots/screenshot-parity.png and b/docs/screenshots/screenshot-parity.png differ diff --git a/docs/screenshots/screenshot-repl-session.png b/docs/screenshots/screenshot-repl-session.png index f8bb091..22f3fb0 100644 Binary files a/docs/screenshots/screenshot-repl-session.png and b/docs/screenshots/screenshot-repl-session.png differ diff --git a/docs/screenshots/screenshot-terminal.png b/docs/screenshots/screenshot-terminal.png index 124140a..60c8602 100644 Binary files a/docs/screenshots/screenshot-terminal.png and b/docs/screenshots/screenshot-terminal.png differ diff --git a/scripts/capture-screenshots.mjs b/scripts/capture-screenshots.mjs index 875809b..d684dfd 100644 --- a/scripts/capture-screenshots.mjs +++ b/scripts/capture-screenshots.mjs @@ -295,5 +295,54 @@ console.log('14. NEW: BROWSE per-cell validation rejecting a TIME(15) edit'); await page.close(); } +// ── 15. screenshot-lookup-browse.png (NEW in v1.3.0) ────────────────────── +console.log('15. NEW: BROWSE editing a LOOKUP column via dropdown'); +{ + const page = await newPage(); + await boot(page); + await cmd(page, 'USE DATABASE screenshotdb', 800); + await cmd(page, 'DROP TABLE schedules', 400); + await cmd(page, 'DROP TABLE staff', 400); + await cmd(page, 'CREATE TABLE schedules (SCHEDID CHAR(4), DESCR CHAR(30))', 700); + await cmd(page, 'USE schedules', 500); + await cmd(page, 'APPEND RECORD', 400); + await cmd(page, 'REPLACE SCHEDID WITH "S001", DESCR WITH "Standard 40h (08:00-16:30)"', 600); + await cmd(page, 'APPEND RECORD', 400); + await cmd(page, 'REPLACE SCHEDID WITH "S002", DESCR WITH "Short 31.25h (09:00-16:00)"', 600); + await cmd(page, 'CREATE TABLE staff (NAME CHAR(30), SCHEDID CHAR(4) LOOKUP SCHEDULES.SCHEDID DISPLAY DESCR)', 700); + await cmd(page, 'USE staff', 500); + await cmd(page, 'APPEND RECORD', 500); + await cmd(page, 'REPLACE NAME WITH "Ada Lovelace", SCHEDID WITH "S001"', 500); + await cmd(page, 'BROWSE', 1200); + await page.waitForSelector('#grid-view:not(.hidden)', { timeout: 8000 }); + + const td = page.locator('#grid-tbody td[data-ri="0"][data-ci="1"]'); + await td.dblclick(); + await page.waitForSelector('#grid-tbody select.cell-ed', { timeout: 5000 }); + await page.waitForTimeout(300); + await snap(page, 'screenshot-lookup-browse.png'); + await page.keyboard.press('Escape'); + await page.keyboard.press('Escape'); + await page.close(); +} + +// ── 16. screenshot-lookup-form.png (NEW in v1.3.0) ──────────────────────── +console.log('16. NEW: field-bound GET rendering a LOOKUP picker in a form'); +{ + const page = await newPage(); + await boot(page); + await cmd(page, 'USE DATABASE screenshotdb', 800); + await cmd(page, 'USE staff', 500); + await cmd(page, '@ 2, 5 SAY "Name : " GET NAME', 300); + await cmd(page, '@ 3, 5 SAY "Schedule: " GET SCHEDID', 300); + await cmd(page, 'READ', 900); + await page.waitForSelector('#form-view', { state: 'visible', timeout: 6000 }); + await page.waitForSelector('#form-view select.f-get', { timeout: 5000 }); + await page.waitForTimeout(400); + await snap(page, 'screenshot-lookup-form.png'); + await page.keyboard.press('Escape'); + await page.close(); +} + await browser.close(); console.log('\nDone. All screenshots written to docs/screenshots/');