diff options
| author | pml68 <contact@pml68.me> | 2024-10-20 11:51:54 +0200 |
|---|---|---|
| committer | pml68 <contact@pml68.me> | 2024-10-21 11:57:56 +0200 |
| commit | 7d241eb768a3c56d98f5d41183866fffb9ff167a (patch) | |
| tree | a47571c3ea86983050d268fade3c3101da4f7ed7 /iced_builder/src/codegen/mod.rs | |
| parent | feat: update to iced 0.13.1, basic project state file, prepare for drag&drop (diff) | |
| download | iced-builder-7d241eb768a3c56d98f5d41183866fffb9ff167a.tar.gz | |
feat: implement d&d for new elements
`ActionKind` enum to help generalize d&d actions
removed `codegen` module
small refactors
Diffstat (limited to 'iced_builder/src/codegen/mod.rs')
| -rw-r--r-- | iced_builder/src/codegen/mod.rs | 146 |
1 files changed, 0 insertions, 146 deletions
diff --git a/iced_builder/src/codegen/mod.rs b/iced_builder/src/codegen/mod.rs deleted file mode 100644 index 38e8ec3..0000000 --- a/iced_builder/src/codegen/mod.rs +++ /dev/null @@ -1,146 +0,0 @@ -use rust_format::{Config, Edition, Formatter, RustFmt}; - -use crate::{ - types::{ - project::Project, - rendered_element::{container, row, svg, text, RenderedElement}, - ElementName, - }, - Error, -}; - -impl RenderedElement { - fn props_codegen(&self) -> String { - let mut props_string = String::new(); - - for (k, v) in self.props.clone() { - if let Some(v) = v { - props_string = format!("{props_string}.{k}({v})"); - } - } - - props_string - } - - fn codegen(&self) -> (String, String) { - let mut imports = String::new(); - let mut view = String::new(); - let props = self.props_codegen(); - - let mut elements = String::new(); - - if let Some(els) = &self.child_elements { - for element in els { - let (c_imports, children) = element.codegen(); - imports = format!("{imports}{c_imports}"); - elements = format!("{elements}{},", children); - } - } - - match &self.name { - ElementName::Container => { - imports = format!("{imports}container,"); - view = format!("{view}\ncontainer({elements}){props}"); - } - ElementName::Row => { - imports = format!("{imports}row,"); - view = format!("{view}\nrow![{elements}]{props}"); - } - ElementName::Column => { - imports = format!("{imports}column,"); - view = format!("{view}\ncolumn![{elements}]{props}"); - } - ElementName::Text(string) => { - imports = format!("{imports}text,"); - view = format!( - "{view}\ntext(\"{}\"){props}", - if *string == String::new() { - "New Text" - } else { - string - } - ); - } - ElementName::Button(string) => { - imports = format!("{imports}button,"); - view = format!( - "{view}\nbutton(\"{}\"){props}", - if *string == String::new() { - "New Button" - } else { - string - } - ); - } - ElementName::Image(path) => { - imports = format!("{imports}image,"); - view = format!("{view}\nimage(\"{path}\"){props}"); - } - ElementName::SVG(path) => { - imports = format!("{imports}svg,"); - view = format!("{view}\nsvg(\"{path}\"){props}"); - } - } - - (imports, view) - } - - pub fn test() -> RenderedElement { - let mut text1 = text("wow"); - text1.option("height", "120.5"); - text1.option("width", "230"); - - let element = container(Some(row(Some(vec![ - text1, - text("heh"), - svg("/mnt/drive_d/git/obs-website/src/lib/assets/bars-solid.svg"), - ])))); - - element - } -} - -impl Project { - pub fn app_code(self) -> Result<String, Error> { - match &self.content { - Some(el) => { - let (imports, view) = el.codegen(); - let mut app_code = format!("use iced::{{widget::{{{imports}}},Element}};"); - - app_code = format!( - r#"// Automatically generated by iced Builder - {app_code} - - fn main() -> iced::Result {{ - iced::run("{}", State::update, State::view) - }} - - #[derive(Default)] - struct State; - - #[derive(Debug, Clone)] - enum Message {{}} - - impl State {{ - fn update(&mut self, _message: Message) {{}} - - fn view(&self) -> Element<Message> {{ - {view}.into() - }} - }}"#, - match &self.title { - Some(t) => t, - None => "New app", - } - ); - let config = Config::new_str() - .edition(Edition::Rust2021) - .option("trailing_comma", "Never") - .option("imports_granularity", "Crate"); - let rustfmt = RustFmt::from_config(config); - Ok(rustfmt.format_str(app_code)?) - } - None => Err("No element tree present".into()), - } - } -} |
