rust_kanban/inputs/
mouse.rs

1use crossterm::event;
2use serde::{Deserialize, Serialize};
3use std::fmt::{self, Display, Formatter};
4
5#[derive(PartialEq, Eq, Clone, Copy, Hash, Debug, Serialize, Deserialize)]
6pub enum Mouse {
7    Drag(u16, u16),
8    LeftPress,
9    MiddlePress,
10    Move(u16, u16),
11    RightPress,
12    ScrollDown,
13    ScrollLeft,
14    ScrollRight,
15    ScrollUp,
16    Unknown,
17}
18
19impl Display for Mouse {
20    fn fmt(&self, f: &mut Formatter) -> fmt::Result {
21        match *self {
22            Mouse::Drag(x, y) => write!(f, "<Mouse::Drag({}, {})>", x, y),
23            Mouse::LeftPress => write!(f, "<Mouse::Left>"),
24            Mouse::MiddlePress => write!(f, "<Mouse::Middle>"),
25            Mouse::Move(x, y) => write!(f, "<Mouse::Move({}, {})>", x, y),
26            Mouse::RightPress => write!(f, "<Mouse::Right>"),
27            Mouse::ScrollDown => write!(f, "<Mouse::ScrollDown>"),
28            Mouse::ScrollLeft => write!(f, "<Mouse::Ctrl + ScrollUp>"),
29            Mouse::ScrollRight => write!(f, "<Mouse::Ctrl + ScrollDown>"),
30            Mouse::ScrollUp => write!(f, "<Mouse::ScrollUp>"),
31            Mouse::Unknown => write!(f, "<Mouse::Unknown>"),
32        }
33    }
34}
35
36impl From<event::MouseEvent> for Mouse {
37    fn from(mouse_event: event::MouseEvent) -> Self {
38        match mouse_event {
39            event::MouseEvent {
40                kind: event::MouseEventKind::Up(event::MouseButton::Left),
41                ..
42            } => Mouse::LeftPress,
43            event::MouseEvent {
44                kind: event::MouseEventKind::Up(event::MouseButton::Right),
45                ..
46            } => Mouse::RightPress,
47            event::MouseEvent {
48                kind: event::MouseEventKind::Up(event::MouseButton::Middle),
49                ..
50            } => Mouse::MiddlePress,
51            event::MouseEvent {
52                kind: event::MouseEventKind::ScrollDown,
53                modifiers: event::KeyModifiers::CONTROL,
54                ..
55            } => Mouse::ScrollLeft,
56            event::MouseEvent {
57                kind: event::MouseEventKind::ScrollUp,
58                modifiers: event::KeyModifiers::CONTROL,
59                ..
60            } => Mouse::ScrollRight,
61            event::MouseEvent {
62                kind: event::MouseEventKind::ScrollUp,
63                ..
64            } => Mouse::ScrollUp,
65            event::MouseEvent {
66                kind: event::MouseEventKind::ScrollDown,
67                ..
68            } => Mouse::ScrollDown,
69            event::MouseEvent {
70                kind: event::MouseEventKind::Moved,
71                column,
72                row,
73                ..
74            } => Mouse::Move(column, row),
75            event::MouseEvent {
76                kind: event::MouseEventKind::Drag(event::MouseButton::Left),
77                column,
78                row,
79                ..
80            } => Mouse::Drag(column, row),
81            _ => Mouse::Unknown,
82        }
83    }
84}