2022-11-13 15:26:25 +01:00
|
|
|
use {
|
2023-02-13 18:39:45 +01:00
|
|
|
crate::editors::list::ListCursorMode
|
2022-11-13 15:26:25 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
//<<<<>>>><<>><><<>><<<*>>><<>><><<>><<<<>>>>
|
|
|
|
|
2023-09-04 01:24:53 +02:00
|
|
|
#[derive(Clone, Eq, PartialEq, Debug)]
|
2022-11-13 15:26:25 +01:00
|
|
|
pub struct TreeCursor {
|
|
|
|
pub leaf_mode: ListCursorMode,
|
2023-09-06 04:33:21 +02:00
|
|
|
pub tree_addr: Vec<isize>
|
2022-11-13 15:26:25 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
impl TreeCursor {
|
|
|
|
pub fn home() -> Self {
|
|
|
|
TreeCursor {
|
|
|
|
leaf_mode: ListCursorMode::Insert,
|
2023-09-06 04:33:21 +02:00
|
|
|
tree_addr: vec![0],
|
2022-11-13 15:26:25 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
pub fn none() -> Self {
|
|
|
|
TreeCursor {
|
|
|
|
leaf_mode: ListCursorMode::Select,
|
|
|
|
tree_addr: vec![],
|
|
|
|
}
|
|
|
|
}
|
2023-11-11 18:00:47 +01:00
|
|
|
|
|
|
|
pub fn get_subcursor(&self, depth: usize) -> TreeCursor {
|
|
|
|
TreeCursor {
|
|
|
|
leaf_mode: self.leaf_mode,
|
|
|
|
tree_addr: if depth < self.tree_addr.len() {
|
|
|
|
self.tree_addr[ depth.. ].iter().cloned().collect()
|
|
|
|
} else {
|
|
|
|
vec![]
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2022-11-13 15:26:25 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
impl Default for TreeCursor {
|
|
|
|
fn default() -> Self {
|
|
|
|
TreeCursor::none()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|