bhcli

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

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 }