use ratatui::layout::Constraint;
use ratatui::widgets::{Clear, Widget};
use crate::tui::view::popup_area;
pub struct PaneWithPopup<W, P> {
pane: Option<W>,
popup: Option<(P, Option<Constraint>, Option<Constraint>)>,
}
impl<W, P> PaneWithPopup<W, P> {
pub fn new(
pane: Option<W>,
popup: Option<(P, Option<Constraint>, Option<Constraint>)>,
) -> Self {
PaneWithPopup { pane, popup }
}
pub fn set_pane(&mut self, pane: W) {
self.pane = Some(pane);
}
pub fn set_popup(
&mut self,
popup: (P, Option<Constraint>, Option<Constraint>),
) {
self.popup = Some(popup);
}
}
impl<W: Widget, P: Widget> Widget for PaneWithPopup<W, P> {
fn render(
self,
area: ratatui::prelude::Rect,
buf: &mut ratatui::prelude::Buffer,
) {
if let Some(pane) = self.pane {
pane.render(area, buf);
}
if let Some((popup, vertical_constraint, horizontal_constraint)) =
self.popup
{
let area =
popup_area(area, vertical_constraint, horizontal_constraint);
Clear.render(area, buf);
popup.render(area, buf);
}
}
}