chris.giteaandClaude Sonnet 5 d5b90e37e6 feat(gallery): bring the action-selection checkbox and date actions menu back
Reintroduces legacy.GalleryGridCell's grouped-selection UI on top of
JustifiedGalleryPane's own architecture: a hover-revealed circle
checkbox in each thumbnail's top-left corner (click to check —
Google Photos-style shrink-in-place with a rounded, inset thumbnail
and a grey background ring, all CSS-driven via :checked); a per-date
"select all" icon that slides in from the left of the date label on
header hover, reflecting whether every photo of that day is checked;
and a per-date kebab menu (regenerate thumbnails / set GPS / set
rating), visible once at least one of that day's photos is checked.

JustifiedGalleryPane.actionSelection moves from a bare Set<Long> to
a Map<Long, BooleanProperty> (the same shape legacy.ThumbnailGalleryPane
.checkedByFile always used) — needed so the checkbox icon and the
header's own all-checked glyph/menu visibility can react live instead
of being pushed to by hand. filesForDay/actionSelectedFilesForDay/
actionSelectedPropertiesForDay/toggleActionSelectedForDay round out
the per-date half of that state; setOnRegenerateThumbnails/
setOnSetGpsForFiles/setOnSetRatingForFiles are new hooks GalleryView
wires to the same MediaAnalysisService/MediaMetadataEditService calls
legacy's own menu used.

Driven by CSS's own :checked pseudo-class this time, not a plain-Java
node mutation the way navigation selection is — safe now that the
underlying AtlantaFX/Prism rendering bug that pushed navigation
selection away from CSS (GuiBootstrap's prism.dirtyopts=false) is
fixed application-wide, not just for that one node. The two
selections stay fully independent: the navigation frame is always a
card's topmost child, so it never ends up occluded by the checkbox
or the checked-shrink background ring underneath it.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012sfcVC7rYy5k8XiKCbh4Tr
2026-09-28 23:27:10 -04:00
2026-08-22 17:52:02 -04:00
2026-08-22 11:54:20 -04:00
2026-08-22 11:54:20 -04:00
2026-08-22 11:54:20 -04:00
2026-08-08 23:21:21 -04:00
2026-07-26 18:49:07 -04:00
2026-07-26 18:49:07 -04:00
S
Description
No description provided
54 MiB
Languages
Java 97.4%
CSS 1.5%
Python 0.9%
JavaScript 0.2%