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 component(&self) -> &'static str
fn component(&self) -> &'static str
The pane’s DEV-ID, derived with zero per-pane code: module_path!()
expands at the CALL site, so a bridged pane in facett-geomap reports
facett_geomap, which devid::normalize maps
to the registry component geomap. Override in the extras block to say
something else.
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 severity(&self) -> Severity
fn severity(&self) -> Severity
STRUCTURAL severity (the Robot-UI gate signal): RED when the chart has no peers to show (the facet-syschart-1 empty state), the Info floor otherwise.
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 update_json(&mut self, _msg_json: &str)
fn update_json(&mut self, _msg_json: &str)
title/ui/state_json/update_json),
and it is defaulted to a no-op so it is purely ADDITIVE: every existing
impl Facet keeps compiling unchanged, while a facet that wants the writable
input surface overrides it (an Elm-backed facet routes the JSON through its
update). With this default in place Facet and Panel
share the same four-method shape, which is what lets the blanket
impl<T: Facet> Panel for T (see panel) make every
Facet a Panel for free. Unknown/undriven messages are ignored — the
default simply does nothing.Source§fn set_scale(&mut self, _scale: f32)
fn set_scale(&mut self, _scale: f32)
Source§fn scale_range(&self) -> (f32, f32)
fn scale_range(&self) -> (f32, f32)
[min, max], relative to native (1.0), that this facet’s uniform
scale may be driven over. FacetDeck::scale_active clamps into it. Read moreSource§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).Auto Trait Implementations§
impl Freeze for SystemChart
impl RefUnwindSafe for SystemChart
impl Send for SystemChart
impl Sync for SystemChart
impl Unpin for SystemChart
impl UnsafeUnpin for SystemChart
impl UnwindSafe for SystemChart
Blanket Implementations§
impl<T> Allocation for T
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Panel for T
impl<T> Panel for T
Source§fn ui(&mut self, ui: &mut Ui)
fn ui(&mut self, ui: &mut Ui)
ui; the wasm
backend paints a decoded display-list; headless paints nothing.Source§fn state_json(&self) -> Value
fn state_json(&self) -> Value
Source§fn update_json(&mut self, msg_json: &str)
fn update_json(&mut self, msg_json: &str)
Source§fn severity(&self) -> Severity
fn severity(&self) -> Severity
Facet::severity; the blanket impl below forwards
to it. Defaulted to [Severity::Info](crate::Severity::Info) so it is
purely ADDITIVE — no existing Panel backend has to change. The Robot-UI
HARD GATE fails on any driven pane that returns
Severity::Error.Source§fn component(&self) -> &'static str
fn component(&self) -> &'static str
Facet::component;
the blanket impl below forwards to it. Defaulted to "" so it is purely
ADDITIVE — no existing Panel backend has to change.