aboutsummaryrefslogtreecommitdiff
path: root/src/frontend/entries.rs
diff options
context:
space:
mode:
authorlukeflo2024-10-11 14:27:21 +0200
committerlukeflo2024-10-12 22:41:38 +0200
commit2fa5f8193c2cf3b75f54a37f0f7c4b5ae9d7d665 (patch)
tree483b113616c9a750f618c45ca332858d63758a9f /src/frontend/entries.rs
parent8e4bcaada27a50a83dba35deea8ad804d4bb226a (diff)
parentd9ed8fc8eaab1aa04aac031cc629d7018d513ab7 (diff)
downloadbibiman-2fa5f8193c2cf3b75f54a37f0f7c4b5ae9d7d665.tar.gz
bibiman-2fa5f8193c2cf3b75f54a37f0f7c4b5ae9d7d665.zip
Merge branch 'scrollbar'
Diffstat (limited to 'src/frontend/entries.rs')
-rw-r--r--src/frontend/entries.rs55
1 files changed, 42 insertions, 13 deletions
diff --git a/src/frontend/entries.rs b/src/frontend/entries.rs
index 1f79bf4..081de4c 100644
--- a/src/frontend/entries.rs
+++ b/src/frontend/entries.rs
@@ -22,12 +22,22 @@ 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,
+ pub entry_info_scroll: u16,
+ pub entry_info_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 +50,18 @@ 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());
+ let entry_info_scroll_state = ScrollbarState::default();
Self {
entry_table_items,
entry_table_state,
+ entry_scroll_state,
+ entry_info_scroll: 0,
+ entry_info_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 {
@@ -125,23 +133,44 @@ impl App {
// Movement
pub fn select_next_entry(&mut self) {
- self.scroll_info = 0;
+ self.entry_table.entry_info_scroll = 0;
+ self.entry_table.entry_info_scroll_state =
+ self.entry_table.entry_info_scroll_state.position(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_info_scroll = 0;
+ self.entry_table.entry_info_scroll_state =
+ self.entry_table.entry_info_scroll_state.position(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_info_scroll = 0;
+ self.entry_table.entry_info_scroll_state =
+ self.entry_table.entry_info_scroll_state.position(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_info_scroll = 0;
+ self.entry_table.entry_info_scroll_state =
+ self.entry_table.entry_info_scroll_state.position(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