glues_core/
transition.rs

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    // toggle mode
145    NextTab(NoteId),
146    PrevTab(NoteId),
147    CloseTab(NoteId),
148    MoveTabNext(usize),
149    MoveTabPrev(usize),
150    ToggleLineNumbers,
151    ToggleBrowser,
152
153    // toggle tab close mode
154    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}