- [x] (1) fix vertical lines to small to be seen: in some cases (e.g. rect waveform in @mock_upstreamer.py) the vertical lines are to thin to be visible (sometime they glitch in and out of existence): 1. the antialisaing strategy with phosphore effect should be applied with more stregth 2. the lines should be more tick 3. the sample points should be bigger - [x] (2) ~~relative timing~~ **done**: `--relative-time`; see README and SPECS.md for the measured history cost. - in order to avoid problem with time jitter user can decide to go in relative time mode - in this mode absolute signal time is only use for export - the plot time depends just on signal sample rate and frame number, e.g.: - user is acquiring a signal with 1MSps and 100_000 samples per udp frame - last frame as number and previous in this case a 100_000 indexes must be skipped - time is simply: `(( - ) * - ) / ` (or something like that) - [x] (3) ~~named configurations~~ **done**: one directory per source holding `.toml` per configuration plus `active`; a configuration carries a note and the startup settings (`buffer_mb`, `relative_time`, `capture_packets`); the chooser lists them and the menu's _Configurations…_ opens/saves/deletes them. - [x] (4) ~~optional udp frame storage for debugging of strange behaviours~~ **done**: `--capture-packets N`; see README and the design note in `docs/superpowers/specs/` for the ring file, the popover toggle and `tools/capture_to_pcap.py`. - [x] (5) ~~open exported binary waveforms to view/analyse~~ **done**: `--open FILE` and the chooser's **Waveforms** page (the files opened before, newest first, plus *Open…*); the `.npy`'s dtype names the columns, so a load restores the signals, the samples and the axis the export had, and every instrument works on it — see README and `docs/claude/invariants-data-path.md`. - [x] (6) ~~imporve right click menu on the plots~~ **done**: the plot's context menu uses the main menu's row style (`menu_button` + `.udpscope-menu`, asserted by `UDPSCOPE_PROBE_ROWMENU_MS`: uniform `label_x=26`, `h=18`, the shortcut flush right), and deleting a signal is a **Remove signal** submenu listing that plot's traces plus _All traces on this plot_. - [ ] (7) in layout edit mode add the option to drag plot border to resize them - [x] (8) ~~add option to automatic save the last triggered acquisitions in a cache folder and let the user replay them~~ **done**: every latch is written to `//events/` as a `.npy` (the export format), a `.txt` sidecar and a `.bmp` preview drawn from the samples; the **events pane** (revealed with trigger mode, switchable) lists them with time, duration, signals and rate, shows the preview, replays one through the `--open` loader and has *Live* to go back -- see README and `docs/claude/invariants-trigger-and-pinning.md`. - [ ] (9) preferences dialog: - user can choose evnt cache directory (default /.cache/udpscope//events/) - maximum number of events to cache - disable completly the events storage option - enable/disable relative time mode - interface dark/light/auto color - defaults - other parameters