lcode 0.10.0

An application of terminal write leetcode.一个终端刷力扣的应用
Documentation
use ratatui::widgets::{ListItem, ListState};

#[derive(Clone)]
#[derive(Debug)]
#[derive(Default)]
pub struct KeymapState<'key> {
    pub items: Vec<ListItem<'key>>,
    pub list_state: ListState,
}

impl<'key> KeymapState<'key> {
    pub fn new(keymaps_items: Vec<ListItem<'key>>) -> Self {
        Self {
            list_state: ListState::default(),
            items: keymaps_items,
        }
    }
    pub fn trigger(&self) -> bool {
        let a = self
            .list_state
            .selected()
            .unwrap_or_default();
        if a == 0 {
            crate::star();
        }
        false
    }

    pub fn first(&mut self) -> bool {
        self.list_state.select(Some(0));
        true
    }
    pub fn last(&mut self) -> bool {
        self.list_state
            .select(Some(self.items.len() - 1));
        true
    }
    pub fn prev(&mut self) -> bool {
        let i = match self.list_state.selected() {
            Some(i) => (self.items.len() + i - 1) % self.items.len(),
            None => 0,
        };
        self.list_state.select(Some(i));
        true
    }
    pub fn next(&mut self) -> bool {
        let i = match self.list_state.selected() {
            Some(i) => (i + 1) % self.items.len(),
            None => 0,
        };
        self.list_state.select(Some(i));
        true
    }
}