mod component_button; mod component_checkbox; mod component_slider; mod style; mod widget_div; mod widget_label; mod widget_rectangle; mod widget_sprite; use crate::{ assets::AssetProvider, components::{Component, ComponentTrait, ComponentWeak}, drawing::{self}, event::EventListenerCollection, globals::WguiGlobals, layout::{Layout, LayoutState, Widget, WidgetID, WidgetMap}, parser::{ component_button::parse_component_button, component_checkbox::parse_component_checkbox, component_slider::parse_component_slider, widget_div::parse_widget_div, widget_label::parse_widget_label, widget_rectangle::parse_widget_rectangle, widget_sprite::parse_widget_sprite, }, }; use ouroboros::self_referencing; use std::{ cell::RefMut, collections::HashMap, path::{Path, PathBuf}, rc::Rc, }; #[self_referencing] struct XmlDocument { xml: String, #[borrows(xml)] #[covariant] doc: roxmltree::Document<'this>, } pub struct Template { node_document: Rc, node: roxmltree::NodeId, // belongs to node_document which could be included in another file } struct ParserFile { path: PathBuf, document: Rc, template_parameters: HashMap, Rc>, } /* WARNING: this struct could contain valid components with already bound listener handles. Make sure to store them somewhere in your code. */ #[derive(Default)] pub struct ParserState { pub ids: HashMap, WidgetID>, macro_attribs: HashMap, MacroAttribs>, pub var_map: HashMap, Rc>, pub components: Vec, pub components_id_map: HashMap, std::rc::Weak>, pub templates: HashMap, Rc