cargo hollywood
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
38
use ratatui::widgets::ListState;

#[derive(Default)]
pub struct SList {
    pub state: ListState,
    pub itemc: usize,
}

pub const fn incr(what: usize, cap: usize) -> usize {
    if what > cap - 1 {
        0
    } else {
        what + 1
    }
}

pub const fn decr(what: usize, cap: usize) -> usize {
    if what == 0 {
        cap - 1
    } else {
        what - 1
    }
}

impl SList {
    pub fn next(&mut self) {
        let i = self.state.selected().map_or(0, |x| incr(x, self.itemc));
        self.state.select(Some(i));
    }

    pub fn prev(&mut self) {
        let i = self.state.selected().map_or(0, |x| decr(x, self.itemc));
        self.state.select(Some(i));
    }
    pub fn has(&mut self, n: usize) {
        self.itemc = n;
    }
}