53 lines
1.3 KiB
Rust
53 lines
1.3 KiB
Rust
use crate::ui::utils::{background_block, centered_rect};
|
|
use ratatui::buffer::Buffer;
|
|
use ratatui::layout::{Constraint, Layout, Rect};
|
|
use ratatui::widgets::{Block, Clear, Widget, WidgetRef};
|
|
|
|
use super::input_box::InputBox;
|
|
|
|
#[cfg(test)]
|
|
#[path = "input_box_popup_tests.rs"]
|
|
mod input_box_popup_tests;
|
|
|
|
pub struct InputBoxPopup<'a> {
|
|
input_box: InputBox<'a>,
|
|
}
|
|
|
|
impl<'a> InputBoxPopup<'a> {
|
|
pub fn new(content: &'a str) -> Self {
|
|
Self {
|
|
input_box: InputBox::new(content),
|
|
}
|
|
}
|
|
|
|
pub fn block(mut self, block: Block<'a>) -> InputBoxPopup<'a> {
|
|
self.input_box = self.input_box.block(block);
|
|
self
|
|
}
|
|
|
|
pub fn offset(mut self, offset: usize) -> InputBoxPopup<'a> {
|
|
self.input_box = self.input_box.offset(offset);
|
|
self
|
|
}
|
|
|
|
fn render_popup(&self, area: Rect, buf: &mut Buffer) {
|
|
let popup_area = Rect {
|
|
height: 6,
|
|
..centered_rect(30, 20, area)
|
|
};
|
|
Clear.render(popup_area, buf);
|
|
background_block().render(popup_area, buf);
|
|
|
|
let [text_box_area] = Layout::vertical([Constraint::Length(3)])
|
|
.margin(1)
|
|
.areas(popup_area);
|
|
self.input_box.render_ref(text_box_area, buf);
|
|
}
|
|
}
|
|
|
|
impl WidgetRef for InputBoxPopup<'_> {
|
|
fn render_ref(&self, area: Rect, buf: &mut Buffer) {
|
|
self.render_popup(area, buf);
|
|
}
|
|
}
|