diff options
| author | lukeflo | 2024-10-14 16:19:13 +0200 |
|---|---|---|
| committer | lukeflo | 2024-10-14 16:19:13 +0200 |
| commit | fc50bb8a5c5ae0037266efd15b0eaca0d58843b7 (patch) | |
| tree | 14076c65879629c3b05c396a876d2ff50350a530 /src/frontend/keywords.rs | |
| parent | d996467fe899fa0012ef87bda2e7c210b5af8714 (diff) | |
| parent | c5040eac46d144a975bda7684b284a4a5bbd1536 (diff) | |
| download | bibiman-fc50bb8a5c5ae0037266efd15b0eaca0d58843b7.tar.gz bibiman-fc50bb8a5c5ae0037266efd15b0eaca0d58843b7.zip | |
Merge branch 'footer-entrylist'
Implemented a status bar-like line under the entry list to show some infos:
- basename of the currently loaded file
- keyword by which the list is filtered, if active
- currently selected entry and number of all entries in the current list
Diffstat (limited to 'src/frontend/keywords.rs')
| -rw-r--r-- | src/frontend/keywords.rs | 40 |
1 files changed, 30 insertions, 10 deletions
diff --git a/src/frontend/keywords.rs b/src/frontend/keywords.rs index 0363609..9432752 100644 --- a/src/frontend/keywords.rs +++ b/src/frontend/keywords.rs @@ -21,9 +21,10 @@ use ratatui::widgets::{ListState, ScrollbarState}; #[derive(Debug)] pub struct TagList { - pub tag_list_items: Vec<TagListItem>, + pub tag_list_items: Vec<String>, pub tag_list_state: ListState, pub tag_scroll_state: ScrollbarState, + pub selected_keyword: String, } // Structure of the list items. @@ -41,18 +42,33 @@ impl TagListItem { } } -impl FromIterator<String> for TagList { - fn from_iter<I: IntoIterator<Item = String>>(iter: I) -> Self { - let tag_list_items: Vec<TagListItem> = iter - .into_iter() - .map(|info| TagListItem::new(&info)) - .collect(); +// impl FromIterator<String> for TagList { +// fn from_iter<I: IntoIterator<Item = String>>(iter: I) -> Self { +// 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, +// selected_keyword: String::new(), +// } +// } +// } + +impl TagList { + pub fn new(keyword_list: Vec<String>) -> Self { + let tag_list_items = keyword_list; 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, + selected_keyword: String::new(), } } } @@ -92,7 +108,8 @@ impl App { pub fn get_selected_tag(&self) -> &str { let idx = self.tag_list.tag_list_state.selected().unwrap(); - let keyword = &self.tag_list.tag_list_items[idx].keyword; + let keyword = &self.tag_list.tag_list_items[idx]; + // let keyword = &self.tag_list.tag_list_items[idx].keyword; keyword } @@ -100,7 +117,8 @@ impl App { let orig_list = &self.main_biblio.keyword_list; let filtered_list = BibiSearch::search_tag_list(&self.search_struct.search_string, orig_list.clone()); - self.tag_list = TagList::from_iter(filtered_list) + self.tag_list.tag_list_items = filtered_list; + // self.tag_list = TagList::from_iter(filtered_list) } pub fn filter_tags_by_entries(&mut self) { @@ -124,7 +142,7 @@ impl App { filtered_keywords.dedup(); self.search_struct.filtered_tag_list = filtered_keywords.clone(); - self.tag_list = TagList::from_iter(filtered_keywords); + self.tag_list.tag_list_items = filtered_keywords; } // Filter the entry list by tags when hitting enter @@ -134,9 +152,11 @@ impl App { let orig_list = &self.entry_table.entry_table_items; let keyword = self.get_selected_tag(); let filtered_list = BibiSearch::filter_entries_by_tag(&keyword, &orig_list); + self.tag_list.selected_keyword = keyword.to_string(); self.entry_table.entry_table_items = filtered_list; self.filter_tags_by_entries(); self.toggle_area(); + self.entry_table.entry_table_state.select(Some(0)); self.former_area = Some(FormerArea::TagArea); } } |
