pub struct SystemChart {
pub title: String,
pub state: SysChartModel,
}Expand description
The system-map chart Facet: a tab title plus the
complete observable SysChartModel. The FC-9 pure view reads
it and the FC-2 update is the sole path that mutates it.
Fields§
§title: StringTab/panel title.
state: SysChartModelAll observable state (FC-3).
Implementations§
Source§impl SystemChart
impl SystemChart
Sourcepub const NODE_R: f32 = NODE_R
pub const NODE_R: f32 = NODE_R
The node radius (px) the free-position layout pads the canvas by, exposed so
the matrix can assert nodes land inside rect by exactly this inset.
pub fn new( title: impl Into<String>, nodes: Vec<SysNode>, edges: Vec<SysEdge>, ) -> Self
pub fn with_canvas_height(self, h: f32) -> Self
Sourcepub fn from_layers(
title: impl Into<String>,
layers: Vec<Vec<SysNode>>,
edges: Vec<SysEdge>,
) -> Self
pub fn from_layers( title: impl Into<String>, layers: Vec<Vec<SysNode>>, edges: Vec<SysEdge>, ) -> Self
Build a layered system map — the architecture/topology “grouped by
layer” shape. layers are top-to-bottom bands (e.g. ingress → services →
storage); each band’s nodes are spread evenly across the width and pinned to
that band’s vertical position, so the map reads as a constellation diagram
organised by layer. Node pos fields are overwritten by the layout; edges
(the dependencies) are added as given. This is SystemChart::new with the
free positions computed from the layering instead of supplied.
Sourcepub fn demo() -> Self
pub fn demo() -> Self
A self-contained demo constellation map — a small nordisk architecture in
three layers (ingress gateway → the korp/nornir/holger services →
the skade/iceberg storage), with dependency edges and per-service badges.
The fixture the syschart_panel demo (and the Pages site) mounts.
Sourcepub fn select(&mut self, id: &str)
pub fn select(&mut self, id: &str)
Select a node by id (headless-test + host entry point). Selecting the
already-selected node deselects it. Unknown id is a no-op. Thin wrapper
over update(Msg::Select) — the single mutation path.
Sourcepub fn clear_selection(&mut self)
pub fn clear_selection(&mut self)
Clear the selection (Msg::ClearSelection).
Sourcepub fn set_badge(&mut self, id: &str, badge: u64)
pub fn set_badge(&mut self, id: &str, badge: u64)
Update a node’s badge by id (e.g. a live event count). No-op if unknown.
Thin wrapper over update(Msg::SetBadge).
Sourcepub fn set_detail(&mut self, id: &str, detail: impl Into<String>)
pub fn set_detail(&mut self, id: &str, detail: impl Into<String>)
Update a node’s detail text by id. No-op if unknown. Thin wrapper over
update(Msg::SetDetail).
Sourcepub fn node_center(&self, i: usize, rect: Rect) -> Pos2
pub fn node_center(&self, i: usize, rect: Rect) -> Pos2
Test/host hook (additive). The public, return-asserted view of the
private center layout node — the absolute pixel centre
node i’s circle is painted at inside rect. Exposed so the syschart
call-chain matrix can assert the layout/place stage (finite, confined to
the padded inner rect, monotone in the normalized pos) without a painter.
Calls the same private fn view paints with — additive, no behaviour
change. The node radius the layout pads for is SystemChart::NODE_R.
Source§impl SystemChart
impl SystemChart
Sourcepub fn copy_text(&self) -> Option<String>
pub fn copy_text(&self) -> Option<String>
The copyable text: the selected node’s label · detail (badge in a suffix)
when a node is selected, else the whole node list as a TSV rectangle
(id \t label \t badge).
Sourcepub fn view(&self, ui: &mut Ui) -> Vec<Msg>
pub fn view(&self, ui: &mut Ui) -> Vec<Msg>
FC-9 pure view — a function of &self: it paints the chart and returns
the Msgs the frame produced (a node click → Msg::Select). It does
not mutate the model; the impl_facet_via_elm!
bridge applies the returned messages through update, so a
headless driver feeding the same Msgs reproduces the live behaviour.
Trait Implementations§
Source§impl CopySource for SystemChart
impl CopySource for SystemChart
Source§fn copy_kinds(&self) -> &[ClipKind]
fn copy_kinds(&self) -> &[ClipKind]
Source§fn copy_payload(&self) -> Option<ClipPayload>
fn copy_payload(&self) -> Option<ClipPayload>
Source§impl Elm for SystemChart
impl Elm for SystemChart
Source§type Model = SysChartModel
type Model = SysChartModel
Source§type Msg = Msg
type Msg = Msg
Model.Source§type Effect = Effect
type Effect = Effect
enum Effect {} when the component does no I/O.Source§fn title(&self) -> &str
fn title(&self) -> &str
Facet::title).Source§fn state(&self) -> &SysChartModel
fn state(&self) -> &SysChartModel
Source§impl Facet for SystemChart
impl Facet for SystemChart
Source§fn ui(&mut self, ui: &mut Ui)
fn ui(&mut self, ui: &mut Ui)
FC-9: the view is pure (paints + emits Msgs); FC-2: mutation only
via update. The immediate-mode trait just bridges the two.
Source§fn caps(&self) -> FacetCaps
fn caps(&self) -> FacetCaps
Painted with the active Theme (nodes/edges/text/accent ring), and its
canvas takes the host’s available width — themeable + resizable.
Source§fn as_any_mut(&mut self) -> Option<&mut dyn Any>
fn as_any_mut(&mut self) -> Option<&mut dyn Any>
Opt into typed downcast so a host (e.g. the demo’s robot-UI node-select
toolbar) can forward a selection to SystemChart::select when this chart
lives boxed inside a FacetDeck.
fn title(&self) -> &str
Source§fn copy(&mut self) -> Option<String>
fn copy(&mut self) -> Option<String>
fn state_json(&self) -> Value
Source§fn selection_json(&self) -> Value
fn selection_json(&self) -> Value
state_json by
convention). Null when nothing/none selectable.Source§fn set_scale(&mut self, _scale: f32)
fn set_scale(&mut self, _scale: f32)
Source§fn cut(&mut self) -> Option<String>
fn cut(&mut self) -> Option<String>
copy, but also removes the selection. Default delegates to copy.Source§fn kind(&self) -> &'static str
fn kind(&self) -> &'static str
"jobview", "graphpan", "table"). Two
instances with the same kind can exchange portable state; the empty
default "" means opted out of cross-instance clone.Source§fn portable_state(&self) -> Option<Value>
fn portable_state(&self) -> Option<Value>
None = not cloneable. Kept SEPARATE from
state_json (the introspection dump, which may carry
derived / render-only data) so this stays round-trippable through
load_state.Source§fn load_state(&mut self, _state: &Value) -> bool
fn load_state(&mut self, _state: &Value) -> bool
portable_state
on a same-kind sibling. Returns true if accepted. Default false
(opt-in per component).