Composite-object baseline for the standardized waveform chart widget class
FROG — Free Open Graphical Language
- Widgets index
- Expression widget instances
- Expression widget interaction
- Expression widget realization
- Widget package publication
- Executable UI primitives
- Default chart realization
- Default chart realization manifest
frog.widgets.waveform_chart
The Waveform Chart family defines the standardized indicator-oriented chart widget used for time-ordered numeric samples, retained history, multiple plots, axes, scale labels, legends, cursors, scrollbars, palette tools, and lightweight plot-image overlays.
A waveform chart is a composite front-panel object. It is not merely a rectangle containing a curve, and it is not a full graphing framework. It is the portable FROG baseline for streaming or appended numeric history visualization.
The intrinsic baseline is intentionally narrower than a full graph family. XY graphs, intensity graphs, mixed-signal graphs, polar plots, histograms, annotations frameworks, plugin renderers, and domain-specific plotting systems belong to later classes, profiles, or host integrations.
- class_id:
frog.widgets.waveform_chart - family:
waveform_chart_widget - compatible role:
indicator
- primary value: present
- value type:
frog.waveform_chart_value - natural value participation: yes
- user-mutable: no for plotted data in the standard portable posture
- diagram-mutable: yes
- mirrored property:
value
A waveform chart may allow user-originated viewport, cursor, palette, and scrollbar changes. Those interactions do not mutate the retained sample history unless an explicit method or data operation does so.
The chart class owns the public value model, history model, plot model, scale model, legend/cursor/palette/scrollbar surfaces, methods, events, and public parts.
The realization owns the drawing strategy: SVG template, host-native plot surface, canvas, GPU surface, polyline rasterization, tick rendering, legend layout, palette layout, cursor drawing, plot-image layer composition, and host-specific optimization.
frog.widgets.waveform_chart
├── value
├── history.*
├── samples.*
├── timebase.*
├── plot_area.*
├── plots.*
├── scales.x.*
├── scales.y.*
├── legends.plot.*
├── legends.scale.*
├── legends.cursor.*
├── palette.*
├── scrollbars.x.*
├── scrollbars.y.*
├── cursors.*
├── plot_images.*
├── annotations.*
├── thresholds.*
├── interaction.*
├── style.*
└── realization.*
The sub-object model gives the chart a property-node and method-node posture similar in spirit to mature graphical systems, while keeping the portable core bounded.
The portable chart value may carry one of these payload postures:
single_sample— one numeric value appended to the active plot,sample_array— multiple samples appended to the active plot,multi_plot_sample— one sample per plot,multi_plot_arrays— multiple samples per plot,waveform— numeric samples plus timing metadata,history_replace— explicit history replacement payload.
samples.value_type—i32,u32,f32,f64, or profile-supported numeric typesamples.nan_policy—preserve,gap, orrejectsamples.timestamp_policy—implicit_index,dt_t0, orexplicit_xsamples.order—append_orderfor the intrinsic baseline
timebase.mode—sample_index,relative_time, orabsolute_timetimebase.t0timebase.dttimebase.unittimebase.sample_rate
history.datahistory.capacityhistory.lengthhistory.update_mode—append,replace_history, orrolling_windowhistory.retention_policy—drop_oldest,reject_when_full, orgrow_until_capacityhistory.clear_on_starthistory.visible_window
Retained history is chart-owned display state. It is not an unbounded data logger. Data logging belongs to another library or runtime integration.
plots.countplots.active_indexplots[].idplots[].nameplots[].visibleplots[].colorplots[].line_styleplots[].line_widthplots[].point_styleplots[].point_sizeplots[].interpolation—none,linear,step_left, orstep_rightplots[].fill_toplots[].x_scale_indexplots[].y_scale_index
scales.x.active_indexscales.x[].namescales.x[].visiblescales.x[].label.textscales.x[].label.visiblescales.x[].autoscalescales.x[].minimumscales.x[].maximumscales.x[].logscales.x[].invertedscales.x[].offsetscales.x[].multiplierscales.x[].tick.major.visiblescales.x[].tick.minor.visiblescales.x[].grid.major.visiblescales.x[].grid.minor.visible
scales.y.active_indexscales.y[].namescales.y[].visiblescales.y[].label.textscales.y[].label.visiblescales.y[].autoscalescales.y[].minimumscales.y[].maximumscales.y[].logscales.y[].invertedscales.y[].offsetscales.y[].multiplierscales.y[].tick.major.visiblescales.y[].tick.minor.visiblescales.y[].grid.major.visiblescales.y[].grid.minor.visible
cursors.countcursors.active_indexcursors[].idcursors[].namecursors[].visiblecursors[].colorcursors[].plot_indexcursors[].position.xcursors[].position.ycursors[].snap_mode—free,nearest_sample, or profile-supported modecursors[].dragging_mode
legends.plot.visiblelegends.plot.positionlegends.scale.visiblelegends.scale.positionlegends.cursor.visiblelegends.cursor.position
palette.visiblepalette.zoom_enabledpalette.pan_enabledpalette.selection_enabledpalette.autoscale_enabled
scrollbars.x.visiblescrollbars.y.visiblescrollbars.x.positionscrollbars.y.positionscrollbars.x.valuescrollbars.y.value
annotations.visibleannotations.itemsthresholds.visiblethresholds.itemsplot_images.backplot_images.middleplot_images.front
Annotations and thresholds are display overlays in the intrinsic baseline. They do not mutate sample history or plot semantics.
rootlabelcaptionframeplot_areahistory_regionplot_layerplot_polylineplot_markergridaxis_tickx_scaley_scalex_scale_labely_scale_labelplot_legendscale_legendcursor_legendgraph_palettex_scrollbary_scrollbarcursor_layercursor_readoutplot_image_backplot_image_middleplot_image_frontannotation_layerthreshold_bandfocus_ring
append_sample(sample)append_samples(samples)append_waveform(waveform)replace_history(samples)clear_history()set_history_capacity(capacity)autoscale_x()autoscale_y()autoscale_all()set_x_range(minimum, maximum)set_y_range(minimum, maximum)set_active_plot(index)set_active_x_scale(index)set_active_y_scale(index)add_cursor(cursor)remove_cursor(index)move_cursor(index, position)clear_cursors()add_threshold(threshold)clear_thresholds()reset_to_default_style()export_view()when supportedfocus()
value_renderedsample_appendedwaveform_appendedhistory_replacedhistory_clearedhistory_capacity_changedaxis_range_changedplot_visibility_changedcursor_addedcursor_removedcursor_movedthreshold_changedpalette_actionviewport_changedfocus_gainedfocus_lost
The waveform chart supports natural value participation through widget_value, property access through frog.ui.property_read and frog.ui.property_write, method invocation through frog.ui.method_invoke, and event observation where legal.
Ordinary streaming updates should prefer widget_value or explicit append methods.
Object-style access should be used for plots, scales, legends, palette, cursor, threshold, history, and viewport configuration.
Validators SHOULD diagnose at least:
- non-numeric sample payloads,
- invalid history capacity,
- history length exceeding capacity,
- invalid plot index,
- invalid active scale index,
- invalid cursor index,
- invalid axis range,
- invalid logarithmic scale ranges,
- incompatible multi-plot sample shapes,
- unsupported cursor snap modes,
- unsupported threshold specifications,
- attempts to treat realization-only drawing internals, canvas handles, GPU surfaces, or plot renderer handles as public class members.
frog.widgets.waveform_chart is the standard FROG baseline for time-ordered numeric history visualization.
It covers streaming sample updates, retained history, multiple plots, axes, scale labels, legends, scrollbars, palette posture, optional cursors, annotations, thresholds, and plot-image layers while preserving the boundary between class law, realization, runtime, and host-native rendering.