terminal_ui/ui/
ui_error_message.rs

1use tui::{widgets::{Paragraph, Block, Borders, Clear}, layout::{Alignment, Rect, Layout, Direction, Constraint}, backend::Backend, Frame};
2
3use crate::{styles::{selected_style, ERROR_STYLE}, app::App};
4
5use super::ui_popup::centered_rect;
6
7
8fn draw_error_message<B>(f: &mut Frame<B>, app: &mut App, area: Rect)
9where
10    B: Backend,
11{
12    let ok_button_widget = Paragraph::new(app.popup.message.as_str())
13        .alignment(Alignment::Center)
14        .block(Block::default().borders(Borders::NONE));
15    f.render_widget(ok_button_widget, area);
16}
17
18fn draw_ok_button<B>(f: &mut Frame<B>, app: &App, area: Rect)
19where
20    B: Backend,
21{
22    let ok_button_widget = Paragraph::new("OK")
23        .style(selected_style(app.color))
24        .alignment(Alignment::Center)
25        .block(Block::default().borders(Borders::ALL));
26    f.render_widget(ok_button_widget, area);
27}
28
29pub fn draw_error_popup<B>(f: &mut Frame<B>, app: &mut App)
30where
31    B: Backend,
32{
33    let block = Block::default()
34        .title("Error")
35        .borders(Borders::ALL)
36        .border_style(ERROR_STYLE);
37
38    let area = centered_rect(30, 15, f.size());
39    f.render_widget(Clear, area); //this clears out the background
40    f.render_widget(block, area);
41
42    let popup_layout = Layout::default()
43        .direction(Direction::Horizontal)
44        .constraints([Constraint::Percentage(100)].as_ref())
45        .margin(1)
46        .split(area);
47    let popup_layout = Layout::default()
48        .direction(Direction::Vertical)
49        .constraints(
50            [
51                Constraint::Percentage(80),
52                Constraint::Percentage(20)
53            ]
54            .as_ref(),
55        )
56        .margin(1)
57        .split(popup_layout[0]);
58
59        draw_error_message(f, app, popup_layout[0]);
60        draw_ok_button(f, app, popup_layout[1]);
61}