From a2dc182cec0db1c6035a47cc17a853fa29ae53ab Mon Sep 17 00:00:00 2001 From: pml68 Date: Tue, 3 Sep 2024 08:29:54 +0200 Subject: feat: format children nodes into code (without props) --- Cargo.lock | 15 +++++++++++++-- Cargo.toml | 3 ++- src/codegen/mod.rs | 27 +++++++++++++++++++++++++-- src/types/mod.rs | 24 ++++++++++++------------ 4 files changed, 52 insertions(+), 17 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c877aa9..2d33a26 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1183,10 +1183,21 @@ name = "iced-builder" version = "0.1.0" dependencies = [ "iced", + "iced_aw", "rust-format", "tokio", ] +[[package]] +name = "iced_aw" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e68c330918a95bd73176206d65b84efe9aee6581da0e6dea0390cd146d7214c" +dependencies = [ + "cfg-if", + "iced", +] + [[package]] name = "iced_core" version = "0.12.3" @@ -3012,9 +3023,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.39.3" +version = "1.40.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9babc99b9923bfa4804bd74722ff02c0381021eafa4db9949217e3be8e84fff5" +checksum = "e2b070231665d27ad9ec9b8df639893f46727666c6767db40317fbe920a5d998" dependencies = [ "backtrace", "pin-project-lite", diff --git a/Cargo.toml b/Cargo.toml index 50b4017..36eabed 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,5 +10,6 @@ keywords = ["gui", "iced"] [dependencies] iced = { version = "0.12.1", features = [ "image","svg","canvas","qr_code","advanced","tokio","highlighter"] } -tokio = {version = "1.39.3",features = ["fs"]} +iced_aw = { version = "0.9.3", default-features = false, features = ["menu","color_picker"] } +tokio = { version = "1.40.0", features = ["fs"] } rust-format = "0.3.4" diff --git a/src/codegen/mod.rs b/src/codegen/mod.rs index 37ada3a..8e31dc3 100644 --- a/src/codegen/mod.rs +++ b/src/codegen/mod.rs @@ -4,12 +4,35 @@ impl RenderedElement { pub fn codegen(&self) -> Result<(String, String), &str> { let mut imports = String::new(); let mut view = String::new(); + let mut props = String::new(); + + let mut elements = String::new(); + + match self.children { + Some(els) => { + for el in els { + let mut children = String::new(); + + match el.codegen() { + Ok(e) => (children, imports) = e, + Err(err) => return Err(err), + } + elements = format!("{elements},{}", children); + } + } + None => {} + } match self.name { ElementName::Row => { - imports = format!("{imports}\nuse iced::widget::row"); - view = format!("{view}\nrow![]"); + imports = format!("{imports}\nuse iced::widget::row;"); + view = format!("{view}\nrow![{elements}]{props};"); + } + ElementName::Container => { + imports = format!("{imports}\nuse iced::widget::container;"); + view = format!("{view}\ncontainer({elements}){props};"); } + _ => {} } } } diff --git a/src/types/mod.rs b/src/types/mod.rs index 31c233d..09b0f07 100644 --- a/src/types/mod.rs +++ b/src/types/mod.rs @@ -30,18 +30,18 @@ pub enum ElementName { } pub struct Props { - align_items: Option, - align_x: Option, - align_y: Option, - horizontal_alignment: Option, - vertical_alignment: Option, - height: Option, - width: Option, - font: Option, - padding: Option, - spacing: Option, - content_fit: Option, - shaping: Option, + pub align_items: Option, + pub align_x: Option, + pub align_y: Option, + pub horizontal_alignment: Option, + pub vertical_alignment: Option, + pub height: Option, + pub width: Option, + pub font: Option, + pub padding: Option, + pub spacing: Option, + pub content_fit: Option, + pub shaping: Option, } pub enum DesignerPage { -- cgit v1.2.3