cargo hollywood
Diffstat (limited to 'src/ui/ls.rs')
| -rw-r--r-- | src/ui/ls.rs | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/src/ui/ls.rs b/src/ui/ls.rs new file mode 100644 index 0000000..6181240 --- /dev/null +++ b/src/ui/ls.rs @@ -0,0 +1,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; + } +} |