1use {
2 crate::{
3 Event,
4 data::{Directory, Note},
5 state::notebook::DirectoryItem,
6 types::{DirectoryId, NoteId},
7 },
8 strum_macros::Display,
9};
10
11#[derive(Display)]
12pub enum Transition {
13 #[strum(to_string = "Keymap::{0}")]
14 Keymap(KeymapTransition),
15
16 #[strum(to_string = "Entry::{0}")]
17 Entry(EntryTransition),
18
19 #[strum(to_string = "Notebook::{0}")]
20 Notebook(NotebookTransition),
21
22 Log(String),
23 Error(String),
24}
25
26#[derive(Display)]
27pub enum KeymapTransition {
28 Show,
29 Hide,
30}
31
32#[derive(Display)]
33pub enum EntryTransition {
34 OpenNotebook,
35
36 #[strum(to_string = "Inedible::{0}")]
37 Inedible(Event),
38
39 None,
40}
41
42#[derive(Display)]
43pub enum NotebookTransition {
44 ViewMode(Note),
45 BrowseNoteTree,
46 FocusEditor,
47
48 UpdateNoteContent(NoteId),
49
50 Alert(String),
51
52 #[strum(to_string = "Inedible::{0}")]
53 Inedible(Event),
54 None,
55
56 NoteTree(NoteTreeTransition),
57 EditingNormalMode(NormalModeTransition),
58 EditingVisualMode(VisualModeTransition),
59 ShowVimKeymap(VimKeymapKind),
60}
61
62pub enum NoteTreeTransition {
63 OpenDirectory {
64 id: DirectoryId,
65 notes: Vec<Note>,
66 directories: Vec<DirectoryItem>,
67 },
68 CloseDirectory(DirectoryId),
69
70 RenameNote(Note),
71 RenameDirectory(Directory),
72
73 RemoveNote {
74 note: Note,
75 selected_directory: Directory,
76 },
77 RemoveDirectory {
78 directory: Directory,
79 selected_directory: Directory,
80 },
81
82 AddNote(Note),
83 AddDirectory(Directory),
84
85 ShowNoteActionsDialog(Note),
86 ShowDirectoryActionsDialog(Directory),
87
88 MoveMode(MoveModeTransition),
89
90 OpenNote {
91 note: Note,
92 content: String,
93 },
94
95 SelectNext(usize),
96 SelectPrev(usize),
97 SelectFirst,
98 SelectLast,
99
100 SelectNextDirectory,
101 SelectPrevDirectory,
102
103 ExpandWidth(usize),
104 ShrinkWidth(usize),
105 GatewayMode,
106}
107
108pub enum MoveModeTransition {
109 Enter,
110 SelectNext,
111 SelectPrev,
112 SelectLast,
113 RequestCommit,
114 Commit,
115 Cancel,
116}
117
118#[derive(Clone, Copy, Display)]
119pub enum VimKeymapKind {
120 NormalIdle,
121 NormalNumbering,
122 NormalDelete,
123 NormalDelete2,
124 NormalChange,
125 NormalChange2,
126 VisualIdle,
127 VisualNumbering,
128}
129
130#[derive(Display)]
131pub enum NormalModeTransition {
132 IdleMode,
133 ToggleMode,
134 ToggleTabCloseMode,
135 NumberingMode,
136 GatewayMode,
137 YankMode,
138 DeleteMode,
139 DeleteInsideMode,
140 ChangeMode,
141 ChangeInsideMode,
142 ScrollMode,
143
144 NextTab(NoteId),
146 PrevTab(NoteId),
147 CloseTab(NoteId),
148 MoveTabNext(usize),
149 MoveTabPrev(usize),
150 ToggleLineNumbers,
151 ToggleBrowser,
152
153 CloseRightTabs(usize),
155 CloseLeftTabs(usize),
156
157 MoveCursorDown(usize),
158 MoveCursorUp(usize),
159 MoveCursorBack(usize),
160 MoveCursorForward(usize),
161 MoveCursorWordForward(usize),
162 MoveCursorWordEnd(usize),
163 MoveCursorWordBack(usize),
164 MoveCursorLineStart,
165 MoveCursorLineEnd,
166 MoveCursorLineNonEmptyStart,
167 MoveCursorTop,
168 MoveCursorBottom,
169 MoveCursorToLine(usize),
170 ScrollCenter,
171 ScrollTop,
172 ScrollBottom,
173 InsertAtCursor,
174 InsertAtLineStart,
175 InsertAfterCursor,
176 InsertAtLineEnd,
177 InsertNewLineBelow,
178 InsertNewLineAbove,
179 DeleteChars(usize),
180 DeleteCharsBack(usize),
181 DeleteLines(usize),
182 DeleteLinesUp(usize),
183 DeleteLinesAndInsert(usize),
184 DeleteWordEnd(usize),
185 DeleteWordBack(usize),
186 DeleteLineStart,
187 DeleteLineEnd(usize),
188 Paste,
189 Undo,
190 Redo,
191 YankLines(usize),
192 DeleteInsideWord(usize),
193 SwitchCase,
194}
195
196#[derive(Display)]
197pub enum VisualModeTransition {
198 IdleMode,
199 NumberingMode,
200 GatewayMode,
201 MoveCursorDown(usize),
202 MoveCursorUp(usize),
203 MoveCursorBack(usize),
204 MoveCursorForward(usize),
205 MoveCursorWordForward(usize),
206 MoveCursorWordEnd(usize),
207 MoveCursorWordBack(usize),
208 MoveCursorLineStart,
209 MoveCursorLineEnd,
210 MoveCursorLineNonEmptyStart,
211 MoveCursorTop,
212 MoveCursorBottom,
213 MoveCursorToLine(usize),
214 YankSelection,
215 DeleteSelection,
216 DeleteSelectionAndInsertMode,
217 SwitchCase,
218 ToUppercase,
219 ToLowercase,
220}
221
222impl From<KeymapTransition> for Transition {
223 fn from(t: KeymapTransition) -> Self {
224 Self::Keymap(t)
225 }
226}
227
228impl From<EntryTransition> for Transition {
229 fn from(t: EntryTransition) -> Self {
230 Self::Entry(t)
231 }
232}
233
234impl From<NotebookTransition> for Transition {
235 fn from(t: NotebookTransition) -> Self {
236 Self::Notebook(t)
237 }
238}