summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCyandev <unixzii@gmail.com>2024-03-09 13:16:33 +0800
committerCyandev <unixzii@gmail.com>2024-03-09 13:16:33 +0800
commit120a08aefeed9581f5d9110861b15ee0cbcd5831 (patch)
treef2d5e0f39712f78c51aa6fc042df3be6ebf50f18
parentb79fde47d07a712101ab97127fc3b23acd105b13 (diff)
Add scrollbar for main list
-rw-r--r--src/interactive/widgets/entries.rs21
1 files changed, 19 insertions, 2 deletions
diff --git a/src/interactive/widgets/entries.rs b/src/interactive/widgets/entries.rs
index c4794f4..e3b6cea 100644
--- a/src/interactive/widgets/entries.rs
+++ b/src/interactive/widgets/entries.rs
@@ -11,10 +11,10 @@ use std::collections::HashSet;
use std::time::SystemTime;
use tui::{
buffer::Buffer,
- layout::Rect,
+ layout::{Margin, Rect},
style::{Color, Modifier, Style},
text::Span,
- widgets::{Block, Borders},
+ widgets::{Block, Borders, Scrollbar, ScrollbarOrientation, ScrollbarState, StatefulWidget},
};
use tui_react::util::rect::line_bound;
use tui_react::{
@@ -132,8 +132,25 @@ impl Entries {
columns_with_separators(columns, percentage_style, false)
});
+ let line_count = lines.len();
list.render(props, lines, area, buf);
+ let scrollbar = Scrollbar::default()
+ .orientation(ScrollbarOrientation::VerticalRight)
+ .begin_symbol(None)
+ .end_symbol(None);
+ let scroll_offset = selected
+ .and_then(|selected_idx| {
+ entries
+ .iter()
+ .find_position(|bundle| bundle.index == selected_idx)
+ .map(|(pos, _)| pos)
+ })
+ .unwrap_or(list.offset);
+ let mut scrollbar_state = ScrollbarState::new(line_count).position(scroll_offset);
+
+ scrollbar.render(area.inner(&Margin::new(0, 1)), buf, &mut scrollbar_state);
+
if *is_focussed {
let bound = draw_top_right_help(area, &title, buf);
draw_bottom_right_help(bound, buf);