add mouse scrolling

This commit is contained in:
krolxon 2024-06-07 23:49:51 +05:30
parent 53522c936d
commit faaddc2bd7
3 changed files with 53 additions and 3 deletions

View File

@ -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(())
}
}

View File

@ -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(())
}

View File

@ -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(_, _) => {}
}
}