Skip to content

Redesign presets UX: visible list, granular save picker, overlay apply#610

Merged
marcinz606 merged 4 commits into
mainfrom
feat/presets-ux
Jul 23, 2026
Merged

Redesign presets UX: visible list, granular save picker, overlay apply#610
marcinz606 merged 4 commits into
mainfrom
feat/presets-ux

Conversation

@marcinz606

@marcinz606 marcinz606 commented Jul 23, 2026

Copy link
Copy Markdown
Owner

Summary

  • Presets sidebar: visible preset list (double-click applies, tooltips show stored settings) with Apply / Save… / Edit / Delete buttons, replacing the combo + name-input rows
  • Save/Edit reuse GranularSettingsDialog (new ask_name + exclude_sections modes): pick exactly which edited settings a preset stores, name it inline; Edit reopens the picker on a preset's own values to rename or re-pick
  • Applying opens the same picker on the preset's contents (untick what you don't want) with scope — current frame / selected frames / whole roll — and mode: Apply on top (overlay onto each frame's edits) or Replace look (reset look sections to defaults first). Per-frame crop/rotation, metadata, export prefs, dust and masks never touched
  • New session.apply_preset_fields mirrors sync_selected_settings but sources from the preset and includes the active frame; other frames get repo writes + external history for undo
  • Service's hardcoded exclude_keys deleted — per-frame policy now enforced by settings-catalog membership + a Crop/Rotation filter in the save dialog; legacy preset JSONs still load (migrations included)
  • 0.42.0 changelog entry, VERSION bump

Test plan

  • make all green (lint, ty, full suite)
  • New: test_settings_catalog_presets.py (row atomicity, merge/migrations, summaries), test_granular_save_mode.py (save mode, scope/mode radios, gating), test_presets_sidebar.py (list, tooltip, edit-rename, apply_preset_fields current/selection/roll, dialog routing, sync guard)
  • test_retouch_logic.py preset-exclusion test moved to the new enforcement point (catalog)
  • Headless E2E driver: fresh profile, real ARW — save-dialog roundtrip stores only checked fields, apply overlays while unrelated edits survive, legacy true_black preset migrates on apply

Presets are now overlays: a preset stores only the settings picked in
the save dialog, applying sets those and leaves other edits alone.
Legacy full-snapshot preset files still apply unchanged through the
same flat-dict merge.

- sidebar combo replaced with a visible preset list (double-click
  applies, tooltip summarizes contents) + Apply/Save/Edit/Delete row
- GranularSettingsDialog gains ask_name + exclude_sections modes,
  reused for preset save and edit (rename + re-pick contents)
- service exclude_keys deleted; policy now lives in the settings
  catalog + a Crop/Rotation dialog filter
Apply on top overlays only the preset's non-default fields (legacy
snapshots stop clobbering unrelated edits); Replace edits resets the
look sections to defaults first, keeping per-frame crop/rotation,
metadata, export prefs, dust spots and masks.
Applying a preset opens the granular picker on the preset's own values
(untick to skip), targeting current frame, selection or whole visible
roll via session.apply_preset_fields — sync_selected_settings sibling
that sources from the preset and includes the active frame. Overlay/
replace-look radios subsume the previous QMessageBox; replace prepends
look-section reset rows sourced from the preset config's defaults.
@marcinz606
marcinz606 merged commit 1dcccbe into main Jul 23, 2026
1 check passed
@marcinz606
marcinz606 deleted the feat/presets-ux branch July 23, 2026 14:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant