Skip to content

Designer: deal the section settings out into four tabs - #21

Merged
ZombieHDGaming merged 1 commit into
masterfrom
claude/credits-designer-tabs-2d7eb6
Sep 2, 2026
Merged

Designer: deal the section settings out into four tabs#21
ZombieHDGaming merged 1 commit into
masterfrom
claude/credits-designer-tabs-2d7eb6

Conversation

@ZombieHDGaming

Copy link
Copy Markdown
Contributor

What this changes

The designer's middle pane was one column of fifteen groups — the content rows, the type's own settings, the placement rows, up to five StyleEditors, eight background slots, and a table — all stacked in a pane a third of a window wide. Folding the groups away made the column shorter without making it any less of a column: somebody working on the words of a list still scrolled past the geometry and the styles to reach the entry table.

The settings are now dealt out into four tabs (EditorTab):

TabHolds
ContentContent Properties (text, subtitle, logo, playback), the entry table, the divider's three piece stacks
Layoutthe type's own settings (%1 Settings) and Placement on the Canvas
Stylethe primary, secondary, bridge and two row-subtitle style editors
Backgroundthe eight background slot groups

Nothing about the document changes — a tab is where a control is drawn and nothing else. Section types, persistence and the visibility rules are untouched.

The header stays above the tabs

The type picker with its switches and help line, the label field, the visible box and the Show every setting switch sit above the tab strip. They aren't settings of any one job: the type decides what every tab holds, the label is how a section is found again in the list, and the advanced switch reaches rows on three of the four pages. Leaving the tab you're working in to flip one of them would lose your place to change something that governs all of them.

Scrolling moved inside

Each tab page has its own QScrollArea, so the header and the tab strip can't be scrolled off the top and each page keeps the place it was left at. DesignerDialog therefore adds the editor straight to the splitter instead of wrapping it in a scroll area of its own (editorScroll is gone; editor takes its place in the two spots that used it).

Empty tabs go away

A Spacer has no words, no styles and no panels, so three of the four would be empty panes inviting the reader to look for settings that aren't there. refreshTabVisibility asks the groups on each page rather than re-deriving from the section type, so it can't disagree with the visibility pass that has just run; it uses isHidden rather than isVisible because the page of an unselected tab is itself hidden. The chosen tab is remembered rather than forced — a tab going away under the reader takes the selection with it, and desiredTab puts them back on it once the next section has one again, with restoringTab keeping that shuffle from being read as a choice.

Other changes

  • Designer.Group.Placement renamed from "Layout Properties" to "Placement on the Canvas" — "Layout ▸ Layout Properties" read as a stutter. Say the word and I'll put it back.
  • Four new locale keys: Designer.Tab.{Content,Layout,Style,Background}.
  • ARCHITECTURE.md's designer section rewritten to describe the tabs, the pinned header, the per-page scrolling and the empty-tab rule.

Verification

The plugin's own UI isn't covered by tests/ (the harness compiles model/, render/ and util/ without Qt Widgets), so this was checked two ways:

  • Existing suite: cmake -S . -B build -DENABLE_TESTS=ON && ctest — passes, 0 failures.
  • Offscreen harness built for this change (throwaway, not committed): links SectionEditor and its dependencies against a stubbed locale table, drives a section of each type through it and reads the tab bar back.
Title -> Content*, Layout, Style, Background
TextList -> Content*, Layout, Style, Background
Bridged -> Content*, Layout, Style, Background
SectionDivider -> Content*, Layout, Style, Background
Spacer -> Layout*, Background
StickyBlock -> Layout*, Background
picked Style on Title -> Content, Layout, Style*, Background
then Spacer -> Layout, Background*
then Title again -> Content, Layout, Style*, Background
round trip: label=Cast paddingTop=42 size=77 entries=2 type=same

Rendered grabs confirm the pinned header sits above the strip, each page's first group starts at the top of its own scroll area, and a list's Content tab is now the entry table filling the pane rather than a table below fifteen groups.

clang-format 19.1.1 reports no diffs on the four touched source files.

🤖 Generated with Claude Code

https://claude.ai/code/session_019UvPd5wu54qwoNAHqN9U8o


Generated by Claude Code

The editor pane was one column of fifteen groups -- what a section says, how
its type is put together, where it sits, five text styles, eight panels and a
table -- in a pane a third of a window wide. Folding the groups away made the
column shorter without making it any less of a column: somebody working on the
words of a list still scrolled past the geometry and the styles to reach the
entry table.
So the settings are dealt out into Content, Layout, Style and Background, which
are the jobs somebody sits down to do rather than an arbitrary quartering: fill
the section in, place it, ink it, put something behind it. A divider's piece
stacks go where a list's entries do -- they are what a divider is made of, and
a divider has no words to type. Nothing about the document changes; a tab is
where a control is drawn and nothing else.
The type picker, the label, the visible box and the advanced switch stay above
the tab strip. They are not settings of any one job -- the type decides what
every tab holds, and the advanced switch reaches rows on three of the four
pages -- so leaving the tab you are working in to flip one of them would lose
your place to change something that governs all of them.
Each tab scrolls on its own, which is why the designer now adds the editor
straight to the splitter instead of wrapping it in a QScrollArea: the scrolling
moved inside, one area per page, so the header and the strip cannot be scrolled
off the top and each page keeps the place it was left at.
A tab with nothing on it goes away, since a Spacer has no words, no styles and
no panels and three empty panes invite the reader to look for settings that are
not there. That is asked of the groups on each page rather than of the section
type, so it cannot disagree with the visibility pass that has just run. The tab
the reader chose is remembered rather than forced: one going away under them
takes the selection with it, and they are put back on it once the next section
has one again.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019UvPd5wu54qwoNAHqN9U8o
@ZombieHDGaming
ZombieHDGaming merged commit c0dd4c2 into masterSep 2, 2026
6 checks passed
@ZombieHDGaming
ZombieHDGaming deleted the claude/credits-designer-tabs-2d7eb6 branch September 2, 2026 13:04
Sign up for freeto 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.

2 participants

@ZombieHDGaming@claude