aboutsummaryrefslogtreecommitdiff
path: root/helix-view/src/tree.rs
diff options
context:
space:
mode:
authorBlaž Hrastnik2021-03-24 05:03:20 +0000
committerBlaž Hrastnik2021-03-24 05:03:20 +0000
commitb24cdd1295d1129dc730e02da2c6723938220d7e (patch)
tree00413aa7a19bd84a59173921c4184c3e68e05d77 /helix-view/src/tree.rs
parent8328fe926d34d12031cb50db47a9dd39ed681a84 (diff)
Derive a separate ViewId type.
Diffstat (limited to 'helix-view/src/tree.rs')
-rw-r--r--helix-view/src/tree.rs34
1 files changed, 17 insertions, 17 deletions
diff --git a/helix-view/src/tree.rs b/helix-view/src/tree.rs
index e56566e3..4751f840 100644
--- a/helix-view/src/tree.rs
+++ b/helix-view/src/tree.rs
@@ -1,24 +1,24 @@
-use crate::View;
-use slotmap::{DefaultKey as Key, HopSlotMap};
+use crate::{View, ViewId};
+use slotmap::HopSlotMap;
use tui::layout::Rect;
// the dimensions are recomputed on windo resize/tree change.
//
pub struct Tree {
- root: Key,
+ root: ViewId,
// (container, index inside the container)
- pub focus: Key,
+ pub focus: ViewId,
// fullscreen: bool,
area: Rect,
- nodes: HopSlotMap<Key, Node>,
+ nodes: HopSlotMap<ViewId, Node>,
// used for traversals
- stack: Vec<(Key, Rect)>,
+ stack: Vec<(ViewId, Rect)>,
}
pub struct Node {
- parent: Key,
+ parent: ViewId,
content: Content,
}
@@ -30,14 +30,14 @@ pub enum Content {
impl Node {
pub fn container() -> Self {
Node {
- parent: Key::default(),
+ parent: ViewId::default(),
content: Content::Container(Box::new(Container::new())),
}
}
pub fn view(view: View) -> Self {
Node {
- parent: Key::default(),
+ parent: ViewId::default(),
content: Content::View(Box::new(view)),
}
}
@@ -53,7 +53,7 @@ pub enum Layout {
pub struct Container {
layout: Layout,
- children: Vec<Key>,
+ children: Vec<ViewId>,
area: Rect,
}
@@ -77,7 +77,7 @@ impl Tree {
pub fn new(area: Rect) -> Self {
let root = Node::container();
- let mut nodes = HopSlotMap::new();
+ let mut nodes = HopSlotMap::with_key();
let root = nodes.insert(root);
// root is it's own parent
@@ -93,7 +93,7 @@ impl Tree {
}
}
- pub fn insert(&mut self, view: View) -> Key {
+ pub fn insert(&mut self, view: View) -> ViewId {
let focus = self.focus;
let parent = self.nodes[focus].parent;
let mut node = Node::view(view);
@@ -131,7 +131,7 @@ impl Tree {
node
}
- pub fn remove(&mut self, index: Key) {
+ pub fn remove(&mut self, index: ViewId) {
let mut stack = Vec::new();
if self.focus == index {
@@ -188,7 +188,7 @@ impl Tree {
})
}
- pub fn get(&self, index: Key) -> &View {
+ pub fn get(&self, index: ViewId) -> &View {
match &self.nodes[index] {
Node {
content: Content::View(view),
@@ -198,7 +198,7 @@ impl Tree {
}
}
- pub fn get_mut(&mut self, index: Key) -> &mut View {
+ pub fn get_mut(&mut self, index: ViewId) -> &mut View {
match &mut self.nodes[index] {
Node {
content: Content::View(view),
@@ -355,7 +355,7 @@ impl Tree {
pub struct Traverse<'a> {
tree: &'a Tree,
- stack: Vec<Key>, // TODO: reuse the one we use on update
+ stack: Vec<ViewId>, // TODO: reuse the one we use on update
}
impl<'a> Traverse<'a> {
@@ -368,7 +368,7 @@ impl<'a> Traverse<'a> {
}
impl<'a> Iterator for Traverse<'a> {
- type Item = (Key, &'a View);
+ type Item = (ViewId, &'a View);
fn next(&mut self) -> Option<Self::Item> {
loop {