use bevy::prelude::*; use bevy_ratatui::event::MouseMessage; use ratatui::layout::Position; use crate::tui::{ input::{ConfirmSelect, Hovered, StartSelect}, render::PickRegion, }; pub(crate) fn mouse( mut commands: Commands, mut mouse_reader: MessageReader, mut event_writer: MessageWriter, entities: Query<(Entity, &PickRegion)>, hovered: Query<(Entity, &PickRegion), With>, startselected: Query<(Entity, &PickRegion), With>, ) { for message in mouse_reader.read() { let event = message.0; // let term_size = context.size().unwrap(); let position = Position::new(event.column, event.row); match event.kind { #[allow(clippy::single_match)] ratatui::crossterm::event::MouseEventKind::Down(mouse_button) => match mouse_button { ratatui::crossterm::event::MouseButton::Left => { for (entity, region) in &entities { if region.area.contains(position) { commands.entity(entity).insert(StartSelect); } } } // ratatui::crossterm::event::MouseButton::Right => debug!("unhandled mouse event"), // ratatui::crossterm::event::MouseButton::Middle => debug!("unhandled mouse event"), _ => {} }, ratatui::crossterm::event::MouseEventKind::Moved => { for (entity, region) in &hovered { if !region.area.contains(position) { commands.entity(entity).remove::(); } } for (entity, region) in &entities { if region.area.contains(position) { commands.entity(entity).insert(Hovered); } } } ratatui::crossterm::event::MouseEventKind::Up(mouse_button) => match mouse_button { ratatui::crossterm::event::MouseButton::Left => { for (entity, region) in &startselected { if region.area.contains(position) { commands.entity(entity).remove::(); event_writer.write(ConfirmSelect(entity)); } } } ratatui::crossterm::event::MouseButton::Right => { for (entity, _) in &startselected { commands.entity(entity).remove::(); } } // ratatui::crossterm::event::MouseButton::Middle => debug!("unhandled mouse event"), _ => {} }, ratatui::crossterm::event::MouseEventKind::Drag(mouse_button) => { // debug!("unhandled mouse event") } ratatui::crossterm::event::MouseEventKind::ScrollDown => { // debug!("unhandled mouse event") } ratatui::crossterm::event::MouseEventKind::ScrollUp => { // debug!("unhandled mouse event") } ratatui::crossterm::event::MouseEventKind::ScrollLeft => { // debug!("unhandled mouse event") } ratatui::crossterm::event::MouseEventKind::ScrollRight => { // debug!("unhandled mouse event") } } } }