use ratatui::layout::{Constraint, Flex, Layout, Rect};
use ratatui::widgets::Block;
#[derive(Debug)]
pub struct LayoutDialog<const N: usize> {
pub area: Rect,
pub inner: Rect,
pub content: Rect,
pub button_area: Rect,
pub buttons: [Rect; N],
}
impl<const N: usize> LayoutDialog<N> {
pub fn button(&self, n: usize) -> Rect {
self.buttons[n]
}
}
pub fn layout_dialog<const N: usize>(
area: Rect,
block: Option<&Block<'_>>,
buttons: [Constraint; N],
button_spacing: u16,
button_flex: Flex,
) -> LayoutDialog<N> {
let inner = if let Some(block) = block {
block.inner(area)
} else {
area
};
let l_content = Layout::vertical([
Constraint::Fill(1),
Constraint::Length(1),
Constraint::Length(1),
])
.split(inner);
let l_buttons = Layout::horizontal(buttons)
.spacing(button_spacing)
.flex(button_flex)
.areas(l_content[2]);
LayoutDialog {
area,
inner,
content: l_content[0],
button_area: l_content[2],
buttons: l_buttons,
}
}