Skip to main content

tui_treelistview/
action.rs

1/// Actions that only change view state.
2#[derive(Clone, Copy, Debug, PartialEq, Eq)]
3pub enum TreeViewAction {
4    SelectPrev,
5    SelectNext,
6    SelectParent,
7    SelectFirstChild,
8    Expand,
9    Collapse,
10    ExpandOrSelectFirstChild,
11    CollapseOrSelectParent,
12    ToggleNode,
13    ToggleRecursive,
14    ExpandAll,
15    CollapseAll,
16    ToggleGuides,
17    ToggleMark,
18    SelectFirst,
19    SelectLast,
20    SelectColumnLeft,
21    SelectColumnRight,
22    SelectFirstColumn,
23    SelectLastColumn,
24    ScrollViewUp,
25    ScrollViewDown,
26    ScrollLeft,
27    ScrollRight,
28}
29
30/// High-level editing actions for the selected node.
31#[derive(Clone, Copy, Debug, PartialEq, Eq)]
32pub enum TreeEditAction {
33    ReorderUp,
34    ReorderDown,
35    AddChild,
36    Rename,
37    Detach,
38    Delete,
39    Yank,
40    Paste,
41}
42
43/// An action produced by the application or user.
44#[derive(Clone, Copy, Debug, PartialEq, Eq)]
45pub enum TreeAction<Custom = ()> {
46    View(TreeViewAction),
47    Edit(TreeEditAction),
48    Custom(Custom),
49}
50
51impl<C> From<TreeViewAction> for TreeAction<C> {
52    fn from(action: TreeViewAction) -> Self {
53        Self::View(action)
54    }
55}
56
57impl<C> From<TreeEditAction> for TreeAction<C> {
58    fn from(action: TreeEditAction) -> Self {
59        Self::Edit(action)
60    }
61}
62
63/// A typed edit request enriched with the current selection.
64#[derive(Clone, Copy, Debug, PartialEq, Eq)]
65pub enum TreeEditRequest<Id> {
66    ReorderUp { node: Id, parent: Id },
67    ReorderDown { node: Id, parent: Id },
68    AddChild { parent: Id },
69    Rename { node: Id },
70    Detach { node: Id, parent: Id },
71    Delete { node: Id },
72    Yank { node: Id },
73    Paste { parent: Id },
74}
75
76/// An intent that must be handled by the application.
77#[derive(Clone, Copy, Debug, PartialEq, Eq)]
78pub enum TreeIntent<Id, Custom = ()> {
79    LoadChildren(Id),
80    Edit(TreeEditRequest<Id>),
81    Custom(Custom),
82}
83
84/// The result of handling an action.
85#[derive(Clone, Copy, Debug, PartialEq, Eq)]
86pub enum TreeEvent<Id, Custom = ()> {
87    /// View state changed.
88    Changed,
89    /// The action was valid but did not change state.
90    Unchanged,
91    /// The application or model must perform an operation.
92    Intent(TreeIntent<Id, Custom>),
93}