diff options
| author | Polesznyák Márk <contact@pml68.dev> | 2025-11-15 12:33:22 +0100 |
|---|---|---|
| committer | Polesznyák Márk <contact@pml68.dev> | 2025-11-15 12:33:22 +0100 |
| commit | e67680b0030a890d75ed35bc1144d1e8880dd3be (patch) | |
| tree | c465299e27a7af8a6c53d435b8301100702ef3be /src/types | |
| parent | chore: update deps (diff) | |
| download | iced-builder-e67680b0030a890d75ed35bc1144d1e8880dd3be.tar.gz | |
feat: add `Grid` as a usable widget
Diffstat (limited to '')
| -rw-r--r-- | src/types/element_name.rs | 9 | ||||
| -rwxr-xr-x | src/types/rendered_element.rs | 36 |
2 files changed, 41 insertions, 4 deletions
diff --git a/src/types/element_name.rs b/src/types/element_name.rs index c824fc5..8f8ab7e 100644 --- a/src/types/element_name.rs +++ b/src/types/element_name.rs @@ -1,7 +1,8 @@ use serde::{Deserialize, Serialize}; use super::rendered_element::{ - Action, RenderedElement, button, column, container, image, row, svg, text, + Action, RenderedElement, button, column, container, grid, image, row, svg, + text, }; use crate::Error; @@ -14,10 +15,11 @@ pub enum ElementName { Container, Row, Column, + Grid, } impl ElementName { - pub const ALL: &'static [Self; 7] = &[ + pub const ALL: &'static [Self; 8] = &[ Self::Text(String::new()), Self::Button(String::new()), Self::Svg(String::new()), @@ -25,6 +27,7 @@ impl ElementName { Self::Container, Self::Row, Self::Column, + Self::Grid, ]; pub fn handle_action( @@ -40,6 +43,7 @@ impl ElementName { Self::Container => container(None), Self::Row => row(vec![]), Self::Column => column(vec![]), + Self::Grid => grid(vec![]), }; match action { Action::Stop | Action::Drop => Ok(None), @@ -79,6 +83,7 @@ impl std::fmt::Display for ElementName { Self::Container => "Container", Self::Row => "Row", Self::Column => "Column", + Self::Grid => "Grid", } ) } diff --git a/src/types/rendered_element.rs b/src/types/rendered_element.rs index 1ad7cdf..15e851c 100755 --- a/src/types/rendered_element.rs +++ b/src/types/rendered_element.rs @@ -1,9 +1,8 @@ use std::collections::BTreeMap; -use iced::Element; use iced::advanced::widget::Id; use iced::widget::text::IntoFragment; -use iced::widget::{self}; +use iced::{Element, widget}; use serde::{Deserialize, Serialize}; use crate::Error; @@ -215,6 +214,12 @@ impl RenderedElement { imports = format!("{imports}column,"); view = format!("{view}\ncolumn![{elements}]{options}"); } + ElementName::Grid => { + imports = format!("{imports}grid,"); + view = format!( + "{view}\ngrid([{elements}].map(Into::into)){options}" + ); + } ElementName::Text(string) => { imports = format!("{imports}text,"); view = format!( @@ -389,6 +394,28 @@ impl<'a> From<RenderedElement> for Element<'a, Message> { ..Default::default() }) .into(), + ElementName::Grid => widget::container( + if !child_elements.is_empty() { + widget::grid(child_elements.into_iter().map(Into::into)) + } else { + widget::grid([text("New Column").into()]) + } + .apply_options(copy.options), + ) + .padding(20) + .style(|theme: &iced::Theme| widget::container::Style { + border: iced::Border { + color: theme.palette().warning.scale_alpha(0.6), + + width: 2.0, + radius: 4.into(), + }, + background: Some( + theme.palette().warning.scale_alpha(0.25).into(), + ), + ..Default::default() + }) + .into(), }; iced_drop::droppable(content) @@ -546,3 +573,8 @@ pub fn column(child_elements: Vec<RenderedElement>) -> RenderedElement { ], ) } + +pub fn grid(child_elements: Vec<RenderedElement>) -> RenderedElement { + RenderedElement::with(ElementName::Grid, child_elements) + .preset_options(&["spacing", "width", "height", "columns", "fluid"]) +} |
