aboutsummaryrefslogtreecommitdiff
path: root/src/frontend/entries.rs
diff options
context:
space:
mode:
authorlukeflo2024-10-09 22:22:10 +0200
committerlukeflo2024-10-12 22:41:38 +0200
commitd52b16993285f6fd98d7241689e1bd950739bb88 (patch)
tree4bbceb937aa0bae5073c88b9f24d7ed873ad004f /src/frontend/entries.rs
parent79b2434d17ce6898672d95ac89eb2b097c31a26f (diff)
downloadbibiman-d52b16993285f6fd98d7241689e1bd950739bb88.tar.gz
bibiman-d52b16993285f6fd98d7241689e1bd950739bb88.zip
simple scrollbar for entry list
Diffstat (limited to 'src/frontend/entries.rs')
-rw-r--r--src/frontend/entries.rs34
1 files changed, 25 insertions, 9 deletions
diff --git a/src/frontend/entries.rs b/src/frontend/entries.rs
index 1f79bf4..b0bb0b7 100644
--- a/src/frontend/entries.rs
+++ b/src/frontend/entries.rs
@@ -22,12 +22,20 @@ use color_eyre::eyre::{Context, Ok, Result};
use core::panic;
use editor_command::EditorBuilder;
use itertools::Itertools;
-use ratatui::widgets::TableState;
+use ratatui::widgets::{ScrollbarState, TableState};
use std::process::{Command, Stdio};
+// Define list containing entries as table
+#[derive(Debug)]
+pub struct EntryTable {
+ pub entry_table_items: Vec<EntryTableItem>,
+ pub entry_table_state: TableState,
+ pub entry_scroll_state: ScrollbarState,
+}
+
impl FromIterator<Vec<String>> for EntryTable {
fn from_iter<T: IntoIterator<Item = Vec<String>>>(iter: T) -> Self {
- let entry_table_items = iter
+ let entry_table_items: Vec<EntryTableItem> = iter
.into_iter()
.sorted()
// 0: authors, 1: title, 2: date, 3: pubtype, 4: keywords, 5: citekey
@@ -40,20 +48,15 @@ impl FromIterator<Vec<String>> for EntryTable {
})
.collect();
let entry_table_state = TableState::default().with_selected(0);
+ let entry_scroll_state = ScrollbarState::new(entry_table_items.len());
Self {
entry_table_items,
entry_table_state,
+ entry_scroll_state,
}
}
}
-// Define list containing entries as table
-#[derive(Debug)]
-pub struct EntryTable {
- pub entry_table_items: Vec<EntryTableItem>,
- pub entry_table_state: TableState,
-}
-
// Define contents of each entry table row
#[derive(Debug)]
pub struct EntryTableItem {
@@ -127,21 +130,34 @@ impl App {
pub fn select_next_entry(&mut self) {
self.scroll_info = 0;
self.entry_table.entry_table_state.select_next();
+ self.entry_table.entry_scroll_state = self
+ .entry_table
+ .entry_scroll_state
+ .position(self.entry_table.entry_table_state.selected().unwrap());
}
pub fn select_previous_entry(&mut self) {
self.scroll_info = 0;
self.entry_table.entry_table_state.select_previous();
+ self.entry_table.entry_scroll_state = self
+ .entry_table
+ .entry_scroll_state
+ .position(self.entry_table.entry_table_state.selected().unwrap());
}
pub fn select_first_entry(&mut self) {
self.scroll_info = 0;
self.entry_table.entry_table_state.select_first();
+ self.entry_table.entry_scroll_state = self.entry_table.entry_scroll_state.position(0);
}
pub fn select_last_entry(&mut self) {
self.scroll_info = 0;
self.entry_table.entry_table_state.select_last();
+ self.entry_table.entry_scroll_state = self
+ .entry_table
+ .entry_scroll_state
+ .position(self.entry_table.entry_table_items.len());
}
// Get the citekey of the selected entry