diff --git a/uidev/src/main.rs b/uidev/src/main.rs index 489031b..ad94189 100644 --- a/uidev/src/main.rs +++ b/uidev/src/main.rs @@ -18,7 +18,6 @@ use vulkano::{ sync::GpuFuture, }; use wgui::{ - assets::AssetProvider, event::{MouseButtonIndex, MouseDownEvent, MouseMotionEvent, MouseUpEvent, MouseWheelEvent}, gfx::{WGfx, cmd::WGfxClearMode}, renderer_vk::{self}, diff --git a/uidev/src/testbed/testbed_generic.rs b/uidev/src/testbed/testbed_generic.rs index 5b44483..acb8faf 100644 --- a/uidev/src/testbed/testbed_generic.rs +++ b/uidev/src/testbed/testbed_generic.rs @@ -261,7 +261,7 @@ impl TestbedGeneric { log::info!("custom attribs {:?}", custom_attribs.pairs); })), "my_context_menu", - &mut self.layout, + Default::default(), &mut data.context_menu, position, )?; diff --git a/wgui/src/parser/mod.rs b/wgui/src/parser/mod.rs index 08a56cb..3a7d95d 100644 --- a/wgui/src/parser/mod.rs +++ b/wgui/src/parser/mod.rs @@ -264,7 +264,7 @@ impl ParserState { &mut self, on_custom_attribs: Option, template_name: &str, - layout: &mut Layout, + template_params: HashMap, Rc>, context_menu: &mut context_menu::ContextMenu, position: Vec2, ) -> anyhow::Result<()> { @@ -292,6 +292,7 @@ impl ParserState { for attrib in child.attributes() { let (key, value) = (attrib.name(), attrib.value()); + match key { "text" => title = Some(Translation::from_raw_text(value)), "translation" => title = Some(Translation::from_translation_key(value)), @@ -300,7 +301,7 @@ impl ParserState { if !other.starts_with('_') { anyhow::bail!("unexpected \"{other}\" attribute"); } - attribs.push(AttribPair::new(key, value)); + attribs.push(AttribPair::new(key, replace_vars(value, &template_params))); } } } @@ -319,7 +320,7 @@ impl ParserState { } context_menu.open(context_menu::OpenParams { - data: context_menu::Blueprint { cells }, + cells, on_custom_attribs, position, }); diff --git a/wgui/src/windowing/context_menu.rs b/wgui/src/windowing/context_menu.rs index 0b5f6b3..238a594 100644 --- a/wgui/src/windowing/context_menu.rs +++ b/wgui/src/windowing/context_menu.rs @@ -1,10 +1,13 @@ -use std::{collections::HashMap, rc::Rc}; +use std::{ + collections::{HashMap, HashSet}, + rc::Rc, +}; use glam::Vec2; use crate::{ assets::AssetPath, - components::{ComponentTrait, button::ComponentButton}, + components::{button::ComponentButton, ComponentTrait}, globals::WguiGlobals, i18n::Translation, layout::Layout, @@ -19,13 +22,9 @@ pub struct Cell { pub attribs: Vec, } -pub struct Blueprint { - pub cells: Vec, -} - pub struct OpenParams { pub position: Vec2, - pub data: Blueprint, + pub cells: Vec, pub on_custom_attribs: Option, } @@ -83,7 +82,7 @@ impl ContextMenu { let id_buttons = state.get_widget_id("buttons")?; - for (idx, cell) in params.data.cells.iter().enumerate() { + for (idx, cell) in params.cells.iter().enumerate() { let mut par = HashMap::new(); par.insert(Rc::from("text"), cell.title.generate(&mut globals.i18n())); let data_cell = state.parse_template(&doc_params(&globals), "Cell", layout, id_buttons, par)?; @@ -103,7 +102,7 @@ impl ContextMenu { }); } - if idx < params.data.cells.len() - 1 { + if idx < params.cells.len() - 1 { state.parse_template( &doc_params(&globals), "Separator",