mod.rs (1312B)
1 pub mod event; 2 3 use tui::widgets::ListState; 4 5 pub struct StatefulList<T> { 6 pub state: ListState, 7 pub items: Vec<T>, 8 } 9 10 impl<T> StatefulList<T> { 11 pub fn new() -> StatefulList<T> { 12 StatefulList { 13 state: ListState::default(), 14 items: Vec::new(), 15 } 16 } 17 18 pub fn next(&mut self) { 19 if self.items.len() == 0 { 20 return; 21 } 22 let i = match self.state.selected() { 23 Some(i) => { 24 if i >= self.items.len() - 1 { 25 0 26 } else { 27 i + 1 28 } 29 } 30 None => 0, 31 }; 32 self.state.select(Some(i)); 33 } 34 35 pub fn previous(&mut self) { 36 if self.items.len() == 0 { 37 return; 38 } 39 let i = match self.state.selected() { 40 Some(i) => { 41 if i == 0 { 42 self.items.len() - 1 43 } else { 44 i - 1 45 } 46 } 47 None => 0, 48 }; 49 self.state.select(Some(i)); 50 } 51 52 pub fn unselect(&mut self) { 53 self.state.select(None); 54 } 55 56 pub fn select_top(&mut self) { 57 if self.items.is_empty() { 58 return; 59 } 60 self.state.select(Some(0)); 61 } 62 }