framework_tool_tui/tui/component/
smbios_panel.rs1use ratatui::{
2 layout::{Constraint, Layout, Rect},
3 style::Style,
4 widgets::{Block, BorderType, Borders, Paragraph},
5 Frame,
6};
7
8use crate::{
9 framework::info::FrameworkInfo,
10 tui::{component::Component, theme::Theme},
11};
12
13pub struct SmbiosPanelComponent;
14
15impl SmbiosPanelComponent {
16 fn render_smbios_version(
17 &self,
18 frame: &mut Frame,
19 key_area: Rect,
20 value_area: Rect,
21 theme: &Theme,
22 info: &FrameworkInfo,
23 ) {
24 let smbios_version_text = match &info.smbios_version {
25 Some(smbios_version) => smbios_version,
26 None => "N/A",
27 };
28
29 frame.render_widget(Paragraph::new("Version"), key_area);
30 frame.render_widget(
31 Paragraph::new(smbios_version_text).style(Style::default().fg(theme.informative_text)),
32 value_area,
33 );
34 }
35
36 fn render_smbios_release_date(
37 &self,
38 frame: &mut Frame,
39 key_area: Rect,
40 value_area: Rect,
41 theme: &Theme,
42 info: &FrameworkInfo,
43 ) {
44 let smbios_release_date_text = match &info.smbios_release_date {
45 Some(smbios_release_date) => smbios_release_date,
46 None => "N/A",
47 };
48
49 frame.render_widget(Paragraph::new("Release date"), key_area);
50 frame.render_widget(
51 Paragraph::new(smbios_release_date_text)
52 .style(Style::default().fg(theme.informative_text)),
53 value_area,
54 );
55 }
56
57 fn render_smbios_vendor(
58 &self,
59 frame: &mut Frame,
60 key_area: Rect,
61 value_area: Rect,
62 theme: &Theme,
63 info: &FrameworkInfo,
64 ) {
65 let smbios_vendor_text = match &info.smbios_vendor {
66 Some(smbios_vendor) => smbios_vendor,
67 None => "N/A",
68 };
69
70 frame.render_widget(Paragraph::new("Vendor"), key_area);
71 frame.render_widget(
72 Paragraph::new(smbios_vendor_text).style(Style::default().fg(theme.informative_text)),
73 value_area,
74 );
75 }
76}
77
78impl Component for SmbiosPanelComponent {
79 fn render(&mut self, frame: &mut Frame, area: Rect, theme: &Theme, info: &FrameworkInfo) {
80 let block = Block::default()
81 .title(" BIOS ")
82 .borders(Borders::ALL)
83 .border_style(Style::default().fg(theme.border))
84 .border_type(BorderType::Rounded);
85
86 let [keys_area, values_area] =
87 Layout::horizontal([Constraint::Fill(1), Constraint::Fill(1)])
88 .horizontal_margin(2)
89 .spacing(1)
90 .vertical_margin(1)
91 .areas(block.inner(area));
92
93 let keys_block = Block::default().borders(Borders::NONE);
94 let values_block = Block::default().borders(Borders::NONE);
95
96 let [smbios_vendor_key_area, smbios_version_key_area, smbios_release_date_key_area] =
97 Layout::vertical([
98 Constraint::Length(1),
99 Constraint::Length(1),
100 Constraint::Length(1),
101 ])
102 .areas(keys_block.inner(keys_area));
103 let [smbios_vendor_value_area, smbios_version_value_area, smbios_release_date_value_area] =
104 Layout::vertical([
105 Constraint::Length(1),
106 Constraint::Length(1),
107 Constraint::Length(1),
108 ])
109 .areas(values_block.inner(values_area));
110
111 self.render_smbios_vendor(
113 frame,
114 smbios_vendor_key_area,
115 smbios_vendor_value_area,
116 theme,
117 info,
118 );
119
120 self.render_smbios_version(
122 frame,
123 smbios_version_key_area,
124 smbios_version_value_area,
125 theme,
126 info,
127 );
128
129 self.render_smbios_release_date(
131 frame,
132 smbios_release_date_key_area,
133 smbios_release_date_value_area,
134 theme,
135 info,
136 );
137
138 frame.render_widget(keys_block, keys_area);
140 frame.render_widget(values_block, values_area);
141
142 frame.render_widget(block, area);
143 }
144}