summaryrefslogtreecommitdiff
path: root/iced_builder
diff options
context:
space:
mode:
authorpml68 <contact@pml68.me>2024-10-24 20:48:21 +0200
committerpml68 <contact@pml68.me>2024-10-24 21:26:29 +0200
commitbddbb502c2fed62c6d05f7ef2c9d0b76da493ab1 (patch)
tree167dfb3c22ea581f0344e16eeb180762ad067fb5 /iced_builder
parenttest: remove some unneeded printlns (diff)
downloadiced-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 'iced_builder')
-rwxr-xr-x[-rw-r--r--]iced_builder/src/types/rendered_element.rs46
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