toon_format/tui/components/
editor.rs1use ratatui::{
4 layout::Rect,
5 widgets::{
6 Block,
7 Borders,
8 },
9 Frame,
10};
11
12use crate::tui::{
13 state::AppState,
14 theme::Theme,
15};
16
17pub struct EditorComponent;
18
19impl EditorComponent {
20 pub fn render(
21 f: &mut Frame,
22 input_area: Rect,
23 output_area: Rect,
24 app: &mut AppState,
25 theme: &Theme,
26 ) {
27 let input_active = app.editor.is_input_active();
28 let input_title = format!(
29 " Input ({}) {} ",
30 match app.mode {
31 crate::tui::state::app_state::Mode::Encode => "JSON",
32 crate::tui::state::app_state::Mode::Decode => "TOON",
33 },
34 if input_active { "●" } else { "" }
35 );
36
37 let input_block = Block::default()
38 .borders(Borders::ALL)
39 .border_style(theme.border_style(input_active))
40 .title(input_title)
41 .style(theme.normal_style());
42
43 app.editor.input.set_block(input_block);
44 app.editor
45 .input
46 .set_cursor_line_style(theme.selection_style());
47 app.editor.input.set_style(theme.normal_style());
48
49 f.render_widget(&app.editor.input, input_area);
50
51 let output_active = app.editor.is_output_active();
52 let output_title = format!(
53 " Output ({}) {} ",
54 match app.mode {
55 crate::tui::state::app_state::Mode::Encode => "TOON",
56 crate::tui::state::app_state::Mode::Decode => "JSON",
57 },
58 if output_active { "●" } else { "" }
59 );
60
61 let output_block = Block::default()
62 .borders(Borders::ALL)
63 .border_style(theme.border_style(output_active))
64 .title(output_title)
65 .style(theme.normal_style());
66
67 app.editor.output.set_block(output_block);
68 app.editor
69 .output
70 .set_cursor_line_style(theme.selection_style());
71 app.editor.output.set_style(theme.normal_style());
72
73 f.render_widget(&app.editor.output, output_area);
74 }
75}