From faaddc2bd752d9416798d986c9821197a13b8640 Mon Sep 17 00:00:00 2001 From: krolxon Date: Fri, 7 Jun 2024 23:49:51 +0530 Subject: [PATCH] add mouse scrolling --- src/app.rs | 36 +++++++++++++++++++++++++++++++++++- src/event/handler.rs | 18 +++++++++++++++++- src/main.rs | 2 +- 3 files changed, 53 insertions(+), 3 deletions(-) diff --git a/src/app.rs b/src/app.rs index bce9b47..6df47ab 100755 --- a/src/app.rs +++ b/src/app.rs @@ -1,11 +1,12 @@ use std::{path::Path, time::Duration}; use crate::browser::FileBrowser; -use crate::utils::FileExtension; use crate::connection::Connection; use crate::list::ContentList; use crate::ui::InputMode; +use crate::utils::FileExtension; use mpd::{Client, Song}; +use ratatui::widgets::{ListState, TableState}; // Application result type pub type AppResult = std::result::Result>; @@ -386,4 +387,37 @@ impl App { } Ok(()) } + + // Mouse event handlers + pub fn handle_scroll_up(&mut self) { + match self.selected_tab { + SelectedTab::Queue => { + self.queue_list.prev(); + } + SelectedTab::DirectoryBrowser => { + self.browser.prev(); + } + SelectedTab::Playlists => { + self.pl_list.prev(); + } + } + } + + pub fn handle_scroll_down(&mut self) { + match self.selected_tab { + SelectedTab::Queue => { + self.queue_list.next(); + } + SelectedTab::DirectoryBrowser => { + self.browser.next(); + } + SelectedTab::Playlists => { + self.pl_list.next(); + } + } + } + + pub fn handle_mouse_left_click(&mut self, x: u16, y: u16) -> AppResult<()> { + Ok(()) + } } diff --git a/src/event/handler.rs b/src/event/handler.rs index b8c1a80..fcd1416 100755 --- a/src/event/handler.rs +++ b/src/event/handler.rs @@ -2,7 +2,7 @@ use crate::{ app::{App, AppResult, SelectedTab}, ui::InputMode, }; -use crossterm::event::{KeyCode, KeyEvent, KeyModifiers}; +use crossterm::event::{KeyCode, KeyEvent, KeyModifiers, MouseEvent, MouseEventKind}; use std::time::Duration; use super::{pl_append_keys, pl_rename_keys, search_keys}; @@ -297,3 +297,19 @@ pub fn handle_key_events(key_event: KeyEvent, app: &mut App) -> AppResult<()> { } Ok(()) } + +pub fn handle_mouse_events(mouse_event: MouseEvent, app: &mut App) -> AppResult<()> { + match mouse_event.kind { + MouseEventKind::ScrollUp => app.handle_scroll_up(), + MouseEventKind::ScrollDown => app.handle_scroll_down(), + MouseEventKind::Down(button) => { + let (x, y) = (mouse_event.column, mouse_event.row); + match button { + crossterm::event::MouseButton::Left => app.handle_mouse_left_click(x, y)?, + _ => {} + } + } + _ => {} + } + Ok(()) +} diff --git a/src/main.rs b/src/main.rs index 24fb3da..7564956 100755 --- a/src/main.rs +++ b/src/main.rs @@ -35,7 +35,7 @@ fn main() -> AppResult<()> { match tui.events.next()? { Event::Tick => app.tick()?, Event::Key(key_event) => handler::handle_key_events(key_event, &mut app)?, - Event::Mouse(_) => {} + Event::Mouse(mouse_event) => handler::handle_mouse_events(mouse_event, &mut app)?, Event::Resize(_, _) => {} } }