From f5c35e48c480355036778d26aacde498e5c15e68 Mon Sep 17 00:00:00 2001 From: pml68 Date: Sun, 22 Sep 2024 23:53:02 +0200 Subject: feat: restructure project, start drag and drop --- iced_builder/src/types/mod.rs | 54 ++++++++++++++++++++++++++++++ iced_builder/src/types/rendered_element.rs | 47 ++++++++++++++++++++++++++ 2 files changed, 101 insertions(+) create mode 100644 iced_builder/src/types/mod.rs create mode 100644 iced_builder/src/types/rendered_element.rs (limited to 'iced_builder/src/types') diff --git a/iced_builder/src/types/mod.rs b/iced_builder/src/types/mod.rs new file mode 100644 index 0000000..db06ffa --- /dev/null +++ b/iced_builder/src/types/mod.rs @@ -0,0 +1,54 @@ +pub mod rendered_element; + +use rendered_element::RenderedElement; + +pub struct DesignerState { + pub designer_content: Vec, + pub designer_page: DesignerPage, +} + +#[derive(Debug, Clone, Copy)] +pub enum ElementName { + Text(&'static str), + Button(&'static str), + SVG(&'static str), + Image(&'static str), + Container, + Row, + Column, +} + +impl ElementName { + pub const ALL: [Self; 7] = [ + Self::Text(""), + Self::Button(""), + Self::SVG(""), + Self::Image(""), + Self::Container, + Self::Row, + Self::Column, + ]; +} + +impl std::fmt::Display for ElementName { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!( + f, + "{}", + match self { + Self::Text(_) => "Text", + Self::Button(_) => "Button", + Self::SVG(_) => "SVG", + Self::Image(_) => "Image", + Self::Container => "Container", + Self::Row => "Row", + Self::Column => "Column", + } + ) + } +} + +pub enum DesignerPage { + Designer, + CodeView, +} diff --git a/iced_builder/src/types/rendered_element.rs b/iced_builder/src/types/rendered_element.rs new file mode 100644 index 0000000..f05594d --- /dev/null +++ b/iced_builder/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, + 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) -> 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; + } +} -- cgit v1.2.3