]> uap-core.de Git - note.git/commitdiff
implement toggle buttons
authorOlaf Wintermann <olaf.wintermann@gmail.com>
Tue, 31 Mar 2026 18:38:15 +0000 (20:38 +0200)
committerOlaf Wintermann <olaf.wintermann@gmail.com>
Tue, 31 Mar 2026 18:38:15 +0000 (20:38 +0200)
ui-rs/src/ui/button.rs

index 412de6d725f13592f76b05d87ba456b194153255..f396a9aee30f09570ca20ceb980a57d8cc749645 100644 (file)
@@ -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