Radish alpha
r
Radicle terminal user interface
Radicle
Git (anonymous pull)
Log in to clone via SSH
lib: Add support for table paging keys
Erik Kundt committed 2 years ago
commit 4d872828ccae7fb4027d1d568231b3e0a5ce0040
parent ddb5c3f9b8c7ea6835407cb3493683526e01cb1f
1 file changed +34 -2
modified src/flux/ui/widget.rs
@@ -145,12 +145,13 @@ impl<A> Table<A> {
        self.state.selected()
    }

-
    pub fn prev(&mut self) {
+
    pub fn prev(&mut self) -> Option<usize> {
        let selected = self.selected().map(|current| current.saturating_sub(1));
        self.state.select(selected);
+
        selected
    }

-
    pub fn next(&mut self, len: usize) {
+
    pub fn next(&mut self, len: usize) -> Option<usize> {
        let selected = self.selected().map(|current| {
            if current < len.saturating_sub(1) {
                current.saturating_add(1)
@@ -159,6 +160,37 @@ impl<A> Table<A> {
            }
        });
        self.state.select(selected);
+
        selected
+
    }
+

+
    pub fn prev_page(&mut self, page_size: usize) -> Option<usize> {
+
        let selected = self
+
            .selected()
+
            .map(|current| current.saturating_sub(page_size));
+
        self.state.select(selected);
+
        selected
+
    }
+

+
    pub fn next_page(&mut self, len: usize, page_size: usize) -> Option<usize> {
+
        let selected = self.selected().map(|current| {
+
            if current < len.saturating_sub(1) {
+
                cmp::min(current.saturating_add(page_size), len.saturating_sub(1))
+
            } else {
+
                current
+
            }
+
        });
+
        self.state.select(selected);
+
        selected
+
    }
+

+
    pub fn begin(&mut self) -> Option<usize> {
+
        self.state.select(Some(0));
+
        self.state.selected()
+
    }
+

+
    pub fn end(&mut self, len: usize) -> Option<usize> {
+
        self.state.select(Some(len.saturating_sub(1)));
+
        self.state.selected()
    }

    pub fn progress(&self, len: usize) -> (usize, usize) {