rust_kanban/inputs/
mouse.rs1use 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}