terminal_ui/ui/
ui_error_message.rs1use 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); 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}