bhcli

"Strange's fork of n0tr1v's bhcli (onion)"
git clone https://git.dasho.dev/Strange/bhcli.git
Log | Files | Refs | README

mod.rs (1330B)


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