embedded_charts/dashboard/mod.rs
1//! Dashboard layout system for composing multiple charts
2//!
3//! This module provides a flexible layout system for arranging multiple charts
4//! on a single display, perfect for creating comprehensive dashboards in embedded
5//! systems.
6//!
7//! ## Example
8//!
9//! ```rust,no_run
10//! use embedded_charts::dashboard::{SimpleDashboard, GridPosition};
11//! use embedded_graphics::prelude::*;
12//! use embedded_graphics::pixelcolor::Rgb565;
13//! use embedded_graphics::primitives::Rectangle;
14//!
15//! // Create a 2x2 dashboard
16//! let dashboard = SimpleDashboard::new(2, 2, 10);
17//! let total_viewport = Rectangle::new(Point::new(0, 0), Size::new(400, 300));
18//!
19//! // Get viewport for top-left position
20//! let chart1_viewport = dashboard.get_viewport(
21//! GridPosition::new(0, 0),
22//! total_viewport
23//! );
24//!
25//! // Draw your chart in this viewport
26//! // chart.draw(data, config, chart1_viewport, &mut display)?;
27//! ```
28
29mod grid;
30mod layout;
31mod simple;
32
33pub use grid::{GridLayout, GridPosition};
34pub use layout::{DashboardLayout, LayoutPreset};
35pub use simple::{SimpleDashboard, MAX_DASHBOARD_CHARTS};
36
37#[cfg(test)]
38mod tests {
39 use super::*;
40 use embedded_graphics::prelude::*;
41 use embedded_graphics::primitives::Rectangle;
42
43 #[test]
44 fn test_simple_dashboard_creation() {
45 let dashboard = SimpleDashboard::new(2, 2, 10);
46 let viewport = Rectangle::new(Point::new(0, 0), Size::new(200, 200));
47
48 // Test getting individual viewport
49 let pos = GridPosition::new(0, 0);
50 let chart_viewport = dashboard.get_viewport(pos, viewport);
51
52 assert_eq!(chart_viewport.top_left, Point::new(0, 0));
53 assert_eq!(chart_viewport.size.width, 95); // (200 - 10) / 2
54 }
55
56 #[test]
57 fn test_layout_presets() {
58 let preset = LayoutPreset::Quadrants;
59 let layout = preset.to_layout();
60
61 match layout {
62 DashboardLayout::Grid(grid) => {
63 assert_eq!(grid.rows, 2);
64 assert_eq!(grid.cols, 2);
65 }
66 _ => panic!("Expected grid layout"),
67 }
68 }
69}