feat(app): move tasks into a canvas dock and make FFT a real step - #24
Merged
Merged
Conversation
Processing was pinned to the Secondary Side Bar beside the Object inspector, and each canvas task drew its own floating card, so opening a second task threw away the first one's configuration and a tall inspector could push the Processing group outside the clip rect entirely. FFT was a fixed anchor in the recipe rather than a step: it could not be removed or moved past, the menu offered moves it silently declined, and a raw acquisition had no way to show its FID. Processing now lives in a task dock at the upper right of the canvas. Processing, Regions, Curve Fit, and Statistics share that corner and grow tabs once two are open, keeping every page's settings while showing one page at a time; closing a page is what discards it, and choosing a tab makes that page's dataset active. The Secondary Side Bar holds the inspector and selection analysis in a single scroll viewport, so no section can be made unreachable by the length of another, and Processing is no longer duplicated there. The inspector gains section links, and a multi-selection reports its object and dataset counts while preserving mixed values. FFT becomes a typed Time -> Frequency step that can be added, deleted, enabled, disabled, or reordered. Removing it puts the canvas back on the FID with an acquisition-time axis; frequency steps left without frequency input stay in the recipe, disabled with a reason, so restoring FFT restores their settings instead of recreating them. Time-domain steps execute in displayed order on both sides of that choice, so multiple zero fills compose and an apodization moved after zero filling sees the padded length. Moves that would cross a domain boundary are refused in the commit path and explained on the menu entry the user reached for, so no other entry point can bypass the rule. Imported frequency-domain data is never given a fictitious FID or FFT. Task, analysis, and export surfaces read the pipeline's output domain rather than assuming frequency, so peaks, line fitting, integrals, and multiplets are unavailable while the output is an FID and become usable again when FFT returns.
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 subscribe to this conversation on GitHub.
Already have an account?
Sign in.
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.
Why
Processing was pinned to the Secondary Side Bar beside the Object inspector, and
each canvas task drew its own floating card. Opening a second task discarded the
first one's configuration, and a tall inspector could push the Processing group
past the clip rect — the most basic manual processing became unreachable exactly
when the selection was richest.
FFT was an anchor rather than a step: it could not be removed or moved past, the
row menu offered moves the commit path silently declined (indistinguishable from
a broken menu), and a raw acquisition had no way to show its FID.
What changed
Task dock. Processing opens as a card at the upper right of the canvas, the
corner it now shares with Regions, Curve Fit, and Statistics. Once two are open,
tabs appear — Process, Regions, Fit, Stats — and one page shows
at a time. Switching tabs keeps every page's settings; only closing a page with
its ✕ discards them, and choosing a tab makes that page's dataset active. The
card header names the dataset, its source (Raw FID, 2D acquisition,
Imported spectrum), whether the recipe is still the default, and whether the
pipeline ends in time- or frequency-domain output.
Secondary Side Bar. The inspector and selection analysis now draw inside a
single scroll viewport, so no section can be made unreachable by the length of
another. Processing is no longer duplicated here. The inspector gains a row of
section buttons that scroll without reordering, and its heading reports object
and dataset counts for a multi-selection while rows that disagree read mixed
rather than presenting one object's value as the answer.
FFT as an ordinary step. FFT becomes a Time to Frequency step that can be
added, deleted, disabled, or moved like any other; a pipeline holds at most one,
so Duplicate is unavailable on it. Remove or disable it on a raw acquisition
and the canvas switches to the FID plotted against acquisition time. The
frequency-domain steps stay in the recipe marked Disabled: requires Frequency
input, so adding FFT back restores their settings rather than making the user
re-enter them. Imported frequency-domain data is never given a fictitious FID.
Ordered time-domain execution. Time-domain steps run in the order shown, on
either side of that choice: two zero fills compose, and an apodization moved
below zero filling sees the padded length.
Boundary refusals are stated, not silent.
move_blockstates the rule once.The menu disables the entry and attaches the reason to the entry the user reached
for, and the commit path refuses the same move and reports it — so a keyboard or
future drag gesture cannot bypass the boundary. The inert grip icon is gone until
a gesture exists behind it.
Domain-aware downstream surfaces. Task, analysis, and export paths read the
pipeline's output domain instead of assuming frequency. Peak detection and the
peak list, line fitting, integrals, and multiplets are disabled with a reason
while the output is an FID; existing peaks and integrals are kept, not
discarded, and return with the FFT step.
Docs
guides/processing(new Where processing lives and The FFT step sections),reference/ui-overview,reference/command-palette,getting-started/*, andguides/templates|automationupdated, with the Simplified Chinese pages keptaligned.
Verification
cargo pr-check— passes (fmt, file size, dependency policy, default-frontendcheck, Clippy, tests in both backend configurations).
npm run buildindocs/— passes.