use {
    crate::editors::list::ListCursorMode
};

//<<<<>>>><<>><><<>><<<*>>><<>><><<>><<<<>>>>

#[derive(Clone, Eq, PartialEq, Debug)]
pub struct TreeCursor {
    pub leaf_mode: ListCursorMode,
    pub tree_addr: Vec<isize>
}

impl TreeCursor {
    pub fn home() -> Self {
        TreeCursor {
            leaf_mode: ListCursorMode::Insert,
            tree_addr: vec![0],
        }
    }

    pub fn none() -> Self {
        TreeCursor {
            leaf_mode: ListCursorMode::Select,
            tree_addr: vec![],
        }
    }

    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![]
            }
        }
    }
}

impl Default for TreeCursor {
    fn default() -> Self {
        TreeCursor::none()
    }
}