From 1ad9a97e9a25622a9946cb9c55705922c42d9149 Mon Sep 17 00:00:00 2001 From: lukeflo-work Date: Thu, 10 Oct 2024 15:12:31 +0200 Subject: scrollbar for keyword and entry area --- src/frontend/keywords.rs | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) (limited to 'src/frontend/keywords.rs') diff --git a/src/frontend/keywords.rs b/src/frontend/keywords.rs index 4beec14..6aa4068 100644 --- a/src/frontend/keywords.rs +++ b/src/frontend/keywords.rs @@ -18,12 +18,13 @@ use super::app::{App, FormerArea}; use super::entries::EntryTable; use crate::backend::search::BibiSearch; -use ratatui::widgets::ListState; +use ratatui::widgets::{ListState, ScrollbarState}; #[derive(Debug)] pub struct TagList { pub tag_list_items: Vec, pub tag_list_state: ListState, + pub tag_scroll_state: ScrollbarState, } // Structure of the list items. @@ -43,14 +44,16 @@ impl TagListItem { impl FromIterator for TagList { fn from_iter>(iter: I) -> Self { - let tag_list_items = iter + let tag_list_items: Vec = iter .into_iter() .map(|info| TagListItem::new(&info)) .collect(); let tag_list_state = ListState::default(); // for preselection: .with_selected(Some(0)); + let tag_scroll_state = ScrollbarState::new(tag_list_items.len()); Self { tag_list_items, tag_list_state, + tag_scroll_state, } } } @@ -61,18 +64,31 @@ impl App { // Movement pub fn select_next_tag(&mut self) { self.tag_list.tag_list_state.select_next(); + self.tag_list.tag_scroll_state = self + .tag_list + .tag_scroll_state + .position(self.tag_list.tag_list_state.selected().unwrap()); } pub fn select_previous_tag(&mut self) { self.tag_list.tag_list_state.select_previous(); + self.tag_list.tag_scroll_state = self + .tag_list + .tag_scroll_state + .position(self.tag_list.tag_list_state.selected().unwrap()); } pub fn select_first_tag(&mut self) { self.tag_list.tag_list_state.select_first(); + self.tag_list.tag_scroll_state = self.tag_list.tag_scroll_state.position(0); } pub fn select_last_tag(&mut self) { self.tag_list.tag_list_state.select_last(); + self.tag_list.tag_scroll_state = self + .tag_list + .tag_scroll_state + .position(self.tag_list.tag_list_items.len()); } pub fn get_selected_tag(&self) -> &str { -- cgit v1.2.3