diff options
| author | lukeflo | 2024-10-12 21:42:34 +0200 |
|---|---|---|
| committer | lukeflo | 2024-10-12 22:41:38 +0200 |
| commit | 7f13ca33714287501b203f37e61514621d9591cd (patch) | |
| tree | 23d73825a3ede741638736c97d269377151eb462 /src/frontend/entries.rs | |
| parent | 2fa5f8193c2cf3b75f54a37f0f7c4b5ae9d7d665 (diff) | |
| parent | 3ff98d4d74e1297dd71e1dd36ef49ebe2e5f1f91 (diff) | |
| download | bibiman-7f13ca33714287501b203f37e61514621d9591cd.tar.gz bibiman-7f13ca33714287501b203f37e61514621d9591cd.zip | |
Merge branch 'enhance-nested-search'
Completely reworked the search mechanism:
- Always take the current entry table as reference
- No need for many intermediate snapshots of different lists/tables
- Only single snapshot of current entry table when entering search, so deleting of chars will reshow entries
Diffstat (limited to 'src/frontend/entries.rs')
| -rw-r--r-- | src/frontend/entries.rs | 20 |
1 files changed, 7 insertions, 13 deletions
diff --git a/src/frontend/entries.rs b/src/frontend/entries.rs index 081de4c..98604f9 100644 --- a/src/frontend/entries.rs +++ b/src/frontend/entries.rs @@ -29,6 +29,7 @@ use std::process::{Command, Stdio}; #[derive(Debug)] pub struct EntryTable { pub entry_table_items: Vec<EntryTableItem>, + pub entry_table_at_search_start: Vec<EntryTableItem>, pub entry_table_state: TableState, pub entry_scroll_state: ScrollbarState, pub entry_info_scroll: u16, @@ -54,6 +55,7 @@ impl FromIterator<Vec<String>> for EntryTable { let entry_info_scroll_state = ScrollbarState::default(); Self { entry_table_items, + entry_table_at_search_start: Vec::new(), entry_table_state, entry_scroll_state, entry_info_scroll: 0, @@ -63,7 +65,7 @@ impl FromIterator<Vec<String>> for EntryTable { } // Define contents of each entry table row -#[derive(Debug)] +#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)] pub struct EntryTableItem { pub authors: String, pub title: String, @@ -248,20 +250,12 @@ impl App { // Search entry list pub fn search_entries(&mut self) { - let orig_list = { - if self.search_struct.inner_search { - let orig_list = &self.search_struct.filtered_entry_list; - orig_list - } else { - let orig_list = &self.biblio_data.entry_list.bibentries; - orig_list - } - }; + // Use snapshot of entry list saved when starting the search + // so deleting a char, will show former entries too + let orig_list = self.entry_table.entry_table_at_search_start.clone(); let filtered_list = BibiSearch::search_entry_list(&mut self.search_struct.search_string, orig_list.clone()); - //search::search_entry_list(&self.search_string, orig_list.clone()); - // self.search_struct.filtered_entry_list = filtered_list.clone(); - self.entry_table = EntryTable::from_iter(filtered_list) + self.entry_table.entry_table_items = filtered_list; } // Open file connected with entry through 'file' or 'pdf' field |
