From 4feae233603ff8935843671f4220888bd870e1f8 Mon Sep 17 00:00:00 2001 From: Olaf Wintermann Date: Sat, 23 May 2026 08:05:28 +0200 Subject: [PATCH] add listview/tableview callbacks --- ui-rs/src/ui/list.rs | 50 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 48 insertions(+), 2 deletions(-) diff --git a/ui-rs/src/ui/list.rs b/ui-rs/src/ui/list.rs index c9e7e10..1bb73b7 100644 --- a/ui-rs/src/ui/list.rs +++ b/ui-rs/src/ui/list.rs @@ -312,6 +312,28 @@ impl<'a, T, E> ListViewBuilder<'a, T, E> { self } + pub fn onactivate(&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.ctx.reg_box(wrapper); + unsafe { + ui_list_args_set_onactivate(self.args, Some(event::event_wrapper::)); + ui_list_args_set_onactivatedata(self.args, ptr as *mut c_void); + } + self + } + + pub fn onselection(&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.ctx.reg_box(wrapper); + unsafe { + ui_list_args_set_onselection(self.args, Some(event::event_wrapper::)); + 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(&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.ctx.reg_box(wrapper); + unsafe { + ui_list_args_set_onactivate(self.args, Some(event::event_wrapper::)); + ui_list_args_set_onactivatedata(self.args, ptr as *mut c_void); + } + self + } + + pub fn onselection(&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.ctx.reg_box(wrapper); + unsafe { + ui_list_args_set_onselection(self.args, Some(event::event_wrapper::)); + 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); -- 2.47.3