- Lightweight timeline overview for planned satellite contacts, intended for WASM and low-end devices.
- Reusable
TimelineViewQQuickItem that renders lanes per ground station and a moving "now" marker. - The bundled Qt/QML application is for testing & development only; not a reference UI.
- Single renderer: one custom C++
QQuickItemdraws all lanes, blocks, and markers via the GPU scenegraph. - Timeline projection is owned by the view; data is provided as timestamps and identifiers.
- Demo application derives data inputs via NATS KV, but the view is transport-agnostic.
- X axis: time window in seconds, with "now" positioned at a configurable ratio (default ~1/3 from left).
- The demo exposes a horizontal scrollbar that shifts the time window via
timeOffsetSeconds. - Y axis: lanes per ground station (
gs_id), ordered by first appearance in the input data. - Labels and a simple time scale are rendered inside the
TimelineViewitem. - Overlapping contacts within a ground station are stacked into sublanes inside that station's band.
- The view can enforce a minimum pixel density (
minPixelsPerHour), shrinking the visible time window on narrow widths while keeping horizontal scrolling available in the demo. - In portrait aspect ratios, the view auto-rotates 90 degrees anticlockwise.
- Contacts are rendered as filled rectangles per lane; active contacts show a progress fill.
TimelineView consumes a list of maps with at least:
gs_id(string)start_ts(Unix seconds, double)end_ts(Unix seconds, double)
Optional fields (forwarded untouched in the raw map):
sat_id,sat_name,duration_min,max_elev_deg
- Bucket:
mplanner(default) - Key:
m.plan.current
Example content (JSON equivalent of CBOR):
{
"gs_id": "gnd_london",
"sat_id": 42961,
"sat_name": "IRIDIUM 132",
"start_ts": 1768177380.0,
"end_ts": 1768178220.0,
"duration_min": 14,
"max_elev_deg": 17.683277916110466
}A payload may also be an array of contact maps; the demo watcher accepts either.
- Goal is very lightweight rendering & smooth performance on low-end devices e.g. in WASM.
- Coupling to NATS KV is at application level.
- All rendering stays in one C++
QQuickItem.
This project is distributed under the Mozilla Public License 2.0. See LICENSE.txt for details.
