perf(state): const get_open
no need for additional logic, its read only anyway The only reason for this was to keep the API with less breaking changes. Performance is more important.
This commit is contained in:
+1
-1
@@ -303,7 +303,7 @@ where
|
||||
);
|
||||
let symbol = if item.children.is_empty() {
|
||||
self.node_no_children_symbol
|
||||
} else if state.opened.contains(identifier) {
|
||||
} else if state.open.contains(identifier) {
|
||||
self.node_open_symbol
|
||||
} else {
|
||||
self.node_closed_symbol
|
||||
|
||||
+15
-9
@@ -19,7 +19,7 @@ use crate::tree_item::TreeItem;
|
||||
#[derive(Debug, Default)]
|
||||
pub struct TreeState<Identifier> {
|
||||
pub(super) offset: usize,
|
||||
pub(super) opened: HashSet<Vec<Identifier>>,
|
||||
pub(super) open: HashSet<Vec<Identifier>>,
|
||||
pub(super) selected: Vec<Identifier>,
|
||||
pub(super) ensure_selected_in_view_on_next_render: bool,
|
||||
pub(super) last_biggest_index: usize,
|
||||
@@ -36,8 +36,14 @@ where
|
||||
}
|
||||
|
||||
#[must_use]
|
||||
#[deprecated = "Use self.get_open()"]
|
||||
pub fn get_all_opened(&self) -> Vec<Vec<Identifier>> {
|
||||
self.opened.iter().cloned().collect()
|
||||
self.open.iter().cloned().collect()
|
||||
}
|
||||
|
||||
#[must_use]
|
||||
pub const fn get_open(&self) -> &HashSet<Vec<Identifier>> {
|
||||
&self.open
|
||||
}
|
||||
|
||||
#[must_use]
|
||||
@@ -51,7 +57,7 @@ where
|
||||
&self,
|
||||
items: &'a [TreeItem<'a, Identifier>],
|
||||
) -> Vec<Flattened<'a, Identifier>> {
|
||||
flatten(&self.opened, items, &[])
|
||||
flatten(&self.open, items, &[])
|
||||
}
|
||||
|
||||
/// Selects the given identifier.
|
||||
@@ -79,7 +85,7 @@ where
|
||||
if identifier.is_empty() {
|
||||
false
|
||||
} else {
|
||||
self.opened.insert(identifier)
|
||||
self.open.insert(identifier)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -87,7 +93,7 @@ where
|
||||
/// Returns `true` when it was open and has been closed.
|
||||
/// Returns `false` when it was already closed.
|
||||
pub fn close(&mut self, identifier: &[Identifier]) -> bool {
|
||||
self.opened.remove(identifier)
|
||||
self.open.remove(identifier)
|
||||
}
|
||||
|
||||
/// Toggles a tree node open/close state.
|
||||
@@ -98,7 +104,7 @@ where
|
||||
pub fn toggle(&mut self, identifier: Vec<Identifier>) -> bool {
|
||||
if identifier.is_empty() {
|
||||
false
|
||||
} else if self.opened.contains(&identifier) {
|
||||
} else if self.open.contains(&identifier) {
|
||||
self.close(&identifier)
|
||||
} else {
|
||||
self.open(identifier)
|
||||
@@ -119,10 +125,10 @@ where
|
||||
///
|
||||
/// Returns `true` when any node was closed.
|
||||
pub fn close_all(&mut self) -> bool {
|
||||
if self.opened.is_empty() {
|
||||
if self.open.is_empty() {
|
||||
false
|
||||
} else {
|
||||
self.opened.clear();
|
||||
self.open.clear();
|
||||
true
|
||||
}
|
||||
}
|
||||
@@ -253,7 +259,7 @@ where
|
||||
pub fn key_left(&mut self) -> bool {
|
||||
self.ensure_selected_in_view_on_next_render = true;
|
||||
// Reimplement self.close because of multiple different borrows
|
||||
let mut changed = self.opened.remove(&self.selected);
|
||||
let mut changed = self.open.remove(&self.selected);
|
||||
if !changed {
|
||||
// Select the parent by removing the leaf from selection
|
||||
let popped = self.selected.pop();
|
||||
|
||||
Reference in New Issue
Block a user