aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorkrolxon <krolyxon@tutanota.com>2024-06-07 23:49:51 +0530
committerkrolxon <krolyxon@tutanota.com>2024-06-07 23:49:51 +0530
commitfaaddc2bd752d9416798d986c9821197a13b8640 (patch)
tree0772668386ef0c1d3b91ab149a79ab50b3f7493e /src
parent53522c936d6c43e700247eb74f26389eb52882de (diff)
add mouse scrolling
Diffstat (limited to 'src')
-rwxr-xr-xsrc/app.rs36
-rwxr-xr-xsrc/event/handler.rs18
-rwxr-xr-xsrc/main.rs2
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<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(_, _) => {}
}
}