diff options
| author | pml68 <contact@pml68.me> | 2024-10-24 20:48:21 +0200 |
|---|---|---|
| committer | pml68 <contact@pml68.me> | 2024-10-24 21:26:29 +0200 |
| commit | bddbb502c2fed62c6d05f7ef2c9d0b76da493ab1 (patch) | |
| tree | 167dfb3c22ea581f0344e16eeb180762ad067fb5 | |
| parent | test: remove some unneeded printlns (diff) | |
| download | iced-builder-bddbb502c2fed62c6d05f7ef2c9d0b76da493ab1.tar.gz | |
feat(actions): refactor match statement, add special case for containers
When a new element is dragged on top of a container that isn't the root
element (i.e. has a parent) and said parent isn't a container either,
the element is inserted into the container's parent element.
s
Diffstat (limited to '')
| -rwxr-xr-x[-rw-r--r--] | iced_builder/src/types/rendered_element.rs | 46 |
1 files changed, 30 insertions, 16 deletions
diff --git a/iced_builder/src/types/rendered_element.rs b/iced_builder/src/types/rendered_element.rs index 336f78f..8b9b222 100644..100755 --- a/iced_builder/src/types/rendered_element.rs +++ b/iced_builder/src/types/rendered_element.rs @@ -89,9 +89,12 @@ impl RenderedElement { self.child_elements.is_some() } + pub fn is_empty(&self) -> bool { + self.child_elements == Some(vec![]) + } + pub fn remove(&mut self, element: &RenderedElement) { - let parent = self.find_parent(element); - if let Some(child_elements) = parent.unwrap().child_elements.as_mut() { + if let Some(child_elements) = self.child_elements.as_mut() { if let Some(index) = child_elements.iter().position(|x| x == element) { child_elements.remove(index); } @@ -314,27 +317,38 @@ impl ActionKind { } _ => ids.last().cloned().unwrap(), }; - let element = element_tree.as_mut().unwrap().find_by_id(id.clone()); - - match element.as_ref().unwrap().is_parent() { - true => { - let element = &element.unwrap(); - if element.name == ElementName::Container - && element.child_elements != Some(vec![]) + let element = element_tree + .as_mut() + .unwrap() + .find_by_id(id.clone()) + .unwrap(); + + match ( + element.is_parent(), + element.name == ElementName::Container && !element.is_empty(), + ) { + (true, false) => { + action = Self::PushFront(id); + } + _ if ids.len() > 2 => { + let parent = element_tree + .as_mut() + .unwrap() + .find_by_id(ids[&ids.len() - 2].clone()) + .unwrap(); + + if parent.name == ElementName::Container + && parent.child_elements != Some(vec![]) { action = Self::Stop; } else { - action = Self::PushFront(id); - } - } - false => { - if ids.len() > 2 { action = Self::InsertAfter( - ids[ids.clone().len() - 2].clone(), - ids[ids.clone().len() - 1].clone(), + ids[&ids.len() - 2].clone(), + ids[&ids.len() - 1].clone(), ); } } + _ => {} } } action |
