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 DeleteLinesAndInsert(usize),
183 DeleteWordEnd(usize),
184 DeleteWordBack(usize),
185 DeleteLineStart,
186 DeleteLineEnd(usize),
187 Paste,
188 Undo,
189 Redo,
190 YankLines(usize),
191 DeleteInsideWord(usize),
192 SwitchCase,
193}
194
195#[derive(Display)]
196pub enum VisualModeTransition {
197 IdleMode,
198 NumberingMode,
199 GatewayMode,
200 MoveCursorDown(usize),
201 MoveCursorUp(usize),
202 MoveCursorBack(usize),
203 MoveCursorForward(usize),
204 MoveCursorWordForward(usize),
205 MoveCursorWordEnd(usize),
206 MoveCursorWordBack(usize),
207 MoveCursorLineStart,
208 MoveCursorLineEnd,
209 MoveCursorLineNonEmptyStart,
210 MoveCursorTop,
211 MoveCursorBottom,
212 MoveCursorToLine(usize),
213 YankSelection,
214 DeleteSelection,
215 DeleteSelectionAndInsertMode,
216 SwitchCase,
217 ToUppercase,
218 ToLowercase,
219}
220
221impl From<KeymapTransition> for Transition {
222 fn from(t: KeymapTransition) -> Self {
223 Self::Keymap(t)
224 }
225}
226
227impl From<EntryTransition> for Transition {
228 fn from(t: EntryTransition) -> Self {
229 Self::Entry(t)
230 }
231}
232
233impl From<NotebookTransition> for Transition {
234 fn from(t: NotebookTransition) -> Self {
235 Self::Notebook(t)
236 }
237}