From: Olaf Wintermann Date: Mon, 13 Apr 2026 18:01:21 +0000 (+0200) Subject: implement ToggleBuilder onchange arg X-Git-Url: https://uap-core.de/gitweb/?a=commitdiff_plain;h=bd71c0ee136c58f8eb04bc1069904190533a9372;p=note.git implement ToggleBuilder onchange arg --- diff --git a/ui-rs/src/ui/button.rs b/ui-rs/src/ui/button.rs index 1925275..8dbe4ea 100644 --- a/ui-rs/src/ui/button.rs +++ b/ui-rs/src/ui/button.rs @@ -13,11 +13,10 @@ pub struct ButtonBuilder<'a, T> { obj: &'a mut toolkit::UiObject, } -pub struct ToggleBuilder { +pub struct ToggleBuilder<'a, T> { args: *mut UiToggleArgs, - obj: *const UiObject, - create: ToggleButtonCreate, - _marker: PhantomData + obj: &'a mut toolkit::UiObject, + create: ToggleButtonCreate } pub enum LabelType { @@ -43,38 +42,38 @@ impl toolkit::UiObject { } } - pub fn togglebutton_builder(&self) -> ToggleBuilder { + pub fn togglebutton_builder<'a>(&'a mut self) -> ToggleBuilder { unsafe { let args = ui_toggle_args_new(); - ToggleBuilder { args: args, obj: self.ptr, create: togglebutton_create, _marker: PhantomData } + ToggleBuilder { args: args, obj: self, create: togglebutton_create } } } - pub fn checkbox_builder(&self) -> ToggleBuilder { + pub fn checkbox_builder<'a>(&'a mut self) -> ToggleBuilder { unsafe { let args = ui_toggle_args_new(); - ToggleBuilder { args: args, obj: self.ptr, create: checkbox_create, _marker: PhantomData } + ToggleBuilder { args: args, obj: self, create: checkbox_create } } } - pub fn switch_builder(&self) -> ToggleBuilder { + pub fn switch_builder<'a>(&'a mut self) -> ToggleBuilder { unsafe { let args = ui_toggle_args_new(); - ToggleBuilder { args: args, obj: self.ptr, create: switch_create, _marker: PhantomData } + ToggleBuilder { args: args, obj: self, create: switch_create } } } - pub fn radiobutton_builder(&self) -> ToggleBuilder { + pub fn radiobutton_builder<'a>(&'a mut self) -> ToggleBuilder { unsafe { let args = ui_toggle_args_new(); - ToggleBuilder { args: args, obj: self.ptr, create: radiobutton_create, _marker: PhantomData } + ToggleBuilder { args: args, obj: self, create: radiobutton_create } } } } -fn togglebutton_create(obj: *const UiObject, args: *const UiToggleArgs) { +fn togglebutton_create<'a>(obj: *const UiObject, args: *const UiToggleArgs) { unsafe { ui_togglebutton_create(obj, args); } @@ -106,7 +105,7 @@ impl<'a, T> Drop for ButtonBuilder<'a, T> { } } -impl Drop for ToggleBuilder { +impl<'a, T> Drop for ToggleBuilder<'a, T> { fn drop(&mut self) { unsafe { ui_toggle_args_free(self.args); @@ -272,9 +271,9 @@ impl<'a, T> ButtonBuilder<'a, T> { } } -impl ToggleBuilder { +impl<'a, T> ToggleBuilder<'a, T> { pub fn create(&mut self) { - (self.create)(self.obj, self.args) + (self.create)(self.obj.ptr, self.args) } pub fn fill(&mut self, fill: bool) -> &mut Self { @@ -430,6 +429,17 @@ impl ToggleBuilder { } } + pub fn onchange(&mut self, f: F) -> &mut Self + where F: FnMut(&mut event::Event) + 'static { + let wrapper = Box::new(EventWrapper { callback: Box::new(f) }); + let ptr = self.obj.reg_box(wrapper); + unsafe { + ui_toggle_args_set_onchange(self.args, Some(event::event_wrapper::)); + ui_toggle_args_set_onchangedata(self.args, ptr as *mut c_void); + } + self + } + // TODO: callback, states }