From 87086cde68a5b573abcdf0884a2b48d0fbeafa97 Mon Sep 17 00:00:00 2001 From: pml68 Date: Wed, 25 Dec 2024 20:02:40 +0100 Subject: refactor: remove uses find_parent internally, change element_list to &[] --- iced_builder/src/main.rs | 6 +++--- iced_builder/src/types/element_name.rs | 2 +- iced_builder/src/types/rendered_element.rs | 24 +++++++++++++----------- iced_builder/src/views/element_list.rs | 4 ++-- 4 files changed, 19 insertions(+), 17 deletions(-) (limited to 'iced_builder/src') diff --git a/iced_builder/src/main.rs b/iced_builder/src/main.rs index ab708df..d428a8f 100644 --- a/iced_builder/src/main.rs +++ b/iced_builder/src/main.rs @@ -32,7 +32,7 @@ struct App { pane_state: pane_grid::State, focus: Option, designer_page: DesignerPage, - element_list: Vec, + element_list: &'static [ElementName], editor_content: text_editor::Content, } @@ -62,7 +62,7 @@ impl App { pane_state: state, focus: None, designer_page: DesignerPage::DesignerView, - element_list: ElementName::ALL.to_vec(), + element_list: ElementName::ALL, editor_content: text_editor::Content::new(), }, Task::none(), @@ -321,7 +321,7 @@ impl App { ), }, Panes::ElementList => { - element_list::view(&self.element_list, is_focused) + element_list::view(self.element_list, is_focused) } } }) diff --git a/iced_builder/src/types/element_name.rs b/iced_builder/src/types/element_name.rs index 5567cff..e172227 100644 --- a/iced_builder/src/types/element_name.rs +++ b/iced_builder/src/types/element_name.rs @@ -17,7 +17,7 @@ pub enum ElementName { } impl ElementName { - pub const ALL: [Self; 7] = [ + pub const ALL: &'static [Self; 7] = &[ Self::Text(String::new()), Self::Button(String::new()), Self::SVG(String::new()), diff --git a/iced_builder/src/types/rendered_element.rs b/iced_builder/src/types/rendered_element.rs index 35198a1..d4d1a6c 100755 --- a/iced_builder/src/types/rendered_element.rs +++ b/iced_builder/src/types/rendered_element.rs @@ -95,7 +95,8 @@ impl RenderedElement { } pub fn remove(&mut self, element: &RenderedElement) { - if let Some(child_elements) = self.child_elements.as_mut() { + let parent = self.find_parent(element).unwrap(); + if let Some(child_elements) = parent.child_elements.as_mut() { if let Some(index) = child_elements.iter().position(|x| x == element) { @@ -132,8 +133,7 @@ impl RenderedElement { match action { Action::Stop => Ok(()), Action::Drop => { - let parent = element_tree.find_parent(self).unwrap(); - parent.remove(self); + element_tree.remove(self); Ok(()) } @@ -141,8 +141,7 @@ impl RenderedElement { "the action was of kind `AddNew`, but invoking it on an existing element tree is not possible".into(), ), Action::PushFront(id) => { - let old_parent = element_tree.find_parent(self).unwrap(); - old_parent.remove(self); + element_tree.remove(self); let new_parent = element_tree.find_by_id(id).unwrap(); new_parent.push_front(self); @@ -150,8 +149,7 @@ impl RenderedElement { Ok(()) } Action::InsertAfter(parent_id, target_id) => { - let old_parent = element_tree.find_parent(self).unwrap(); - old_parent.remove(self); + element_tree.remove(self); let new_parent = element_tree.find_by_id(parent_id).unwrap(); new_parent.insert_after(target_id, self); @@ -161,9 +159,9 @@ impl RenderedElement { } } - fn preset_options(mut self, options: Vec<&str>) -> Self { + fn preset_options<'a>(mut self, options: &[&'a str]) -> Self { for opt in options { - let _ = self.options.insert(opt.to_owned(), None); + let _ = self.options.insert(opt.to_string(), None); } self } @@ -445,8 +443,12 @@ impl Action { } pub fn text(text: &str) -> RenderedElement { - RenderedElement::new(ElementName::Text(text.to_owned())) - .preset_options(vec!["size", "line_height", "width", "height"]) + RenderedElement::new(ElementName::Text(text.to_owned())).preset_options(&[ + "size", + "line_height", + "width", + "height", + ]) } pub fn button(text: &str) -> RenderedElement { diff --git a/iced_builder/src/views/element_list.rs b/iced_builder/src/views/element_list.rs index 0a75a93..74188af 100644 --- a/iced_builder/src/views/element_list.rs +++ b/iced_builder/src/views/element_list.rs @@ -5,7 +5,7 @@ use iced_drop::droppable; use super::style; use crate::types::{ElementName, Message}; -fn items_list_view<'a>(items: &'a Vec) -> Element<'a, Message> { +fn items_list_view<'a>(items: &'a [ElementName]) -> Element<'a, Message> { let mut column = Column::new() .spacing(20) .align_x(Alignment::Center) @@ -27,7 +27,7 @@ fn items_list_view<'a>(items: &'a Vec) -> Element<'a, Message> { } pub fn view<'a>( - element_list: &'a Vec, + element_list: &'a [ElementName], is_focused: bool, ) -> pane_grid::Content<'a, Message> { let items_list = items_list_view(element_list); -- cgit v1.2.3