Skip to main content

gitv_tui/ui/
layout.rs

1use ratatui::layout::Rect;
2use ratatui_macros::{horizontal, vertical};
3
4#[derive(Debug, Clone, Copy)]
5pub struct Layout {
6    pub status_bar: Rect,
7    pub main_content: Rect,
8    pub label_list: Rect,
9    pub text_search: Rect,
10    pub status_dropdown: Rect,
11    pub issue_preview: Rect,
12    pub label_search: Rect,
13    pub title_bar: Rect,
14}
15
16impl Layout {
17    pub fn new(area: Rect) -> Self {
18        let [title_bar, main, status_bar] = vertical![==1, *=1, ==1].areas(area);
19        let [left, right] = horizontal![==70%, *=1].areas(main);
20        let [label_list, issue_preview] = vertical![*=1, *=1].areas(right);
21        let [text_search, bottom_search, main_content] = vertical![==3, ==3, *=1].areas(left);
22        let [label_search, status_dropdown] = horizontal![*=1, ==30%].areas(bottom_search);
23        Self {
24            status_dropdown,
25            title_bar,
26            status_bar,
27            main_content,
28            label_list,
29            label_search,
30            text_search,
31            issue_preview,
32        }
33    }
34
35    pub fn fullscreen(area: Rect) -> Self {
36        Self {
37            status_bar: area,
38            main_content: area,
39            label_list: area,
40            text_search: area,
41            status_dropdown: area,
42            issue_preview: area,
43            label_search: area,
44            title_bar: area,
45        }
46    }
47
48    pub fn areas(&self) -> [Rect; 4] {
49        [
50            self.title_bar,
51            self.main_content,
52            self.label_list,
53            self.issue_preview,
54        ]
55    }
56}