use std::cell::RefCell;
use std::rc::Rc;
use crate::tui::Component;
pub struct DynamicLines {
lines: RefCell<Vec<String>>,
}
pub struct RcDynamicLines(pub Rc<DynamicLines>);
impl Component for RcDynamicLines {
fn render(&self, width: usize) -> Vec<String> {
self.0.render(width)
}
fn invalidate(&mut self) {
self.0.clear_cache();
}
}
impl Clone for RcDynamicLines {
fn clone(&self) -> Self {
Self(self.0.clone())
}
}
impl DynamicLines {
pub fn new() -> Self {
Self {
lines: RefCell::new(Vec::new()),
}
}
pub fn set_lines(&self, new_lines: Vec<String>) {
*self.lines.borrow_mut() = new_lines;
}
pub fn clear(&self) {
self.lines.borrow_mut().clear();
}
pub fn clear_cache(&self) {
}
}
impl Default for DynamicLines {
fn default() -> Self {
Self::new()
}
}
impl Component for DynamicLines {
fn render(&self, _width: usize) -> Vec<String> {
self.lines.borrow().clone()
}
fn invalidate(&mut self) {
}
}