From bcc8ff10cd72bc84cc69e3c601560c4666c41c6b Mon Sep 17 00:00:00 2001 From: Olaf Wintermann Date: Tue, 31 Mar 2026 20:38:15 +0200 Subject: [PATCH] implement toggle buttons --- ui-rs/src/ui/button.rs | 52 ++++++++++++++++++++++++++++++++++-------- 1 file changed, 43 insertions(+), 9 deletions(-) diff --git a/ui-rs/src/ui/button.rs b/ui-rs/src/ui/button.rs index 412de6d..f396a9a 100644 --- a/ui-rs/src/ui/button.rs +++ b/ui-rs/src/ui/button.rs @@ -31,9 +31,13 @@ pub struct ButtonBuilder { } pub struct ToggleBuilder { - args: *mut UiToggleArgs + args: *mut UiToggleArgs, + obj: *const UiObject, + create: ToggleButtonCreate } +pub type ToggleButtonCreate = fn(*const UiObject, *const UiToggleArgs); + impl toolkit::UiObject { pub fn button(&self) -> ButtonBuilder { unsafe { @@ -42,35 +46,59 @@ impl toolkit::UiObject { } } - pub fn togglebutton() -> ToggleBuilder { + pub fn togglebutton(&self) -> ToggleBuilder { unsafe { let args = ui_toggle_args_new(); - ToggleBuilder { args: args } + ToggleBuilder { args: args, obj: self.ptr, create: togglebutton_create } } } - pub fn checkbox() -> ToggleBuilder { + pub fn checkbox(&self) -> ToggleBuilder { unsafe { let args = ui_toggle_args_new(); - ToggleBuilder { args: args } + ToggleBuilder { args: args, obj: self.ptr, create: checkbox_create } } } - pub fn switch() -> ToggleBuilder { + pub fn switch(&self) -> ToggleBuilder { unsafe { let args = ui_toggle_args_new(); - ToggleBuilder { args: args } + ToggleBuilder { args: args, obj: self.ptr, create: switch_create } } } - pub fn radiobutton() -> ToggleBuilder { + pub fn radiobutton(&self) -> ToggleBuilder { unsafe { let args = ui_toggle_args_new(); - ToggleBuilder { args: args } + ToggleBuilder { args: args, obj: self.ptr, create: radiobutton_create } } } } +fn togglebutton_create(obj: *const UiObject, args: *const UiToggleArgs) { + unsafe { + ui_togglebutton_create(obj, args); + } +} + +fn checkbox_create(obj: *const UiObject, args: *const UiToggleArgs) { + unsafe { + ui_checkbox_create(obj, args); + } +} + +fn switch_create(obj: *const UiObject, args: *const UiToggleArgs) { + unsafe { + ui_switch_create(obj, args); + } +} + +fn radiobutton_create(obj: *const UiObject, args: *const UiToggleArgs) { + unsafe { + ui_radiobutton_create(obj, args); + } +} + impl Drop for ButtonBuilder { fn drop(&mut self) { unsafe { @@ -94,3 +122,9 @@ impl ButtonBuilder { self } } + +impl ToggleBuilder { + pub fn build(self) { + (self.create)(self.obj, self.args) + } +} \ No newline at end of file -- 2.47.3