From 744c5cc2960cbc29802739bbb5851cfa429316b6 Mon Sep 17 00:00:00 2001 From: lancebord Date: Mon, 9 Mar 2026 00:43:26 -0400 Subject: add scroll and scroll bar indicator to members list --- src/tui/ui.rs | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) (limited to 'src/tui/ui.rs') diff --git a/src/tui/ui.rs b/src/tui/ui.rs index b026c34..05b3c9f 100644 --- a/src/tui/ui.rs +++ b/src/tui/ui.rs @@ -4,7 +4,10 @@ use ratatui::{ layout::{Constraint, Direction, Layout, Rect}, style::{Color, Modifier, Style}, text::{Line, Span, Text}, - widgets::{Block, BorderType, Borders, List, ListItem, Paragraph, Wrap}, + widgets::{ + Block, BorderType, Borders, List, ListItem, Paragraph, Scrollbar, ScrollbarOrientation, + Wrap, + }, }; use unicode_width::UnicodeWidthStr; @@ -113,8 +116,8 @@ fn draw_chat_log(f: &mut Frame, area: Rect, state: &mut AppState) { let max_offset = base_scroll as usize; // Clamp the offset and write it back so app.rs stays in sync - state.scroll_offset = state.scroll_offset.clamp(0, max_offset); - let final_scroll = (base_scroll as i32 - state.scroll_offset as i32) as u16; + state.chat_scroll = state.chat_scroll.clamp(0, max_offset); + let final_scroll = (base_scroll as i32 - state.chat_scroll as i32) as u16; f.render_widget( Paragraph::new(Text::from(padded_lines)) @@ -246,7 +249,7 @@ fn draw_input(f: &mut Frame, area: Rect, state: &AppState) { ); } -fn draw_members_panel(f: &mut Frame, area: Rect, state: &AppState) { +fn draw_members_panel(f: &mut Frame, area: Rect, state: &mut AppState) { let items: Vec = state .members .iter() @@ -281,7 +284,18 @@ fn draw_members_panel(f: &mut Frame, area: Rect, state: &AppState) { let title = format!(" users ({}) ", state.members.len()); let block = panel_block(&title); - f.render_widget(List::new(items).block(block), area); + state.members_scroll = state.members_scroll.content_length(state.members.len()); + + f.render_stateful_widget( + List::new(items).block(block), + area, + &mut state.members_list_state, + ); + f.render_stateful_widget( + Scrollbar::new(ScrollbarOrientation::VerticalRight), + area, + &mut state.members_scroll, + ); } fn draw_statusbar(f: &mut Frame, area: Rect, state: &AppState) { -- cgit v1.2.3-59-g8ed1b