diff --git a/CHANGELOG.md b/CHANGELOG.md index ac2028e3..c9bd2f6a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,228 @@ # CHANGELOG +## v0.10.0 (2026-08-17) + +### Bug Fixes + +- Measured threshold is rotation count >= 1 + ([`2909182`](https://gitea.psi.ch/mx/AareDAQ/commit/2909182bb104d96a5b2d44ae8bb33a5056a69d67)) + +Confirmed by Dawn: any rotation data counts as measured; unmeasured is exactly rotation count 0. The + old > 1 rule left single-rotation samples looking like still-to-do work in the Unmeasured view. + +Co-Authored-By: Claude Fable 5 + +- No auto-switch to beamline view during Sample alignment + ([`cb5837d`](https://gitea.psi.ch/mx/AareDAQ/commit/cb5837d90f03c02c56fd017f9eb714a2164e1753)) + +Busy in Sample alignment IS the alignment (centring moves) - yanking the view away to the combined + beamline tab hid exactly what the user was doing. The motion-watch switch now skips that state; + robot exchange and other busy transitions still switch as before. + +Co-Authored-By: Claude Fable 5 + +- Order sample count columns by workflow, unwire crossed columns + ([`f303f29`](https://gitea.psi.ch/mx/AareDAQ/commit/f303f29214c780b9c97e360b598d6a849e2f7a14)) + +Both bottom-dock tables now list mount -> raster -> screening -> rotation, the order the work + actually happens in. In the Auxiliary table the swap also fixes a real bug: data() feeds get_entry + header-index-minus-1, but rotation/raster were crossed against the header, so 'Raster count' + displayed rotation counts and vice versa. + +Co-Authored-By: Claude Fable 5 + +- Pyright-style ignore for setGraphicsEffect(None) + ([`03ae77f`](https://gitea.psi.ch/mx/AareDAQ/commit/03ae77fa749a216412dc23045f2660e840ae1b98)) + +basedpyright disables mypy-style 'type: ignore' comments by default, so the diff-quality gate still + counted the violation; match the existing 'pyright: ignore[reportArgumentType]' convention from + main_window. + +Co-Authored-By: Claude Fable 5 + +### Chores + +- Clarify move to mounting position in smargon movement + ([`adcc63d`](https://gitea.psi.ch/mx/AareDAQ/commit/adcc63d45cfaf95357b86fd311d8b5c8a5d06b22)) + +### Code Style + +- Expanded help overlay opens top center, under the badge + ([`3053aaa`](https://gitea.psi.ch/mx/AareDAQ/commit/3053aaae9386bc108b429b036dab0b359a9446f1)) + +The '?' badge moved to the top middle but the cheat sheet still opened bottom-left, sending the + mouse across the view to close it. The overlay now drops in where the badge was. + +Co-Authored-By: Claude Fable 5 + +- Help badge at center top, More link right-aligned + ([`a0baa2b`](https://gitea.psi.ch/mx/AareDAQ/commit/a0baa2b54dde762af27be62c7c15658728e797b6)) + +The '?' badge sat in a corner, which drifts oddly when the view is scaled to fit; the top middle + stays put and out of the sample's way. Transparency unchanged - visible enough to find, not + disturbing. 'More... (F1)' moves to the overlay's right edge, reading like a dialog's action + button. + +Co-Authored-By: Claude Fable 5 + +- Move Unmeasured next to All, 1px gap between filter chips + ([`378c257`](https://gitea.psi.ch/mx/AareDAQ/commit/378c25799f9da4e393619439776d2e5af69d389e)) + +Unmeasured and All are both 'what is left' views; the hand-applied labels (Queued/Flagged/Measured) + follow. The 1px spacing keeps the chips readable as separate buttons instead of one solid bar. + +Co-Authored-By: Claude Fable 5 + +- Wrap shutter flag f-strings for ruff format + ([`32a835b`](https://gitea.psi.ch/mx/AareDAQ/commit/32a835b6616425fca6b2a9444705212cc98a5b1c)) + +Co-Authored-By: Claude Fable 5 + +### Features + +- Add Unflag to the sample table context menu + ([`900bc2f`](https://gitea.psi.ch/mx/AareDAQ/commit/900bc2f6f7f9c58a8c45d123f5c9bfb70319cb5e)) + +Below Mount/Unmount, acting on the selection like the queue actions. Flagging happens by dropping + rows on the Flagged chip; until now there was no way back. Disabled when nothing in the selection + is flagged. + +Co-Authored-By: Claude Fable 5 + +- Add Unmeasured filter chip to the sample table + ([`4175cb8`](https://gitea.psi.ch/mx/AareDAQ/commit/4175cb8edfa6b732260d9a4f2c3f339216e9ba04)) + +Complement of Measured (rotation count <= 1): one click shows everything still to be done, so it can + be selected wholesale and queued. Plain chip like All - unmeasured rows carry no tint, so there is + no legend color to wear; cross-status marks (queued/ flagged) show like in the Measured view. + +Co-Authored-By: Claude Fable 5 + +- Breathe the pending transition target in the state strip + ([`fbd40ee`](https://gitea.psi.ch/mx/AareDAQ/commit/fbd40eee90b96e517252a757c3e00e9af4902977)) + +While Moving, the target state sat solid blue and read as already reached. An opacity pulse + (QGraphicsOpacityEffect + QPropertyAnimation) marks it as in progress; a stylesheet animation + would repolish the button every frame, which the guarded updates in _apply_highlight exist to + avoid. + +Co-Authored-By: Claude Fable 5 + +- Clicking the '#' header selects all rows + ([`4a728ba`](https://gitea.psi.ch/mx/AareDAQ/commit/4a728baf79a9fa677e83ccb895a1689901b6ce23)) + +The status column holds no sortable data, so its header click slot was free: it now does Ctrl+A, + pairing with the Unmeasured chip to grab everything still to be done in one motion. The sort + indicator is put back afterwards - the click drags it onto '#' even though the model ignores + sorting there. + +Co-Authored-By: Claude Fable 5 + +- Current energy readout in Exp. Config energy row + ([`1fef282`](https://gitea.psi.ch/mx/AareDAQ/commit/1fef28231b707118f645e02f04ad3cf81e953349)) + +Mirrors the Beamline setup live readout above Set Energy, fed by the same DAQ tick with the + zero-energy guard and repaint skip. + +Co-Authored-By: Claude Fable 5 + +- Fast shutter open/close row in Beamline setup + ([`8f91f1e`](https://gitea.psi.ch/mx/AareDAQ/commit/8f91f1ed2ed1cbca04dcd00f761292b0108b19a7)) + +Status flag on the left (same rich-text scheme as the status bar, theme-aware via set_theme), + Open/Close buttons on the right, wired to the same daq.open_shutter/close_shutter slots + staff-gated in main_window. + +Co-Authored-By: Claude Fable 5 + +- Live energy/wavelength readout in Beamline setup + ([`2a82c59`](https://gitea.psi.ch/mx/AareDAQ/commit/2a82c598c0010a8d766cb781f31f0a4d85f09b2e)) + +New 'Current energy / lambda' row above the setpoint, fed per DAQ tick from diffraction.energy_keV; + the setpoint row is renamed 'Set Energy (keV)' so 'what is' and 'what to set' are distinct. Guards + energy 0.0 (server's detector-unavailable fallback) because the wavelength property divides by it. + The copied energy row in the experiment configuration is renamed to match. + +Co-Authored-By: Claude Fable 5 + +- Put the ExpHutch shutter left of the fast shutter + ([`977483e`](https://gitea.psi.ch/mx/AareDAQ/commit/977483ef2843d56abe921fb8c6d999a130423c2e)) + +Beam-path order in the status bar: the hutch shutter sits upstream of the fast shutter, so it reads + left to right along the beam. + +Co-Authored-By: Claude Fable 5 + +- Queue controls live only in the Queued view + ([`6ace1fc`](https://gitea.psi.ch/mx/AareDAQ/commit/6ace1fcbcfd8815f75c3d4498427050b35edc659)) + +Run/Remove selected/Clear list act on the queue, whose order only the Queued chip view shows - in + other views they are greyed out with a tooltip pointing at the chip. Run stays enabled while + automation runs so pausing is always possible. Applies to the docked trio and the pop-out clones + alike. + +Co-Authored-By: Claude Fable 5 + +- Queued chip view shows the actual run order + ([`344888d`](https://gitea.psi.ch/mx/AareDAQ/commit/344888dac072090fcf33a751dfb330bd2094bee1)) + +The queue engine keeps insertion order and Run pops its head, but the Queued view sorted by the + dewar table's header sort - the top row was not what runs next. set_queued_ids now keeps the order + it is fed (the queue model's order) and the Queued view displays exactly that; header clicks no + longer reorder it. + +Co-Authored-By: Claude Fable 5 + +- Sample camera starts in scale-to-fit + ([`b58c23d`](https://gitea.psi.ch/mx/AareDAQ/commit/b58c23d0f65207a6ed15489fbcdeaa04acc2265a)) + +_autoscale now defaults on, so the view fits from the first layout (the constructor's placeholder + already carries the camera size and resizeEvent refits on every resize). update_pixmap + additionally refits when the frame size changes - the real stream resolution can differ from the + placeholder, and only a view resize refit before. Right-click 'Scale to fit' still toggles back to + 1:1. + +Co-Authored-By: Claude Fable 5 + +- Wave-animate the busy overlay titles + ([`80063a5`](https://gitea.psi.ch/mx/AareDAQ/commit/80063a5df1c7c8b3c0c04aed6dfb5f160e477d47)) + +BEAMLINE BUSY and the robot warnings now hop per letter (clipped sine) so they read as an + in-progress signal, not a frozen label. Gated by a new BusyOverlayStyle.animate flag: 'In viewing + mode' stays static because it is a passive notice. No timer - the phase rides the wall clock and + repaints ride the ~20 fps camera frames, so the wave freezes with a stalled feed (which has its + own error surface). + +Co-Authored-By: Claude Fable 5 + +### Refactoring + +- Replace Qt overrides with native mechanisms, install app filters once + ([`c24da77`](https://gitea.psi.ch/mx/AareDAQ/commit/c24da7739b2f845094b875ad2943f0d736b66b3f)) + +Per-window installs of the two QApplication-level filters (cursor, wheel guard) stacked one stale + copy per MainWindow; now installed once per process, parented to the app. closeEvent overrides in + the baton dialogs replaced by finished.connect(timer.stop); keyPressEvent in VideoGraphicsView + replaced by WidgetShortcut QShortcuts; hover enter/leave overrides in PlayPauseButton replaced by + underMouse(); ValueLabel inherits ClickableLabel instead of duplicating its mousePressEvent. Dead + raster-timer branch and a PyQt5-era event-position fallback deleted; redundant try/except and + getattr guards dropped now that class-level defaults cover pre-init reads. + +Co-Authored-By: Claude Fable 5 + +### Testing + +- Pin the Sample-alignment motion-watch exception + ([`e9428ca`](https://gitea.psi.ch/mx/AareDAQ/commit/e9428ca64dece6f9a9c2be6fc5867c635b08449c)) + +Robot motion switches to the combined view; alignment beginning switches straight back while busy is + still set, and staying busy in alignment never re-triggers. Piggybacks on the init test's window - + extra MainWindow constructions feed the PySide teardown flake. + +Co-Authored-By: Claude Fable 5 + + ## v0.9.0 (2026-08-17) ### Bug Fixes diff --git a/pyproject.toml b/pyproject.toml index ead5fe74..43336a0b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "aaredaq" -version = "0.9.0" +version = "0.10.0" description = "AareDAQ (with GUI)" readme = "README.md" requires-python = ">=3.11"