use ratatui::{Frame, prelude::*, widgets::Paragraph};
use crate::{
app::App,
editor::AppView,
global,
hex::{self, comment},
ruler, text,
};
pub fn draw(frame: &mut Frame, app: &mut App) {
if frame.area().width < 75 || frame.area().height < 10 {
let err = Paragraph::new("dz6 needs at least a 75x10 terminal.");
frame.render_widget(err, frame.area());
return;
}
match app.editor_view {
AppView::Hex => {
let constraints = vec![
Constraint::Length(1), Constraint::Percentage(100), Constraint::Length(1), Constraint::Length(1), ];
let vertical_layout = Layout::default()
.direction(Direction::Vertical)
.constraints(constraints)
.split(frame.area());
ruler::ruler_draw(app, frame, vertical_layout[0]);
global::status_bar::status_bar_draw(app, frame, vertical_layout[2]);
app.command_area = vertical_layout[3];
let horizontal_layout = Layout::default()
.direction(Direction::Horizontal)
.constraints(vec![
Constraint::Length(10),
Constraint::Length((app.config.hex_mode_bytes_per_line * 3 + 2) as u16),
Constraint::Min(app.config.hex_mode_bytes_per_line as u16),
])
.split(vertical_layout[1]);
hex::draw::draw_hex_offsets(app, frame, horizontal_layout[0]);
hex::draw::draw_hex_contents(app, frame, horizontal_layout[1]);
hex::draw::draw_hex_ascii(app, frame, horizontal_layout[2]);
comment::comment_show_draw(app, frame);
}
AppView::Text => {
let constraints = vec![
Constraint::Percentage(100), Constraint::Length(1), Constraint::Length(1), ];
let vertical_layout = Layout::default()
.direction(Direction::Vertical)
.constraints(constraints)
.split(frame.area());
global::status_bar::status_bar_draw(app, frame, vertical_layout[1]);
let horizontal_layout = Layout::default()
.direction(Direction::Horizontal)
.constraints(vec![Constraint::Percentage(100)])
.split(vertical_layout[0]);
text::draw::text_contents_draw(app, frame, horizontal_layout[0]);
app.text_view.area_height = horizontal_layout[0].height;
}
}
if let Some(f) = app.dialog_renderer {
f(app, frame);
}
if let Some(f) = app.dialog_2nd_renderer {
f(app, frame);
}
}