diff options
| author | lukeflo | 2024-10-11 14:27:21 +0200 |
|---|---|---|
| committer | lukeflo | 2024-10-12 22:41:38 +0200 |
| commit | 2fa5f8193c2cf3b75f54a37f0f7c4b5ae9d7d665 (patch) | |
| tree | 483b113616c9a750f618c45ca332858d63758a9f /src/frontend/keywords.rs | |
| parent | 8e4bcaada27a50a83dba35deea8ad804d4bb226a (diff) | |
| parent | d9ed8fc8eaab1aa04aac031cc629d7018d513ab7 (diff) | |
| download | bibiman-2fa5f8193c2cf3b75f54a37f0f7c4b5ae9d7d665.tar.gz bibiman-2fa5f8193c2cf3b75f54a37f0f7c4b5ae9d7d665.zip | |
Merge branch 'scrollbar'
Diffstat (limited to 'src/frontend/keywords.rs')
| -rw-r--r-- | src/frontend/keywords.rs | 20 |
1 files changed, 18 insertions, 2 deletions
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<TagListItem>, pub tag_list_state: ListState, + pub tag_scroll_state: ScrollbarState, } // Structure of the list items. @@ -43,14 +44,16 @@ impl TagListItem { impl FromIterator<String> for TagList { fn from_iter<I: IntoIterator<Item = String>>(iter: I) -> Self { - let tag_list_items = iter + let tag_list_items: Vec<TagListItem> = 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 { |
