ratatui_toolkit/primitives/tree_view/tree_view/traits/
widget.rs

1//! Widget implementation for &TreeView.
2
3use 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        // Render visible items
29        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}