glues_core/
event.rs

1use {
2    crate::{
3        data::{Directory, Note},
4        types::{DirectoryId, NoteId},
5    },
6    strum_macros::Display,
7};
8
9#[derive(Clone, Debug, Display)]
10pub enum Event {
11    #[strum(to_string = "Key::{0}")]
12    Key(KeyEvent),
13
14    #[strum(to_string = "Entry::{0}")]
15    Entry(EntryEvent),
16
17    #[strum(to_string = "Notebook::{0}")]
18    Notebook(NotebookEvent),
19
20    Cancel,
21}
22
23#[derive(Clone, Debug, Display)]
24pub enum EntryEvent {
25    OpenMemory,
26    OpenCsv(String),
27    OpenJson(String),
28    OpenFile(String),
29    OpenGit {
30        path: String,
31        remote: String,
32        branch: String,
33    },
34    OpenMongo {
35        conn_str: String,
36        db_name: String,
37    },
38}
39
40#[derive(Clone, Debug, Display)]
41pub enum NotebookEvent {
42    OpenDirectory(DirectoryId),
43    CloseDirectory(DirectoryId),
44
45    SelectNote(Note),
46    SelectDirectory(Directory),
47
48    RenameNote(String),
49    RenameDirectory(String),
50
51    RemoveNote,
52    RemoveDirectory,
53
54    ShowNoteActionsDialog,
55    CloseNoteActionsDialog,
56
57    ShowDirectoryActionsDialog,
58    CloseDirectoryActionsDialog,
59
60    AddNote(String),
61    AddDirectory(String),
62
63    MoveNote(DirectoryId),
64    MoveDirectory(DirectoryId),
65
66    OpenNote,
67    EditNote,
68    ViewNote,
69
70    UpdateNoteContent { note_id: NoteId, content: String },
71
72    CloseEntryDialog,
73}
74
75#[derive(Clone, Copy, Debug, Display)]
76pub enum KeyEvent {
77    A,
78    B,
79    C,
80    D,
81    E,
82    G,
83    H,
84    I,
85    J,
86    K,
87    L,
88    M,
89    N,
90    O,
91    P,
92    S,
93    T,
94    U,
95    V,
96    W,
97    X,
98    Y,
99    Z,
100    CapA,
101    CapG,
102    CapH,
103    CapI,
104    CapJ,
105    CapK,
106    CapL,
107    CapO,
108    CapS,
109    CapU,
110    CapX,
111    CtrlH,
112    CtrlR,
113    DollarSign,
114    Caret,
115    QuestionMark,
116    AngleBracketOpen,
117    AngleBracketClose,
118    Num(NumKey),
119    Left,
120    Right,
121    Up,
122    Down,
123    Space,
124    Enter,
125    Tab,
126    Tilde,
127    Dot,
128    Dash,
129    Esc,
130}
131
132#[derive(Clone, Copy, Debug, Display)]
133pub enum NumKey {
134    One,
135    Two,
136    Three,
137    Four,
138    Five,
139    Six,
140    Seven,
141    Eight,
142    Nine,
143    Zero,
144}
145
146impl From<EntryEvent> for Event {
147    fn from(event: EntryEvent) -> Self {
148        Self::Entry(event)
149    }
150}
151
152impl From<NotebookEvent> for Event {
153    fn from(event: NotebookEvent) -> Self {
154        Self::Notebook(event)
155    }
156}
157
158impl From<KeyEvent> for Event {
159    fn from(event: KeyEvent) -> Self {
160        Self::Key(event)
161    }
162}
163
164impl From<NumKey> for KeyEvent {
165    fn from(num_key: NumKey) -> Self {
166        KeyEvent::Num(num_key)
167    }
168}
169
170impl From<NumKey> for usize {
171    fn from(num_key: NumKey) -> Self {
172        match num_key {
173            NumKey::One => 1,
174            NumKey::Two => 2,
175            NumKey::Three => 3,
176            NumKey::Four => 4,
177            NumKey::Five => 5,
178            NumKey::Six => 6,
179            NumKey::Seven => 7,
180            NumKey::Eight => 8,
181            NumKey::Nine => 9,
182            NumKey::Zero => 0,
183        }
184    }
185}
186
187impl std::ops::Add<usize> for NumKey {
188    type Output = usize;
189
190    fn add(self, rhs: usize) -> Self::Output {
191        let n = usize::from(self).saturating_add(rhs);
192
193        if n > u16::MAX as usize {
194            u16::MAX as usize
195        } else {
196            n
197        }
198    }
199}