1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
use tui::style::{Color, Modifier, Style};
use tui::text::{Span, Spans};
use tui::widgets::{Tabs as TuiTabs, Widget};

use crate::{define_widget, utils::get_block, TuiStates};

define_widget!(Tabs);

impl<'a> Widget for Tabs<'a> {
    fn render(self, area: tui::layout::Rect, buf: &mut tui::buffer::Buffer) {
        let len = TuiStates::TITLES.len();
        let range = if self.state.show_debug {
            0..len
        } else {
            0..len - 1
        };
        let titles = TuiStates::TITLES[range]
            .iter()
            .enumerate()
            .map(|(i, t)| {
                Spans::from(Span::styled(
                    format!("{} {}", i + 1, t),
                    Style::default().fg(Color::DarkGray),
                ))
            })
            .collect();
        let tabs = TuiTabs::new(titles)
            .block(get_block("Clashctl"))
            .highlight_style(
                Style::default()
                    .fg(Color::White)
                    .add_modifier(Modifier::BOLD),
            )
            .select(self.state.page_index.into());
        tabs.render(area, buf)
    }
}