]> uap-core.de Git - note.git/commitdiff
add listview/tableview callbacks main
authorOlaf Wintermann <olaf.wintermann@gmail.com>
Sat, 23 May 2026 06:05:28 +0000 (08:05 +0200)
committerOlaf Wintermann <olaf.wintermann@gmail.com>
Sat, 23 May 2026 06:05:28 +0000 (08:05 +0200)
ui-rs/src/ui/list.rs

index c9e7e102de74e4a52138c945f6f74d58e28e0448..1bb73b71e36652ae90f66f5941b293749c9f57db 100644 (file)
@@ -312,6 +312,28 @@ impl<'a, T, E> ListViewBuilder<'a, T, E> {
         self
     }
 
+    pub fn onactivate<F>(&mut self, f: F) -> &mut Self
+    where F: FnMut(&mut event::Event<T>) + 'static {
+        let wrapper = Box::new(EventWrapper { callback: Box::new(f) });
+        let ptr = self.obj.ctx.reg_box(wrapper);
+        unsafe {
+            ui_list_args_set_onactivate(self.args, Some(event::event_wrapper::<T>));
+            ui_list_args_set_onactivatedata(self.args, ptr as *mut c_void);
+        }
+        self
+    }
+
+    pub fn onselection<F>(&mut self, f: F) -> &mut Self
+    where F: FnMut(&mut event::Event<T>) + 'static {
+        let wrapper = Box::new(EventWrapper { callback: Box::new(f) });
+        let ptr = self.obj.ctx.reg_box(wrapper);
+        unsafe {
+            ui_list_args_set_onselection(self.args, Some(event::event_wrapper::<T>));
+            ui_list_args_set_onselectiondata(self.args, ptr as *mut c_void);
+        }
+        self
+    }
+
     pub fn multiselection(&mut self, value: bool) -> &mut Self {
         unsafe {
             ui_list_args_set_multiselection(self.args, value as c_int);
@@ -511,6 +533,28 @@ impl<'a, T, E> TableViewBuilder<'a, T, E> {
         self
     }
 
+    pub fn onactivate<F>(&mut self, f: F) -> &mut Self
+    where F: FnMut(&mut event::Event<T>) + 'static {
+        let wrapper = Box::new(EventWrapper { callback: Box::new(f) });
+        let ptr = self.obj.ctx.reg_box(wrapper);
+        unsafe {
+            ui_list_args_set_onactivate(self.args, Some(event::event_wrapper::<T>));
+            ui_list_args_set_onactivatedata(self.args, ptr as *mut c_void);
+        }
+        self
+    }
+
+    pub fn onselection<F>(&mut self, f: F) -> &mut Self
+    where F: FnMut(&mut event::Event<T>) + 'static {
+        let wrapper = Box::new(EventWrapper { callback: Box::new(f) });
+        let ptr = self.obj.ctx.reg_box(wrapper);
+        unsafe {
+            ui_list_args_set_onselection(self.args, Some(event::event_wrapper::<T>));
+            ui_list_args_set_onselectiondata(self.args, ptr as *mut c_void);
+        }
+        self
+    }
+
     pub fn multiselection(&mut self, value: bool) -> &mut Self {
         unsafe {
             ui_list_args_set_multiselection(self.args, value as c_int);
@@ -935,8 +979,10 @@ extern "C" {
     fn ui_list_args_set_rowspan(args: *mut UiListArgs, value: c_int);
     fn ui_list_args_set_name(args: *mut UiListArgs, name: *const c_char);
     fn ui_list_args_set_style_class(args: *mut UiListArgs, classname: *const c_char);
-    fn ui_list_args_set_onchange(args: *mut UiListArgs, callback: UiCallback);
-    fn ui_list_args_set_onchangedata(args: *mut UiListArgs, data: *mut c_void);
+    fn ui_list_args_set_onactivate(args: *mut UiListArgs, callback: UiCallback);
+    fn ui_list_args_set_onactivatedata(args: *mut UiListArgs, data: *mut c_void);
+    fn ui_list_args_set_onselection(args: *mut UiListArgs, callback: UiCallback);
+    fn ui_list_args_set_onselectiondata(args: *mut UiListArgs, data: *mut c_void);
     fn ui_list_args_set_varname(args: *mut UiListArgs, varname: *const c_char);
     fn ui_list_args_set_value(args: *mut UiListArgs, ivalue: *mut UiList);
     fn ui_list_args_set_model(args: *mut UiListArgs, model: *mut ffi::UiModel);