d713257fb5435e70f4ea55670bb4400275e3d82e
The two selection categories used to arbitrate ownership of the panel by poking each other's widgets: buildFieldSelection() called clearContent() and buildEmpty(), buildEmpty() hid the four entity widgets, and hideAllWidgets() hid the scrap label. Splitting the halves apart without naming an arbiter would only have spread that across a class boundary. SelectedBuildingPanel is now the sole arbiter. It still receives all three selection events, forwards the two field ones to the embedded FieldSelectionPanel, and drops its own selection and content as soon as the field panel reports a selection (yieldToFieldSelection), mirroring what onSelectionChanged() already did in the other direction. The field panel decides only what to render and whether it is visible at all. Dropping the field branch of refreshSelectionDisplay() is behaviour preserving: whenever the field category owns the panel, m_singleBuildingId is null, so the building refresh returns immediately anyway. clearContent() and buildEmpty() became identical once the cross-half hiding was gone, so only buildEmpty() remains. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YHcUerKAZKWNvSKJxYKbnG
Description
No description provided
Languages
C++
96%
CMake
2.2%
Python
1.2%
C
0.6%