From e166d46806f8b6ccc721f71aea8dd548e90c2d80 Mon Sep 17 00:00:00 2001 From: Aleksander Date: Thu, 2 Jul 2026 10:12:44 +0200 Subject: [PATCH] Rebase main: integrate wgui changes with the new bindings ui --- .../src/tab/settings/tab_controls.rs | 12 ++-- dash-frontend/src/views/bindings.rs | 60 +++++++++---------- dash-frontend/src/views/input_profiles.rs | 11 ++-- wgui/src/parser/mod.rs | 4 ++ 4 files changed, 43 insertions(+), 44 deletions(-) diff --git a/dash-frontend/src/tab/settings/tab_controls.rs b/dash-frontend/src/tab/settings/tab_controls.rs index 57776086..715be5e1 100644 --- a/dash-frontend/src/tab/settings/tab_controls.rs +++ b/dash-frontend/src/tab/settings/tab_controls.rs @@ -1,5 +1,5 @@ -use std::{collections::HashMap, rc::Rc}; - +use std::rc::Rc; +use wgui::parser::TemplateParams; use wgui::{ components::button::ComponentButton, globals::WguiGlobals, layout::WidgetID, parser::Fetchable, task::Tasks, }; @@ -56,10 +56,10 @@ fn create_input_profiles_button( let id = mp.idx.to_string(); mp.idx += 1; - let mut params: HashMap, Rc> = HashMap::new(); - params.insert(Rc::from("id"), Rc::from(id.as_ref())); - params.insert(Rc::from("translation"), Rc::from("APP_SETTINGS.INPUT_PROFILES")); - params.insert(Rc::from("icon"), Rc::from("dashboard/controller.svg")); + let mut params = TemplateParams::new(); + params.insert("id", &id); + params.insert("translation", "APP_SETTINGS.INPUT_PROFILES"); + params.insert("icon", "dashboard/controller.svg"); mp.parser_state .instantiate_template(mp.doc_params, "ButtonText", mp.layout, parent, params)?; diff --git a/dash-frontend/src/views/bindings.rs b/dash-frontend/src/views/bindings.rs index a3724a1c..41e53e0f 100644 --- a/dash-frontend/src/views/bindings.rs +++ b/dash-frontend/src/views/bindings.rs @@ -1,6 +1,5 @@ -use std::{collections::HashMap, rc::Rc}; - use glam::Vec2; +use std::rc::Rc; use strum::EnumProperty; use wgui::{ assets::AssetPath, @@ -12,7 +11,7 @@ use wgui::{ i18n::Translation, layout::{Layout, WidgetID}, log::LogErr, - parser::{Fetchable, ParseDocumentParams, ParserState}, + parser::{Fetchable, ParseDocumentParams, ParserState, TemplateParams}, task::Tasks, widget::label::WidgetLabel, windowing::context_menu::{self, TickResult}, @@ -358,14 +357,11 @@ fn input_controls_for_action( let id = mp.idx.to_string(); mp.idx += 1; - let mut params: HashMap, Rc> = HashMap::new(); - params.insert(Rc::from("id"), Rc::from(id.as_ref())); - params.insert( - Rc::from("translation"), - Rc::from(format!( - "APP_SETTINGS.BINDINGS.ACTION.{}", - action.as_ref().to_uppercase() - )), + let mut params = TemplateParams::new(); + params.insert("id", &id); + params.insert_str( + "translation", + format!("APP_SETTINGS.BINDINGS.ACTION.{}", action.as_ref().to_uppercase()), ); mp.parser_state @@ -487,9 +483,9 @@ fn subpath_dropdown( available: Rc<[XrInputSubpathKind]>, current: Option, ) -> anyhow::Result<()> { - let mut params: HashMap, Rc> = HashMap::new(); - params.insert(Rc::from("tooltip"), Rc::from("APP_SETTINGS.BINDINGS.SUBPATH")); - params.insert(Rc::from("min_width"), Rc::from("100")); + let mut params = TemplateParams::new(); + params.insert("tooltip", "APP_SETTINGS.BINDINGS.SUBPATH"); + params.insert("min_width", "100"); // left/right hand icon wgui_simple::create_icon( @@ -520,10 +516,10 @@ fn component_dropdown( return Ok(false); } - let mut params: HashMap, Rc> = HashMap::new(); - params.insert(Rc::from("text"), Rc::from("・")); - params.insert(Rc::from("tooltip"), Rc::from("APP_SETTINGS.BINDINGS.COMPONENT")); - params.insert(Rc::from("min_width"), Rc::from("100")); + let mut params = TemplateParams::new(); + params.insert("text", "・"); + params.insert("tooltip", "APP_SETTINGS.BINDINGS.COMPONENT"); + params.insert("min_width", "100"); let current_text = current .map(|c| c.translation()) @@ -535,10 +531,10 @@ fn component_dropdown( } fn clicks_dropdown(mp: &mut MacroParams, parent: WidgetID, action: Rc, current: ClickType) -> anyhow::Result<()> { - let mut params: HashMap, Rc> = HashMap::new(); - params.insert(Rc::from("text"), Rc::from("・")); - params.insert(Rc::from("tooltip"), Rc::from("APP_SETTINGS.BINDINGS.CLICK.TYPE")); - params.insert(Rc::from("min_width"), Rc::from("100")); + let mut params = TemplateParams::new(); + params.insert("text", "・"); + params.insert("tooltip", "APP_SETTINGS.BINDINGS.CLICK.TYPE"); + params.insert("min_width", "100"); let current_text = current.translation(); let available = [ClickType::Any, ClickType::Double, ClickType::Triple].into(); @@ -559,14 +555,14 @@ fn threshold_slider( let current = current.unwrap_or(DEFAULT_BUTTON_THRESHOLDS); - let mut params: HashMap, Rc> = HashMap::new(); - params.insert(Rc::from("id"), Rc::from(id.as_ref())); - params.insert(Rc::from("tooltip"), Rc::from("APP_SETTINGS.BINDINGS.THRESHOLD")); - params.insert(Rc::from("value"), Rc::from(format!("{:.2}", current[0]))); - params.insert(Rc::from("value2"), Rc::from(format!("{:.2}", current[1]))); - params.insert(Rc::from("min"), Rc::from("0.0")); - params.insert(Rc::from("max"), Rc::from("1.0")); - params.insert(Rc::from("step"), Rc::from("0.1")); + let mut params = TemplateParams::new(); + params.insert("id", &id); + params.insert("tooltip", "APP_SETTINGS.BINDINGS.THRESHOLD"); + params.insert_str("value", format!("{:.2}", current[0])); + params.insert_str("value2", format!("{:.2}", current[1])); + params.insert("min", "0.0"); + params.insert("max", "1.0"); + params.insert("step", "0.1"); mp.parser_state .instantiate_template(mp.doc_params, "ThresholdSlider", mp.layout, parent, params)?; @@ -589,7 +585,7 @@ fn threshold_slider( fn create_dropdown( mp: &mut MacroParams, parent: WidgetID, - mut params: HashMap, Rc>, + mut params: TemplateParams, action: Rc, side: XrInputSide, current_text: Translation, @@ -597,7 +593,7 @@ fn create_dropdown( ) -> anyhow::Result<()> { let id = mp.idx.to_string(); mp.idx += 1; - params.insert(Rc::from("id"), Rc::from(id.as_ref())); + params.insert("id", &id); mp.parser_state .instantiate_template(mp.doc_params, "DropdownButton", mp.layout, parent, params)?; diff --git a/dash-frontend/src/views/input_profiles.rs b/dash-frontend/src/views/input_profiles.rs index 57698ac7..ca12b261 100644 --- a/dash-frontend/src/views/input_profiles.rs +++ b/dash-frontend/src/views/input_profiles.rs @@ -1,12 +1,11 @@ -use std::{collections::HashMap, rc::Rc}; - +use std::rc::Rc; use wgui::{ assets::AssetPath, components::button::ComponentButton, globals::WguiGlobals, i18n::Translation, layout::{Layout, WidgetID}, - parser::{Fetchable, ParseDocumentParams}, + parser::{Fetchable, ParseDocumentParams, TemplateParams}, task::Tasks, }; use wlx_common::{openxr_bindings_schema::XrControllerProfile, openxr_controller_profiles::OPENXR_INPUT_PROFILES}; @@ -73,9 +72,9 @@ impl View { for (idx, profile) in OPENXR_INPUT_PROFILES.iter().enumerate() { let id = format!("profile_btn_{idx}"); - let mut cell_params: HashMap, Rc> = HashMap::new(); - cell_params.insert(Rc::from("id"), Rc::from(id.clone())); - cell_params.insert(Rc::from("text"), Rc::from(profile.display_name)); + let mut cell_params = TemplateParams::new(); + cell_params.insert("id", &id); + cell_params.insert("text", profile.display_name); parser_state.instantiate_template( doc_params, diff --git a/wgui/src/parser/mod.rs b/wgui/src/parser/mod.rs index 432b4f03..5ffc00f0 100644 --- a/wgui/src/parser/mod.rs +++ b/wgui/src/parser/mod.rs @@ -127,6 +127,10 @@ impl TemplateParams { pub fn insert_rc(&mut self, key: &str, value: Rc) -> Option> { self.0.insert(Rc::from(key), value) } + + pub fn insert_str(&mut self, key: &str, value: String) -> Option> { + self.0.insert(Rc::from(key), value.into()) + } } impl ParserData {