Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

clythersHackers/timeline-view

Open more actions menu

Repository files navigation

Timeline Overview Renderer (Qt Quick)

TimelineView screenshot

Purpose

  • Lightweight timeline overview for planned satellite contacts, intended for WASM and low-end devices.
  • Reusable TimelineView QQuickItem 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.

High-Level Design

Core Principles

  • Single renderer: one custom C++ QQuickItem draws 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.

Timeline Layout

  • 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 TimelineView item.
  • 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.

Data Model

Contacts (inputs to TimelineView)

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

Input Contact KV (NATS KV, demo app)

  • 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.

Implementation Constraints

  • 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.

License

This project is distributed under the Mozilla Public License 2.0. See LICENSE.txt for details.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages

Morty Proxy This is a proxified and sanitized view of the page, visit original site.