From: Olaf Wintermann Date: Thu, 16 Apr 2026 17:03:14 +0000 (+0200) Subject: add support for integer values in tableview columns X-Git-Url: https://uap-core.de/gitweb/?a=commitdiff_plain;h=HEAD;p=note.git add support for integer values in tableview columns --- diff --git a/ui-rs/src/ui/list.rs b/ui-rs/src/ui/list.rs index cb6a14e..7398b75 100644 --- a/ui-rs/src/ui/list.rs +++ b/ui-rs/src/ui/list.rs @@ -10,7 +10,8 @@ use crate::ui::widget::{widget_typed_fn}; pub enum ListValue<'a> { None, Str(&'a str), - String(String) + String(String), + Integer(i64) } pub struct ListViewBuilder<'a, T, E> { @@ -240,7 +241,7 @@ impl<'a, T, E> ListViewBuilder<'a, T, E> { pub fn getvalue(&mut self, f: F) -> &mut Self where F: Fn(&E, i32, i32) -> ListValue<'a> + 'static { unsafe { - let wrapper = Box::new(GetValueWrapper { callback: Box::new(f) }); + let wrapper = Box::new(GetValueWrapper { callback: Box::new(f), is_table: false }); let ptr = self.obj.reg_box(wrapper); ui_list_args_set_getvalue_func2(self.args, getvalue_wrapper::); ui_list_args_set_getvalue_data(self.args, ptr as *mut c_void); @@ -418,7 +419,7 @@ impl<'a, T, E> TableViewBuilder<'a, T, E> { pub fn getvalue(&mut self, f: F) -> &mut Self where F: Fn(&E, i32, i32) -> ListValue<'a> + 'static { unsafe { - let wrapper = Box::new(GetValueWrapper { callback: Box::new(f) }); + let wrapper = Box::new(GetValueWrapper { callback: Box::new(f), is_table: true }); let ptr = self.obj.reg_box(wrapper); ui_list_args_set_getvalue_func2(self.args, getvalue_wrapper::); ui_list_args_set_getvalue_data(self.args, ptr as *mut c_void); @@ -480,8 +481,9 @@ impl Drop for TableModel { type GetValueFunc = extern "C" fn(list: *const ffi::UiList, elm_ptr: *const c_void, row: i32, col: i32, wrapper: *const c_void, free: *mut bool) -> *mut c_void; -pub struct GetValueWrapper<'a, T> { - pub callback: Box ListValue<'a>>, +struct GetValueWrapper<'a, T> { + callback: Box ListValue<'a>>, + is_table: bool } @@ -512,7 +514,15 @@ pub extern "C" fn getvalue_wrapper(_list: *const ffi::UiList, elm_ptr: *const match result { ListValue::None => std::ptr::null_mut(), ListValue::Str(s) => str_dup(s), - ListValue::String(s) => str_dup(s.as_str()) + ListValue::String(s) => str_dup(s.as_str()), + ListValue::Integer(i) => { + if wrapper.is_table { + i as *mut c_void + } else { + let s = i.to_string(); + str_dup(s.as_str()) + } + } } }