0.8.0
CI / lint (push) Successful in 28s
Docs build and publish / docker (push) Successful in 8s
Build and Publish / release (push) Successful in 11s
CI / test (3.11) (push) Successful in 1m28s
CI / test-with-beamline-plugins (pxii_bec) (push) Successful in 1m29s
CI / test-with-beamline-plugins (pxi_bec) (push) Successful in 2m9s
CI / test (3.13) (push) Successful in 2m57s
CI / test (3.12) (push) Successful in 3m5s
CI / test-with-beamline-plugins (pxiii_bec) (push) Successful in 3m19s
CI / test-with-coverage (push) Successful in 3m37s
CI / coverage-analysis (push) Skipped
CI / lint (push) Successful in 28s
Docs build and publish / docker (push) Successful in 8s
Build and Publish / release (push) Successful in 11s
CI / test (3.11) (push) Successful in 1m28s
CI / test-with-beamline-plugins (pxii_bec) (push) Successful in 1m29s
CI / test-with-beamline-plugins (pxi_bec) (push) Successful in 2m9s
CI / test (3.13) (push) Successful in 2m57s
CI / test (3.12) (push) Successful in 3m5s
CI / test-with-beamline-plugins (pxiii_bec) (push) Successful in 3m19s
CI / test-with-coverage (push) Successful in 3m37s
CI / coverage-analysis (push) Skipped
Automatically generated by python-semantic-release
This commit is contained in:
+580
@@ -1,6 +1,586 @@
|
||||
# CHANGELOG
|
||||
|
||||
|
||||
## v0.8.0 (2026-08-11)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- Adapt main window to monitor size instead of overflowing
|
||||
([`f4f3c5e`](https://gitea.psi.ch/mx/AareDAQ/commit/f4f3c5ec3d7d734dc34cf6c2c72d053deea4a200))
|
||||
|
||||
The window's minimum was 1400x1207 - taller than a 1920x1200 console - so the status bar was pushed
|
||||
off-screen on every monitor. Three causes:
|
||||
|
||||
- the standard page's combined panel minimums: now wrapped in a QScrollArea so scrollbars appear
|
||||
instead of clamping the window - hidden portrait/compact stack pages inflating the QStackedWidget
|
||||
minimum (portrait alone demands 720px height): only the visible page contributes now - launching
|
||||
at the natural size hint (1577x1612): launch maximized so the window takes whatever the monitor
|
||||
offers
|
||||
|
||||
Minimum drops to 1400x555; verified on a 1920x1200 X display that the status bar is visible and
|
||||
panels scroll when space runs out.
|
||||
|
||||
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
||||
|
||||
- Dark-mode legibility for the status bar, sample tables, and surfaces
|
||||
([`7b30c95`](https://gitea.psi.ch/mx/AareDAQ/commit/7b30c959a20e62c58f190f5b06dddbdcafa5d956))
|
||||
|
||||
Status-bar flags get status_colors(theme) (Mocha variants on Sunset) via a new set_theme; sample
|
||||
tables stop hard-filling rows WHITE and pin dark ink on tinted rows via ForegroundRole; dewar tab
|
||||
and log panel get solid dark surfaces (transparent renders black on the non-composited X11
|
||||
container); developer help cards go square for the same reason.
|
||||
|
||||
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
||||
|
||||
- Declutter the Local Contact view
|
||||
([`c14d93f`](https://gitea.psi.ch/mx/AareDAQ/commit/c14d93ffcf0a9f8c3f3b98318ec772cd153789a8))
|
||||
|
||||
- drop the redundant Local Contact banner (the window title carries it) - remove the three
|
||||
parent=self config spinboxes that painted themselves over the top-left corner; parentless
|
||||
placeholders are replaced in _build_config_tab - remove all rounded corners (status card, value
|
||||
badges, group boxes, transfer-error frame, recovery panels) - tighten status rows to 2px spacing
|
||||
with a per-row minimum height so word-wrapped value labels can never compress rows until text
|
||||
clips (previously visible on the Hardware tab)
|
||||
|
||||
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
||||
|
||||
- Heal poisoned all-docks-hidden layout and restore layout before watch-only close
|
||||
([`3a7f1f5`](https://gitea.psi.ch/mx/AareDAQ/commit/3a7f1f584ad49d72b1fae6617ffa5d7aa9147d7c))
|
||||
|
||||
A window state saved during the watch-only fold restores as every dock hidden (the
|
||||
vanished-Sample-List-on-restart bug). Fall back to the default layout when a restore comes back
|
||||
all-hidden, and put the pre-watch layout back before saving state in closeEvent.
|
||||
|
||||
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
||||
|
||||
- Opaque faces for floating windows and theme-aware pop-out icons
|
||||
([`7f838f4`](https://gitea.psi.ch/mx/AareDAQ/commit/7f838f4b985c24a5003aa5d559e65acc4b27ce4a))
|
||||
|
||||
A transparent top-level renders black on the container's non-composited X11, so floating docks get a
|
||||
dynamic floating property feeding the QSS [floating="true"] opaque face, and PopoutWindow sets
|
||||
WA_StyledBackground. Pop-out titlebar glyphs are now painted in the palette's WindowText color and
|
||||
re-tint on PaletteChange, so they stay visible after a theme flip.
|
||||
|
||||
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
||||
|
||||
- Scroll Local Contact tabs so rows keep text height
|
||||
([`7a57d85`](https://gitea.psi.ch/mx/AareDAQ/commit/7a57d85282888bf967e6c6e6b756a610dfa4ebf0))
|
||||
|
||||
The dialog's explicit minimum size is smaller than some tabs' content; without a scroll area Qt
|
||||
squeezes rows below text height (clipped labels on the Hardware tab). Wrap every tab in a
|
||||
QScrollArea.
|
||||
|
||||
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
||||
|
||||
- Window and dock sizing behavior
|
||||
([`266f833`](https://gitea.psi.ch/mx/AareDAQ/commit/266f8337a9a1fcc163d2abf8a70a2b1038c454d2))
|
||||
|
||||
Three main-window chrome fixes: the un-maximized geometry is pre-set to half-screen centered so
|
||||
leaving maximized mode no longer restores an oversized size hint (the beamline state bar also
|
||||
stops imposing its ~2000px minimum width); closing a popped-out dock re-docks it instead of
|
||||
silently hiding the panel, and pop-outs open enlarged and clamped to the screen; state-bar buttons
|
||||
only update font/stylesheet/cursor when values change, since repolishing every DAQ tick dropped
|
||||
the hover cursor under a resting mouse.
|
||||
|
||||
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
||||
|
||||
### Code Style
|
||||
|
||||
- Add typography, tooltip, scrollbar, and card tokens to the palette
|
||||
([`e63ddb0`](https://gitea.psi.ch/mx/AareDAQ/commit/e63ddb090f68524b5193fe472176f46534dd1c7f))
|
||||
|
||||
The QSS gains a role-named font-size ladder (FONT_HERO..FONT_FINE), borderless QToolTip styling for
|
||||
both themes, soft rounded scrollbars without end arrows, and a card_style() helper with one shared
|
||||
CARD_RADIUS so card-shaped frames keep uniform geometry. Banner text flips to near-white with a
|
||||
shadow constant for the painted emboss. Recovery-card and console-log colors are marked TODO for a
|
||||
later retheme.
|
||||
|
||||
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
||||
|
||||
- Apply the typography ladder and card_style across the GUI
|
||||
([`913089b`](https://gitea.psi.ch/mx/AareDAQ/commit/913089b9b62793f74e003c7afa2fd35c12f25864))
|
||||
|
||||
Inline font-size literals become FONT_* tokens and hand-written card QSS collapses into card_style()
|
||||
(recovery cards and console-log notifications keep FLAT_CARD_RADIUS). TitleLabel paints its text
|
||||
by hand — QSS has no text-shadow — for an embossed banner title, elided when narrow, and gains a
|
||||
section_title() helper for small in-panel headings.
|
||||
|
||||
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
||||
|
||||
- Centralize the GUI color palette in styles.py
|
||||
([`271ca54`](https://gitea.psi.ch/mx/AareDAQ/commit/271ca54d9ad3a2001dddaa5c4f960c8929f13d3c))
|
||||
|
||||
Every color literal in the GUI moves into one palette module: ~200 grouped constants, a qcolor()
|
||||
helper (hue from the theme, alpha at the call site), and both QSS stylesheets become
|
||||
string.Templates fed by _palette() so a renamed constant fails loudly. Also retints: light
|
||||
background #d8e4fd -> #e2e7ee, banner indigo -> #a2b7e4, and the portrait dark theme adopts
|
||||
Catppuccin Macchiato.
|
||||
|
||||
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
||||
|
||||
- Clear the basedpyright gate for the new-code lines
|
||||
([`4ef2ad6`](https://gitea.psi.ch/mx/AareDAQ/commit/4ef2ad64d706c2fbc0631668f00bdd8266f5ace3))
|
||||
|
||||
Narrow QApplication.instance() before use, wrap the theme QSettings read in str(), hand
|
||||
QPropertyAnimation a real QByteArray, and declare the lazily-set watch-mode attributes on the
|
||||
class.
|
||||
|
||||
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
||||
|
||||
- Clear the basedpyright gate for the ported round
|
||||
([`84ccf27`](https://gitea.psi.ch/mx/AareDAQ/commit/84ccf275f9e2e954ee415ee905b7e3d90a43d518))
|
||||
|
||||
Declare MainWindow's lazily-set attributes, guard Optional layouts and the sample tab bar, wrap
|
||||
QSettings reads (typed object even with type=...), include _press_geom in the pop-out resize
|
||||
guard, and ignore the PySide6 stub gap on setGraphicsEffect(None).
|
||||
|
||||
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
||||
|
||||
- Clear the two portrait-mode diff-gate violations
|
||||
([`ed42738`](https://gitea.psi.ch/mx/AareDAQ/commit/ed42738693e6033ebeb5877c15bb842ed52e915e))
|
||||
|
||||
The sample-name labels are created in __init__ now (the build helper only styles and mounts them) so
|
||||
reportUninitializedInstanceVariable stops firing on the ported styling lines, and the queue
|
||||
placeholder uses the scoped Qt.AlignmentFlag.AlignCenter.
|
||||
|
||||
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
||||
|
||||
- Compact the control panels
|
||||
([`5f44be2`](https://gitea.psi.ch/mx/AareDAQ/commit/5f44be2a62a8d978d51ee29398aaa4845456147e))
|
||||
|
||||
Vertical-space pass: samcam merges exposure+gain onto one row, ABR and monochromator tighten their
|
||||
grids (energy now displayed in keV, DAQ API stays eV), beam-mark's clear button shares the
|
||||
readings row, the data collection pages move Run/Abort under the last configurable row and the tab
|
||||
area becomes QTabBar+QStackedWidget, the raster grid table gets a fixed height, and the automation
|
||||
panel drops its own title since the dock title bar already says it. Control panels start expanded
|
||||
via default_collapsed=False.
|
||||
|
||||
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
||||
|
||||
- Cool the sunset gradient base
|
||||
([`0b696a5`](https://gitea.psi.ch/mx/AareDAQ/commit/0b696a56f0f051dc1da01f9da86c5b0e6444a361))
|
||||
|
||||
The warm glow at the bottom of the dusk sky didn't fit — stay in the blue range.
|
||||
|
||||
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
||||
|
||||
- Declare HoverableButton state attribute for the pyright gate
|
||||
([`e818682`](https://gitea.psi.ch/mx/AareDAQ/commit/e818682abdcdc5e4c1db04c48180af7f4218ee3e))
|
||||
|
||||
The dynamic _beamline_state assignment was a pre-existing pattern, but the panel rewrite turned its
|
||||
line into a changed line, so the basedpyright diff gate now counts it. Declare the attribute
|
||||
instead.
|
||||
|
||||
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
||||
|
||||
- Extend the palette with selection, frame, slider, and sample-status tokens
|
||||
([`0bfa9db`](https://gitea.psi.ch/mx/AareDAQ/commit/0bfa9dbbeb5f8798fac8506c420d5ccdb33ed514))
|
||||
|
||||
SELECTION_BG/TEXT pin the app-wide selection blue to the banner color (was Qt's undeclared palette
|
||||
default); FRAME_L1/L2/L3 knobs put window, panel, and data-view borders on three tunable levels
|
||||
(panel etching off by default); QTabBar tabs and filter chips go borderless with a hover
|
||||
underline; QSlider matches the scrollbar look; scrollbar tracks turn square with a track-colored
|
||||
corner; SAMPLE_STATUS_* and SAMPLE_ROW_ALT_BG drive the sample-table status tints.
|
||||
|
||||
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
||||
|
||||
- Fix lint for the banner/adaptive changes
|
||||
([`ce0ed20`](https://gitea.psi.ch/mx/AareDAQ/commit/ce0ed20d5a1d4d2f33e662eb8be7bd58fbe2d368))
|
||||
|
||||
- ruff format and import ordering (main_window, data_collection_settings, beam_center_panel,
|
||||
beamline_state_panel) - rename unused unpacked variable in test_title_label - replace the
|
||||
mousePressEvent monkeypatch on the beamline state title with a proper eventFilter so basedpyright
|
||||
accepts the diff
|
||||
|
||||
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
||||
|
||||
- Move panel and model colors to the shared palette
|
||||
([`b7d6610`](https://gitea.psi.ch/mx/AareDAQ/commit/b7d6610261840ad45ad91b9663c37c52f5915d89))
|
||||
|
||||
Mechanical swap of hardcoded color literals for styles.py constants and qcolor() across panels,
|
||||
models, and scan_logic. portrait_mode.py drops its private palette block; beamline_controls and
|
||||
data_collection_settings gain object names so the new $border QSS rules can target them. The
|
||||
status-panel test asserts the palette hex instead of 'red'.
|
||||
|
||||
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
||||
|
||||
- Move widget colors to the shared palette
|
||||
([`590e500`](https://gitea.psi.ch/mx/AareDAQ/commit/590e500da5f7ed22b4d1ac515356dff13b06992b))
|
||||
|
||||
Same mechanical swap for the widgets and the tutorial manager: painter QColors go through qcolor(),
|
||||
inline QSS literals become palette constants (baton dialog, busy overlay, status bar, camera
|
||||
overlays, splash screen, numeric inputs).
|
||||
|
||||
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
||||
|
||||
- Narrow Optionals for basedpyright diff gate
|
||||
([`ee7a835`](https://gitea.psi.ch/mx/AareDAQ/commit/ee7a8356a6d46de5e97a010886eb6e7cb1a4f051))
|
||||
|
||||
QLayout.itemAt/QWidget.layout return Optionals; pyright cannot narrow across repeated method calls,
|
||||
so hold them in locals before use in tighten_column, _apply_collapsed and _set_visible.
|
||||
|
||||
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
||||
|
||||
- Narrow the log pop-out view for the pyright gate
|
||||
([`2adf8ff`](https://gitea.psi.ch/mx/AareDAQ/commit/2adf8ff6d5a57d98527f45b7450dd3b9565d65e4))
|
||||
|
||||
The Optional _popout_view is assert-narrowed once after opening; the unguarded accesses were the
|
||||
last three diff-gate violations.
|
||||
|
||||
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
||||
|
||||
- Narrow the manual-resize press state for the pyright gate
|
||||
([`763a258`](https://gitea.psi.ch/mx/AareDAQ/commit/763a25837c4c880bc9c50d707084237c756c0463))
|
||||
|
||||
The diff-vs-main basedpyright gate flags QRect(self._press_geom) because only _press_global was
|
||||
narrowed; both are set together in mousePressEvent, so the extra check is a no-op at runtime.
|
||||
|
||||
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
||||
|
||||
- Relabel theme entries, tuck prototype views into the View menu
|
||||
([`c179ea9`](https://gitea.psi.ch/mx/AareDAQ/commit/c179ea992c8d57d45423317b64b7283296ae485d))
|
||||
|
||||
Legacy/Portrait themes become Sunrise (default)/Sunset. Automation View and Portrait (now Playlist)
|
||||
Mode leave the menubar for the View menu with in-progress labels; Return to Main View stays
|
||||
top-level since it only shows inside the automation view.
|
||||
|
||||
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
||||
|
||||
- Ruff-format the ported round, scope splash Qt enums
|
||||
([`2638308`](https://gitea.psi.ch/mx/AareDAQ/commit/263830841208776fc9b65648313ca2c32775bd87))
|
||||
|
||||
The sandbox port was ruff-check clean but not ruff-format clean (CI formats before linting);
|
||||
splash_screen's alignment flags move to the scoped enum since the port put that line into the diff
|
||||
gate's scope.
|
||||
|
||||
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
||||
|
||||
- Small panel polish
|
||||
([`f7194ca`](https://gitea.psi.ch/mx/AareDAQ/commit/f7194ca3a4fa98a0ab3fa76a40a5955955e113fa))
|
||||
|
||||
Energy unit moves from spinbox suffix to the label (the suffix ate field width next to the new spin
|
||||
arrows); samcam exposure/gain get a 3:2 stretch so 3-decimal exposure isn't cut; the Exp. Config.
|
||||
tab bar gets a BANNER_TAB_GAP spacer under its banner.
|
||||
|
||||
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
||||
|
||||
- Swap the splash banner text to the white variant
|
||||
([`cd4b623`](https://gitea.psi.ch/mx/AareDAQ/commit/cd4b62323c509717641d858fc1d5cb8d9d364603))
|
||||
|
||||
Copied from aare_banner_w.svg; the black glyphs vanished on the dark splash panel, the white fills
|
||||
read on it.
|
||||
|
||||
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
||||
|
||||
- Visual and interaction polish
|
||||
([`833a6d1`](https://gitea.psi.ch/mx/AareDAQ/commit/833a6d136f1b862cd38932c0b24083fbe0ebd95a))
|
||||
|
||||
Windowed startup at 50%x70% instead of maximized; overlay legend now defaults off (it covers the
|
||||
camera image); square slider handles with grip-line PNG assets (the round handle clipped flat);
|
||||
warmer sunrise gradient bottom; abr/beam-mark layout tweaks; hover cues on the beamline-state
|
||||
entries; DPI/font-aware pop-out titlebar icons; the out-of-date Tutorial menu entries are hidden
|
||||
until content is redone.
|
||||
|
||||
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
||||
|
||||
### Documentation
|
||||
|
||||
- Note the spreadsheet log-spam TODO in daq_worker
|
||||
([`27c9b93`](https://gitea.psi.ch/mx/AareDAQ/commit/27c9b93d5ca87093db33fe3a3fb540421024e75a))
|
||||
|
||||
load_spreadsheet/load_reference_tools log a GET they never send every ~12.5s poll while base_url is
|
||||
None; fix later by demoting to debug or logging once on the None->set edge.
|
||||
|
||||
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
||||
|
||||
### Features
|
||||
|
||||
- Add spin-arrow and check-mark glyph assets
|
||||
([`900315d`](https://gitea.psi.ch/mx/AareDAQ/commit/900315d412db59d85a54cd3d5d3409b12b91909b))
|
||||
|
||||
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
||||
|
||||
- Camera help overlay, camera-error message, and session badge hover feedback
|
||||
([`3db8b11`](https://gitea.psi.ch/mx/AareDAQ/commit/3db8b11dd1039439a844bbe74ab784634fac1bcc))
|
||||
|
||||
The controls cheatsheet gets its own help badge/overlay instead of riding the detection legend; the
|
||||
camera-unavailable state now draws the actual error reason bottom-center (pushed from MainWindow
|
||||
to all three camera views); the session badge shows hover feedback and the vacant overlay reads
|
||||
'In viewing mode' with a grab-baton hint.
|
||||
|
||||
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
||||
|
||||
- Camera session badge and collapsible legend
|
||||
([`2054f07`](https://gitea.psi.ch/mx/AareDAQ/commit/2054f078b0d9ad3e982cbace0ccf34dc6c02b562))
|
||||
|
||||
The camera overlay gains a clickable session badge (opens the session menu at the click position)
|
||||
and a baton gate: watching stays free, operating clicks are blocked when the baton is elsewhere.
|
||||
The legend collapses to a ? badge until clicked - the full box covered too much image.
|
||||
|
||||
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
||||
|
||||
- Collapsible half-height panel banners with a universal gap
|
||||
([`a9137b3`](https://gitea.psi.ch/mx/AareDAQ/commit/a9137b3221fff7364d0a3c98d9d6a4199eeb95b9))
|
||||
|
||||
TitleLabel gains an optional collapsible mode: whole-banner click target, bare +/- glyph (no pill
|
||||
background), per-title collapsed state persisted in QSettings, and an expand() helper. Banners are
|
||||
halved to 25px with plain text + QSS font (H3 margins would clip vertically).
|
||||
|
||||
- convert Zoom, Light, Omega, Smargon, Sample camera, Monochromator, ABR meas. pos., Beam mark, Beam
|
||||
center, Beam size, Dataset path and Loop centering to collapsible banners - new collapsible Exp.
|
||||
Config. section wrapping the scan tabs - move Manual sample from a bottom dock into the left
|
||||
column between Dataset path and Exp. Config.; Ctrl+M now expands it instead of raising the dock -
|
||||
Beamline state banner restyled to match (25px, plain font, bare glyph, whole banner clickable) -
|
||||
universal 11px banner gap via tighten_column() shared by both panel columns and the left column
|
||||
stack; ABR banner spans all grid columns and file path / manual sample drop side margins so widths
|
||||
align - abort button sits under the tabs instead of pinned to the bottom - unit tests for the
|
||||
collapse behavior
|
||||
|
||||
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
||||
|
||||
- Cross-fade and palette flip on theme switch
|
||||
([`ed8b2bd`](https://gitea.psi.ch/mx/AareDAQ/commit/ed8b2bd16539d22ad2c0b4b5b37c5dc1ac20044d))
|
||||
|
||||
Freeze the old look in a click-through screenshot overlay and fade it out over the restyled window —
|
||||
QSS has no transitions and animating the palette would re-polish every widget per frame. Sunset
|
||||
also flips the app-palette text roles so native primitives QSS can't recolor (spin and combo arrow
|
||||
glyphs) follow the theme.
|
||||
|
||||
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
||||
|
||||
- Dusk-gradient theme overhaul with transparent-widget scheme
|
||||
([`1946430`](https://gitea.psi.ch/mx/AareDAQ/commit/1946430f0d69c46a41191e9c54e189dd0fa49dd1))
|
||||
|
||||
Both stylesheets move to transparent children over a gradient painted only by top-level windows;
|
||||
inputs, buttons, headers, and menus get opaque faces back. Sunset drops Catppuccin Macchiato for
|
||||
the Daemmerung dusk palette. Spin/combo arrows and check indicators become theme-tinted PNGs.
|
||||
Widgets stop carrying inline input/text stylesheets so the theme QSS can win (empty stylesheet =
|
||||
theme reset).
|
||||
|
||||
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
||||
|
||||
- Float alert banners over content as anchored toasts
|
||||
([`1f2a538`](https://gitea.psi.ch/mx/AareDAQ/commit/1f2a538959b7f654dfde6d1d8ac9b2a177a8cab0))
|
||||
|
||||
Banners in the root layout shifted the whole UI on every message; now they float over the content
|
||||
root (repositioned on resize) and the baton toast anchors as a compact pill under the camera view,
|
||||
auto-clearing in 4s instead of 10s.
|
||||
|
||||
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
||||
|
||||
- Group beam mark/center/size under one Beam Config banner
|
||||
([`00e5d11`](https://gitea.psi.ch/mx/AareDAQ/commit/00e5d116a61c16e91bbf456c05e90ca8341f18d9))
|
||||
|
||||
The three small beam panels shared a column with three collapsible banners; BeamConfigPanel puts
|
||||
them under a single collapsible 'Beam Config.' TitleLabel with section_title() sub-headings.
|
||||
beam_mark/beam_center/beam_size stay as aliases on BeamlineControls so main_window signal wiring
|
||||
is untouched.
|
||||
|
||||
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
||||
|
||||
- Hide operation panels in watch-only mode
|
||||
([`d127863`](https://gitea.psi.ch/mx/AareDAQ/commit/d127863b1f8fc6907828aef9b8aca26a64bfe03d))
|
||||
|
||||
Without the baton the GUI now shows only the camera stream and status bar; every operating surface
|
||||
(panels, docks, pop-out mirrors) is hidden outright. Regaining the baton restores dock layout via
|
||||
saveState/ restoreState — per-dock visibility snapshots lose docks tabbed behind others — so
|
||||
LogDock gains the objectName restoreState requires.
|
||||
|
||||
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
||||
|
||||
- Horizontal beamline state bar above the status bar
|
||||
([`9ef4032`](https://gitea.psi.ch/mx/AareDAQ/commit/9ef4032d06274fb1448907f21b53b53b2ac34400))
|
||||
|
||||
Replaces the vertical station map that consumed left-column space with a slim always-visible strip
|
||||
in the bottom toolbar area, directly above the status bar:
|
||||
|
||||
- states in physical beamline order, 18px text, one line when the bar is wide enough and wrapped at
|
||||
the last space otherwise - availability coloring from the route graph plus the status-bar shortcut
|
||||
transitions: bold blue = active (red for Maintenance), orange = reachable in one step, grey = not
|
||||
reachable; no backgrounds or rounded corners - transitions only via right-click 'Go to <state>';
|
||||
left click shows a reminder tip for available states and the reachability explanation for grey
|
||||
ones; hovering a grey state for 3 s shows the same explanation - whole entry is the hover/click
|
||||
region; tips anchor to the entry and disappear when the mouse leaves - always visible: no
|
||||
View-menu toggle, not hidden by portrait or compact modes
|
||||
|
||||
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
||||
|
||||
- Let panels opt out of starting collapsed
|
||||
([`460f703`](https://gitea.psi.ch/mx/AareDAQ/commit/460f7034c37033f5bca7729471a4eb5aa8106aee))
|
||||
|
||||
TitleLabel gains default_collapsed; the small motor/light panels start open (their per-title
|
||||
persisted choice still wins).
|
||||
|
||||
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
||||
|
||||
- Merge Automation progress and Console log into one Information dock
|
||||
([`e457236`](https://gitea.psi.ch/mx/AareDAQ/commit/e457236777b80514bc5f24085abd1ee6a0a23df8))
|
||||
|
||||
The two tabified bottom docks left their switcher tabs stranded at the window bottom; one
|
||||
Information dock with proper tabs mirrors the Sample List dock's layout. LogDock becomes the
|
||||
LogPanel widget with mirror views for the pop-out and a reveal_requested signal so the owner
|
||||
controls visibility (Ctrl+Shift+L, notifications).
|
||||
|
||||
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
||||
|
||||
- Merge Sample List, Reference Tools, and the queue into one dock
|
||||
([`1f90098`](https://gitea.psi.ch/mx/AareDAQ/commit/1f9009807d555c96b1be214c9a4d0791deef32e8))
|
||||
|
||||
Reference Tools was a separate staff-only dock tabified behind Sample List and kept vanishing (saved
|
||||
dock state, raise order); the automation job list was a third dock for what is conceptually the
|
||||
same table. One tabbed dock now holds Dewar samples + Auxiliary puck (concept from aaregui2's
|
||||
QueuePanel): the dewar table doubles as the queue view with the queue buttons and an Unmount
|
||||
button in a row beneath it, SampleQueuePanel lives on hidden as the queue engine, and queue/flag
|
||||
membership is edited via right-click or row drags onto the Queued and Flagged chips. Column 0 is a
|
||||
frozen #+status cell (mounted > queued > flagged > measured, tints context-dependent per chip
|
||||
filter); non-staff see Auxiliary greyed out with a Staff-only popup instead of hidden.
|
||||
Ctrl+L/Ctrl+R raise the Dewar/Auxiliary tab. The Sample List and log pop-outs are fully
|
||||
operational second views on shared models. Riders: MainWindow installs WheelValueGuard, wires the
|
||||
camera session badge, and moves samcam/monochromator/ABR/beam-config into the left column's
|
||||
Beamline group (BeamlineControls keeps only zoom/light/omega/smargon).
|
||||
|
||||
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
||||
|
||||
- Pointing-hand cursor on all interactive widgets
|
||||
([`257edc2`](https://gitea.psi.ch/mx/AareDAQ/commit/257edc25f87a88d22a34b2410af47bfdb491eeea))
|
||||
|
||||
QSS cannot set cursors and per-widget setCursor calls get forgotten as widgets are added, so an
|
||||
app-level filter catches every Polish event on buttons, combos, and sliders — dialogs and pop-outs
|
||||
included.
|
||||
|
||||
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
||||
|
||||
- Pop-out windows instead of floating docks
|
||||
([`6e1305c`](https://gitea.psi.ch/mx/AareDAQ/commit/6e1305cb927a11cc04ea86b88366961ec6aa27fd))
|
||||
|
||||
Floating a dock rips it from the row and reshuffles the rest, so PopoutWindow opens an ADDITIONAL
|
||||
frameless top-level window instead: 12px outer resize halo (border painted OUTER_GRIP inside the
|
||||
real edge so an outside-looking grab still works), hand-painted borderless titlebar glyphs, close
|
||||
hides and keeps geometry. DockTitleBar puts the popout button next to the close box. The console
|
||||
log adopts it: dock floating disabled, the pop-out view is a second QPlainTextEdit fed by the same
|
||||
emitter (a shared QTextDocument would make two views fight over one layout), clear() clears both.
|
||||
|
||||
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
||||
|
||||
- Reference-tools position column and state-driven default sample tab
|
||||
([`b088170`](https://gitea.psi.ch/mx/AareDAQ/commit/b08817024dd6c03d8b7f67abfb7a9cd982d0a76e))
|
||||
|
||||
The reference table gets a display-only '#' column (like the Dewar list) with sort indices shifted
|
||||
around it; the sample dock switches to the Auxiliary puck tab on entering alignment/maintenance
|
||||
states and back to Dewar elsewhere, only on state transitions so a manual choice sticks.
|
||||
|
||||
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
||||
|
||||
- Rename themes to sunrise/sunset, add bluebird theme with Catppuccin-Latte light palette
|
||||
([`c13ea11`](https://gitea.psi.ch/mx/AareDAQ/commit/c13ea11430cf595395fc8de83988d73de088b930))
|
||||
|
||||
Sunrise/sunset replace the original/portrait tokens (QSettings values migrate on restore); bluebird
|
||||
is sunrise with a flat sky. The light palette is repainted with Catppuccin Latte across alerts,
|
||||
chips, cards, log, splash, inputs, and status flags, plus button/input height caps and hover rules
|
||||
in the QSS.
|
||||
|
||||
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
||||
|
||||
- Rest-to-reveal hint for dock separators
|
||||
([`f9a6c7b`](https://gitea.psi.ch/mx/AareDAQ/commit/f9a6c7bc319bad40c015ac692c6ba7857274c712))
|
||||
|
||||
Separators stay invisible until the mouse rests on one for ~1s (or a drag starts); the QSS
|
||||
::separator:hover rule does the hit-testing and a dynamic separatorHint property gates it, so
|
||||
event() never needs to know where separators are.
|
||||
|
||||
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
||||
|
||||
- Start all collapsible panels collapsed by default
|
||||
([`f84bee6`](https://gitea.psi.ch/mx/AareDAQ/commit/f84bee66ee726598dd38b75f5a8978a29bcc7806))
|
||||
|
||||
A fresh GUI shows only the banners; the Beamline state panel keeps its own expanded default. A
|
||||
user's saved per-title states still override.
|
||||
|
||||
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
||||
|
||||
- Swap the splash banner to an SVG
|
||||
([`efcdc0c`](https://gitea.psi.ch/mx/AareDAQ/commit/efcdc0c1912c0024719105411f1bb0a7c09225dd))
|
||||
|
||||
The PNG banner is replaced by an SVG so the splash artwork scales; the old aare_banner.png is
|
||||
removed and gui.py loads the .svg path (the stale path yielded a null splash pixmap).
|
||||
|
||||
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
||||
|
||||
- Theme-aware beamline state panel
|
||||
([`7801025`](https://gitea.psi.ch/mx/AareDAQ/commit/7801025802d66291d1bc46177dd1a820ffb6dbd2))
|
||||
|
||||
The panel paints availability/message colors in code per DAQ tick, so QSS can't retint it —
|
||||
state_colors(theme) hands it a per-theme dict (Catppuccin Mocha inks for Sunset) and _apply_theme
|
||||
pushes theme flips.
|
||||
|
||||
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
||||
|
||||
- Wheel only adjusts values while the right button is held
|
||||
([`f87b895`](https://gitea.psi.ch/mx/AareDAQ/commit/f87b8952c8cf9c01f863e5f9a20c96b53e99ad9c))
|
||||
|
||||
WheelValueGuard (app-level event filter, installed by MainWindow) makes a bare wheel over spin
|
||||
boxes, sliders, dials, and combos scroll the enclosing scroll area instead of nudging the value -
|
||||
motor protection. NoWheelScrollArea stops swallowing wheel events since values are now guarded at
|
||||
the widget.
|
||||
|
||||
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
||||
|
||||
### Refactoring
|
||||
|
||||
- Shared busy-badge renderer for camera and axis video views
|
||||
([`e77dfb4`](https://gitea.psi.ch/mx/AareDAQ/commit/e77dfb4716f7adcb6673593c1d5075824ae9aeb1))
|
||||
|
||||
draw_busy_badge in busy_overlay renders the title+subtext pill once; the sample camera and axis
|
||||
video overlays both delegate to it instead of keeping diverging copies. The axis panel's dot+label
|
||||
status pill and its per-theme QSS go away with it.
|
||||
|
||||
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
||||
|
||||
### Testing
|
||||
|
||||
- Cover the beamline state bar
|
||||
([`3175e43`](https://gitea.psi.ch/mx/AareDAQ/commit/3175e437a4ebf4c749d4f6c841d67f35a506fdeb))
|
||||
|
||||
Availability sets (routes + menu shortcuts, Moving/unknown), signal gating, palette and cursors per
|
||||
availability, red/blue active states, adaptive label wrapping, left-click hint paths, hover-hint
|
||||
timer lifecycle, and pending-target clearing. Lifts the PR diff coverage back over the 80 percent
|
||||
gate (measured 88 percent locally).
|
||||
|
||||
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
||||
|
||||
- Cover the camera overlays, theme migration, layout heal, and splash
|
||||
([`7b4764e`](https://gitea.psi.ch/mx/AareDAQ/commit/7b4764e7caa336e2b26165cc3cbd43f6afed86f7))
|
||||
|
||||
Diff coverage vs main was 77%, under the 80% CI gate; the new camera help/error/badge code and the
|
||||
theme+layout main_window paths were the uncovered bulk. Locally: 82%.
|
||||
|
||||
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
||||
|
||||
- Cover the sample-status logic, wheel guard, pop-outs, and log mirror
|
||||
([`69b6813`](https://gitea.psi.ch/mx/AareDAQ/commit/69b68130259827ba2166360474959d45d0ec5310))
|
||||
|
||||
New tests for what the port added: status tint priority and context-dependent chip filters on the
|
||||
dewar/queue model, the right-button wheel guard (motor protection), PopoutWindow edge maths,
|
||||
manual-resize fallback, close-hides behavior and DockTitleBar, the chip drag-drop relabeling, and
|
||||
the console-log pop-out mirror. The widgets' __main__ self-checks are superseded by these and
|
||||
removed. Brings PR diff coverage from 70% to 81% (gate: 80%).
|
||||
|
||||
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
||||
|
||||
- Inline smoke check for the wheel guard
|
||||
([`546fb5d`](https://gitea.psi.ch/mx/AareDAQ/commit/546fb5d3f041f71410093604e8c712013a0deea5))
|
||||
|
||||
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
||||
|
||||
- Track the sample-table column shift, sort imports
|
||||
([`0b80c75`](https://gitea.psi.ch/mx/AareDAQ/commit/0b80c75c63d58d03666c354744c4074e8d1952c6))
|
||||
|
||||
The frozen #+status column shifted data columns +1, so the User-column model tests move from index 5
|
||||
to 6; ruff import-sort fixes for main_window and log_panel ride along.
|
||||
|
||||
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
||||
|
||||
|
||||
## v0.7.3 (2026-08-11)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
[project]
|
||||
name = "aaredaq"
|
||||
version = "0.7.3"
|
||||
version = "0.8.0"
|
||||
description = "AareDAQ (with GUI)"
|
||||
readme = "README.md"
|
||||
requires-python = ">=3.11"
|
||||
|
||||
Reference in New Issue
Block a user