// Layer models and z-ordering tree utilities.
///|
pub(all) struct Layer {
id : NodeID
name : String
visible : Bool
locked : Bool
children : Array[NodeID]
} derive(Eq, Debug)
///|
pub fn Layer::new(id : NodeID, name : String) -> Layer {
{ id, name, visible: true, locked: false, children: [] }
}
///|
pub fn Layer::add_node(self : Layer, node_id : NodeID) -> Unit {
self.children.push(node_id)
}
///|
pub fn Layer::remove_node(self : Layer, node_id : NodeID) -> Bool {
let mut found = false
let new_children : Array[NodeID] = []
for i = 0; i < self.children.length(); i = i + 1 {
if self.children[i] == node_id {
found = true
} else {
new_children.push(self.children[i])
}
}
if found {
self.children.clear()
for i = 0; i < new_children.length(); i = i + 1 {
self.children.push(new_children[i])
}
}
found
}
///|
pub fn Layer::move_up(self : Layer, node_id : NodeID) -> Bool {
let len = self.children.length()
for i = 0; i < len - 1; i = i + 1 {
if self.children[i] == node_id {
let tmp = self.children[i]
self.children[i] = self.children[i + 1]
self.children[i + 1] = tmp
return true
}
}
false
}
///|
pub fn Layer::move_down(self : Layer, node_id : NodeID) -> Bool {
let len = self.children.length()
for i = 1; i < len; i = i + 1 {
if self.children[i] == node_id {
let tmp = self.children[i]
self.children[i] = self.children[i - 1]
self.children[i - 1] = tmp
return true
}
}
false
}