diff options
Diffstat (limited to 'src/types')
| -rw-r--r-- | src/types/mod.rs | 29 | ||||
| -rw-r--r-- | src/types/rendered_element.rs | 47 |
2 files changed, 60 insertions, 16 deletions
diff --git a/src/types/mod.rs b/src/types/mod.rs index 69df615..7a04d79 100644 --- a/src/types/mod.rs +++ b/src/types/mod.rs @@ -1,25 +1,22 @@ -use iced::{Font, Length}; +pub mod rendered_element; + +use rendered_element::RenderedElement; +use std::path::PathBuf; pub struct DesignerState { pub designer_content: Vec<RenderedElement>, pub designer_page: DesignerPage, } -pub struct RenderedElement { - pub id: String, - pub children: Vec<RenderedElement>, - pub name: ElementName, - pub props: Vec<Prop>, -} - -pub enum ElementName {} - -pub enum Prop { - String(String, String), - Decimal(String, i32), - Float(String, f32), - Font(String, Font), - Length(String, Length), +#[derive(Debug)] +pub enum ElementName { + Text(&'static str), + Button(&'static str), + SVG(PathBuf), + Image(PathBuf), + Container, + Row, + Column, } pub enum DesignerPage { diff --git a/src/types/rendered_element.rs b/src/types/rendered_element.rs new file mode 100644 index 0000000..f05594d --- /dev/null +++ b/src/types/rendered_element.rs @@ -0,0 +1,47 @@ +use std::collections::HashMap; + +use unique_id::{string::StringGenerator, Generator}; + +use iced::advanced::widget::Id; + +use super::ElementName; + +#[derive(Debug)] +pub struct RenderedElement { + pub id: Id, + pub child_elements: Vec<RenderedElement>, + pub name: ElementName, + pub props: HashMap<&'static str, &'static str>, +} + +impl RenderedElement { + pub fn new(name: ElementName) -> Self { + let gen = StringGenerator::default(); + Self { + id: Id::new(gen.next_id()), + child_elements: vec![], + name, + props: HashMap::new(), + } + } + + pub fn from_vec(name: ElementName, child_elements: Vec<RenderedElement>) -> Self { + let gen = StringGenerator::default(); + Self { + id: Id::new(gen.next_id()), + child_elements, + name, + props: HashMap::new(), + } + } + + pub fn push(mut self, element: RenderedElement) -> Self { + self.child_elements.push(element); + self + } + + pub fn set_property(&mut self, prop: &'static str, value: &'static str) { + let prop_ref = self.props.entry(prop).or_insert(value); + *prop_ref = value; + } +} |
