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    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}