Granular per-setting copy/paste and apply-to-roll#604
Merged
Conversation
Replace the coarse section-checkbox Apply dialog and all-or-nothing paste with a per-setting picker built on the shortcut-editor's collapsible sections. It lists only the settings that differ from default on the source frame, grouped by area with values shown; the user ticks what to apply. - settings_catalog.py: declarative catalog of copyable settings, edited detection (edited_sections) and a per-field merge (apply_selected_fields). - GranularSettingsDialog: shared by paste (Ctrl+V now opens the picker) and "Apply settings..."; roll-baseline bounds kept as the one special path. - session: sync_selected_settings takes rows + bounds flags; apply_pasted_fields replaces instant paste. Removed build_synced_config and the aspect constants. Per-frame data (dust spots, heal strokes, crop bounds) is never overwritten. Tests ported to the new API.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Copy/paste and Apply settings… (sync to selection / whole roll) are now per-setting instead of a handful of broad section checkboxes.
A new picker — built on the keyboard-shortcut editor's collapsible sections — lists only the settings that differ from default on the source frame, grouped by area (Tone, Colour, Lab, Toning, Finish, Crop, Rotation, Process, Retouch, Metadata, Export) with each value shown. Tick what you want, hit Apply. Paste now pops the same picker (Ctrl+V) rather than replacing the whole config at once.
How
negpy/desktop/settings_catalog.py(new) — declarativeCATALOGof copyableSettingRows (labels + fields),edited_sections()for non-default detection, andapply_selected_fields()for the per-field merge. Per-channel R/G/B trims collapse into one grouped row; crosstalk strength/profile/matrix copy atomically.granular_settings_dialog.py(new) —GranularSettingsDialogreusingCollapsibleSection; shared by paste and apply. Scope radios (Selected / Whole roll) and the roll-baseline bounds toggles show only in apply mode.session.py—sync_selected_settings(rows, bounds_flags, scope)andapply_pasted_fields(rows). Removedbuild_synced_config+ aspect constants. DeletedSyncSettingsDialog.open_paste_dialog.Per-frame data — dust spots, heal strokes, crop bounds — is never in the catalog, so it's never overwritten.
closes #601
Tests
Ported
test_sync_settings.py(catalog integrity,edited_sections,apply_selected_fields, grouped trims, crosstalk, target-preservation) and the session/dialog tests to the new API. Full suite: 2403 passed, lint + type green.