ratatui_toolkit/primitives/tree_view/tree_view/traits/
widget.rs1use ratatui::{buffer::Buffer, layout::Rect, widgets::Widget};
4
5use crate::primitives::tree_view::tree_view::TreeView;
6use crate::primitives::tree_view::tree_view_state::TreeViewState;
7
8impl<'a, T> Widget for &TreeView<'a, T> {
9 fn render(self, area: Rect, buf: &mut Buffer) {
10 let state = TreeViewState::default();
11
12 let area = match &self.block {
13 Some(ref b) => {
14 let inner = b.inner(area);
15 b.clone().render(area, buf);
16 inner
17 }
18 None => area,
19 };
20
21 if area.height == 0 {
22 return;
23 }
24
25 let items = self.flatten_tree(&state);
26 let visible_height = area.height as usize;
27
28 for (i, (line, _)) in items
30 .iter()
31 .skip(state.offset)
32 .take(visible_height)
33 .enumerate()
34 {
35 let y = area.y + i as u16;
36 buf.set_line(area.x, y, line, area.width);
37 }
38 }
39}