StudyGraphHost
`IGraphHost` over a study's `ModelGraph`.
| Inherits | widgets::graph::IGraphHost |
In the namespace study::ui. Declared in src/libs/libstudy/study/ui/StudyGraphHost.hpp.
Detailed description
construct-project-space P13, §PSU-6. The model section of the study composer was a `QTreeWidget`. This is the half that lets `widgets::graph::GraphCanvas` draw the same graph as a graph.
Positions live HERE, and that is a decision
⚠ `ModelGraph` has no node positions and must not gain any. It is the logical model: components keyed by id, typed connections, bound variables, and — load-bearing — **its `canonicalForm()` feeds the run key**. A layout coordinate in that hash would make moving a box on screen produce a different run key, so an identical study would miss its own cache and re-run. The positions are therefore a property of this view.
The consequence is stated rather than hidden: **a layout is not persisted at L0.** Re-opening a study lays the graph out again from its topology. That is a deliberate L0 limit, not an oversight, and §PSU-6 does not ask for saved layouts.
Ids
`IGraphHost::Id` is an opaque integer. Component ids are strings, so this keeps a two-way map and never reuses a number. A stale id resolves to an empty string rather than to whichever component took that slot next.