diff options
| author | krolxon <krolyxon@tutanota.com> | 2024-06-07 23:49:51 +0530 |
|---|---|---|
| committer | krolxon <krolyxon@tutanota.com> | 2024-06-07 23:49:51 +0530 |
| commit | faaddc2bd752d9416798d986c9821197a13b8640 (patch) | |
| tree | 0772668386ef0c1d3b91ab149a79ab50b3f7493e | |
| parent | 53522c936d6c43e700247eb74f26389eb52882de (diff) | |
add mouse scrolling
| -rwxr-xr-x | src/app.rs | 36 | ||||
| -rwxr-xr-x | src/event/handler.rs | 18 | ||||
| -rwxr-xr-x | src/main.rs | 2 |
3 files changed, 53 insertions, 3 deletions
@@ -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<T> = std::result::Result<T, Box<dyn std::error::Error>>; @@ -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(_, _) => {} } } |
