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; } }