television_screen/
help.rs1use super::layout::HelpBarLayout;
2use crate::colors::{Colorscheme, GeneralColorscheme};
3use crate::logo::build_logo_paragraph;
4use crate::metadata::build_metadata_table;
5use crate::mode::{mode_color, Mode};
6use ratatui::layout::Rect;
7use ratatui::prelude::{Color, Style};
8use ratatui::widgets::{Block, BorderType, Borders, Padding, Table};
9use ratatui::Frame;
10use television_channels::channels::UnitChannel;
11use television_utils::metadata::AppMetadata;
12
13pub fn draw_logo_block(
14 f: &mut Frame,
15 area: Rect,
16 mode_color: Color,
17 general_colorscheme: &GeneralColorscheme,
18) {
19 let logo_block = Block::default()
20 .borders(Borders::ALL)
21 .border_type(BorderType::Rounded)
22 .border_style(Style::default().fg(general_colorscheme.border_fg))
23 .style(
24 Style::default()
25 .fg(mode_color)
26 .bg(general_colorscheme.background.unwrap_or_default()),
27 )
28 .padding(Padding::horizontal(1));
29
30 let logo_paragraph = build_logo_paragraph().block(logo_block);
31
32 f.render_widget(logo_paragraph, area);
33}
34
35fn draw_metadata_block(
36 f: &mut Frame,
37 area: Rect,
38 mode: Mode,
39 current_channel: UnitChannel,
40 app_metadata: &AppMetadata,
41 colorscheme: &Colorscheme,
42) {
43 let metadata_block = Block::default()
44 .borders(Borders::ALL)
45 .border_type(BorderType::Rounded)
46 .border_style(Style::default().fg(colorscheme.general.border_fg))
47 .padding(Padding::horizontal(1))
48 .style(
49 Style::default()
50 .bg(colorscheme.general.background.unwrap_or_default()),
51 );
52
53 let metadata_table =
54 build_metadata_table(mode, current_channel, app_metadata, colorscheme)
55 .block(metadata_block);
56
57 f.render_widget(metadata_table, area);
58}
59
60fn draw_keymaps_block(
61 f: &mut Frame,
62 area: Rect,
63 keymap_table: Table,
64 colorscheme: &GeneralColorscheme,
65) {
66 let keymaps_block = Block::default()
67 .borders(Borders::ALL)
68 .border_type(BorderType::Rounded)
69 .border_style(Style::default().fg(colorscheme.border_fg))
70 .style(Style::default().bg(colorscheme.background.unwrap_or_default()))
71 .padding(Padding::horizontal(1));
72
73 let table = keymap_table.block(keymaps_block);
74
75 f.render_widget(table, area);
76}
77
78pub fn draw_help_bar(
79 f: &mut Frame,
80 layout: &Option<HelpBarLayout>,
81 current_channel: UnitChannel,
82 keymap_table: Table,
83 mode: Mode,
84 app_metadata: &AppMetadata,
85 colorscheme: &Colorscheme,
86) {
87 if let Some(help_bar) = layout {
88 draw_metadata_block(
89 f,
90 help_bar.left,
91 mode,
92 current_channel,
93 app_metadata,
94 colorscheme,
95 );
96 draw_keymaps_block(
97 f,
98 help_bar.middle,
99 keymap_table,
100 &colorscheme.general,
101 );
102 draw_logo_block(
103 f,
104 help_bar.right,
105 mode_color(mode, &colorscheme.mode),
106 &colorscheme.general,
107 );
108 }
109}