oxidize_pdf/dashboard/
treemap.rs1use super::{
7 component::ComponentConfig, ComponentPosition, ComponentSpan, DashboardComponent,
8 DashboardTheme,
9};
10use crate::error::PdfError;
11use crate::graphics::Color;
12use crate::page::Page;
13
14#[derive(Debug, Clone)]
16pub struct TreeMap {
17 config: ComponentConfig,
19 data: Vec<TreeMapNode>,
21 options: TreeMapOptions,
23}
24
25impl TreeMap {
26 pub fn new(data: Vec<TreeMapNode>) -> Self {
28 Self {
29 config: ComponentConfig::new(ComponentSpan::new(6)), data,
31 options: TreeMapOptions::default(),
32 }
33 }
34}
35
36impl DashboardComponent for TreeMap {
37 fn render(
38 &self,
39 _page: &mut Page,
40 _position: ComponentPosition,
41 _theme: &DashboardTheme,
42 ) -> Result<(), PdfError> {
43 let _title = self.options.title.as_deref().unwrap_or("TreeMap");
45
46 Ok(())
56 }
57
58 fn get_span(&self) -> ComponentSpan {
59 self.config.span
60 }
61 fn set_span(&mut self, span: ComponentSpan) {
62 self.config.span = span;
63 }
64 fn preferred_height(&self, _available_width: f64) -> f64 {
65 250.0
66 }
67 fn component_type(&self) -> &'static str {
68 "TreeMap"
69 }
70 fn complexity_score(&self) -> u8 {
71 70
72 }
73}
74
75#[derive(Debug, Clone)]
77pub struct TreeMapNode {
78 pub name: String,
79 pub value: f64,
80 pub color: Option<Color>,
81 pub children: Vec<TreeMapNode>,
82}
83
84#[derive(Debug, Clone)]
86pub struct TreeMapOptions {
87 pub title: Option<String>,
88 pub show_labels: bool,
89 pub padding: f64,
90}
91
92impl Default for TreeMapOptions {
93 fn default() -> Self {
94 Self {
95 title: None,
96 show_labels: true,
97 padding: 2.0,
98 }
99 }
100}
101
102pub struct TreeMapBuilder;
104
105impl TreeMapBuilder {
106 pub fn new() -> Self {
107 Self
108 }
109 pub fn build(self) -> TreeMap {
110 TreeMap::new(vec![])
111 }
112}