bhcli

A TUI for chatting on LE PHP Chats (onion)
git clone https://git.dasho.dev/n0tr1v/bhcli.git
Log | Files | Refs | README

mod.rs (1313B)


      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 }