## Features to implement ### some of the features that i want to implement next - time speed adjustment - pause and resume time - label of current real time - label of current plot time - hover tooltip for data points - data input system - multiple panels that can be toggled on and off - use extension scaffolding src as example https://github.com/MoebiusSolutions/extension-scaffold/tree/main - possibly use ES directly, but ideally make own system if it can be better and simpler - config panel ## Systems - dividing up concerns in a sensible, performant, and easy-to-maintain-and-work-with way ### my initial thinking on the concerns of different architectural components. this very well may change, and each thing does not necessarily map to its own file or even its own class. - local configuration: read a config file - state management: - user preferences - service config (websocket url, remote api endpoints) - UI config (what panels acive, ) - database stuff - plots (which attributes of which input data-type are which graph axes, current time range viewable, ) - data input stuff (structure of input datapoints, source, metadata) - health (service connections, framerate, db access) - - application event system (to notify of state updates) - rendering - input data processing - HID input handling - input controller maps - plot handling - DB handling - disk handling - service handling (websockets, mqtt, HTTP REST) ## Some important data structures used in the program - input actions: a set of "single action that the user can perform" - user input: a single event of user input via hardware like key press or click or move joystick - input action map: a map of "set of "user input"" => "input action" - ui element definition: ### Notes - we will need a good system for state management, as the state will grow fairly large, including things like user preferences, UI config (what panels are displayed),