Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

ChartChange

ChartChange — change notifications and stable series identifiers for chart collections.

Public types

KindName
structSeriesId — Opaque identifier for a series in a ChartModel
enumChartChange — Describes a mutation to a chart's series or point data

Detailed description

SeriesId is an opaque, stable handle for a series in a crate::ChartModel. Because ChartModel is backed by a slotmap, SeriesId values survive arbitrary series insertions, removals, and reorders — only removing the series itself invalidates it. ChartChange describes exactly what mutated (at the series level or the point level within a series) so that projections (ChartWindow, ChartAggregate) and consumers (ChartSelection) can refresh or adjust incrementally instead of rebuilding from scratch.

Consumers typically receive ChartChange values through an observer registered via crate::ChartModel::observe_changes, which fires synchronously (before the registering call returns) after each mutation.

// ChartModel::observe_changes returns an ObserverHandle whose drop
// unregisters the callback — keep it alive for the observer's lifetime.
use teksilo_data::{ChartModel, ChartChange};
let model: ChartModel<String> = ChartModel::new();
let _handle = model.observe_changes(|change| {
    println!("{change:?}");
});
model.add_series("Revenue");
// prints: SeriesInserted { index: 0, series: SeriesId(...) }

API reference

📖 Full rustdoc API for this module

pub struct SeriesId

Import: use teksilo::data::SeriesId;

Opaque identifier for a series in a ChartModel.

SeriesId values are stable across mutations — inserting or removing other series does not invalidate existing SeriesId handles (they are SlotMap keys).

#![allow(unused)]
fn main() {
pub struct SeriesId(slotmap::DefaultKey);
}

pub enum ChartChange

Import: use teksilo::data::ChartChange;

Describes a mutation to a chart's series or point data. Emitted by ChartModel<T> automatically.

#![allow(unused)]
fn main() {
pub enum ChartChange { /* variants */ }
}

Variants

  • SeriesInserted { index: usize, series: SeriesId } — A series was inserted at the given index.
  • SeriesRemoved { series: SeriesId } — A series (and all of its points) was removed.
  • SeriesMoved { series: SeriesId, from: usize, to: usize } — A series was moved to a new position among its siblings.
  • SeriesRenamed { series: SeriesId } — A series' display name changed.
  • SeriesColorChanged { series: SeriesId } — A series' explicit color changed (set or cleared). Bumps crate::ChartModel::style_version rather than crate::ChartModel::structure_version.
  • SeriesPatternChanged { series: SeriesId } — A series' explicit SeriesPattern changed (set or cleared). Paint-only, like SeriesColorChanged: it bumps crate::ChartModel::style_version, not structure_version.
  • SeriesVisibilityChanged { series: SeriesId } — A series' visibility flag changed.
  • PointsInserted { series: SeriesId, range: std::ops::Range<usize> } — Points were inserted; range holds the indices of the newly inserted points within series.
  • PointsRemoved { series: SeriesId, range: std::ops::Range<usize> } — Points were removed; range holds the indices they occupied before removal within series.
  • PointUpdated { series: SeriesId, index: usize } — A single point's data changed in place without any structural shift.
  • SeriesDataReplaced { series: SeriesId } — A series' entire point list was replaced; consumers must discard cached state for that series and rebuild it.
  • Reset — The entire chart was replaced. Consumers should discard all state and rebuild.