From: Olaf Wintermann Date: Thu, 18 Jun 2026 17:03:38 +0000 (+0200) Subject: implement toolbar content toggle button X-Git-Url: https://uap-core.de/gitweb/?a=commitdiff_plain;h=666107f586cd60724778ae854341f7e184c21c17;p=note.git implement toolbar content toggle button --- diff --git a/ui-rs/src/ui/ffi.rs b/ui-rs/src/ui/ffi.rs index 21daf48..b448364 100644 --- a/ui-rs/src/ui/ffi.rs +++ b/ui-rs/src/ui/ffi.rs @@ -237,6 +237,11 @@ pub struct UiToolbarToggleItemArgs { _private: [u8; 0], } +#[repr(C)] +pub struct UiToolbarContentToggleItemArgs { + _private: [u8; 0], +} + #[repr(C)] pub struct UiToolbarMenuArgs { _private: [u8; 0], diff --git a/ui-rs/src/ui/toolbar.rs b/ui-rs/src/ui/toolbar.rs index b6e4a7f..7cffe1d 100644 --- a/ui-rs/src/ui/toolbar.rs +++ b/ui-rs/src/ui/toolbar.rs @@ -30,7 +30,7 @@ use std::ffi::{c_char, c_int, c_void, CString}; use std::marker::PhantomData; -use crate::ui::ffi::{UiCallback, UiMenuItemArgs, UiMenuToggleItemArgs, UiToolbarItemArgs, UiToolbarMenuArgs, UiToolbarToggleItemArgs}; +use crate::ui::ffi::{UiCallback, UiMenuItemArgs, UiMenuToggleItemArgs, UiToolbarContentToggleItemArgs, UiToolbarItemArgs, UiToolbarMenuArgs, UiToolbarToggleItemArgs}; use crate::ui::{event, ffi, toolkit, AppContext, EventWrapper, UiActions, UiContext, UiModel}; use crate::ui::menu::{ui_menu_end, Menu, MenuItemBuilder, ToggleItemCreate}; @@ -68,6 +68,17 @@ impl AppContext { } } + pub fn toolbar_content_toggleitem(&self, name: &str) -> ToolbarContentToggleItemBuilder { + unsafe { + ToolbarContentToggleItemBuilder { + args: ui_toolbar_content_toggleitem_args_new(), + ctx: toolkit::ui_global_context(), + name: CString::new(name).unwrap(), + _marker: PhantomData + } + } + } + pub fn toolbar_menu(&self, name: &str) -> ToolbarMenuItemBuilder { unsafe { ToolbarMenuItemBuilder { @@ -117,6 +128,13 @@ pub struct ToolbarToggleItemBuilder { _marker: PhantomData, } +pub struct ToolbarContentToggleItemBuilder { + args: *mut UiToolbarContentToggleItemArgs, + ctx: *mut ffi::UiContext, + name: CString, + _marker: PhantomData, +} + pub struct ToolbarMenuItemBuilder { args: *mut UiToolbarMenuArgs, ctx: *mut ffi::UiContext, @@ -278,6 +296,117 @@ impl ToolbarToggleItemBuilder { } } +impl ToolbarContentToggleItemBuilder { + pub fn create(&mut self) { + unsafe { + ui_toolbar_content_toggleitem_create(self.name.as_ptr(), self.args); + } + } + pub fn label0(&mut self, label: &str) -> &mut Self { + unsafe { + let cstr = CString::new(label).unwrap(); + ui_toolbar_content_toggleitem_args_set_label0(self.args, cstr.as_ptr()); + } + self + } + + pub fn icon0(&mut self, icon: &str) -> &mut Self { + unsafe { + let cstr = CString::new(icon).unwrap(); + ui_toolbar_content_toggleitem_args_set_icon0(self.args, cstr.as_ptr()); + } + self + } + + pub fn tooltip0(&mut self, tooltip: &str) -> &mut Self { + unsafe { + let cstr = CString::new(tooltip).unwrap(); + ui_toolbar_content_toggleitem_args_set_tooltip0(self.args, cstr.as_ptr()); + } + self + } + + pub fn label1(&mut self, label: &str) -> &mut Self { + unsafe { + let cstr = CString::new(label).unwrap(); + ui_toolbar_content_toggleitem_args_set_label1(self.args, cstr.as_ptr()); + } + self + } + + pub fn icon1(&mut self, icon: &str) -> &mut Self { + unsafe { + let cstr = CString::new(icon).unwrap(); + ui_toolbar_content_toggleitem_args_set_icon1(self.args, cstr.as_ptr()); + } + self + } + + pub fn tooltip1(&mut self, tooltip: &str) -> &mut Self { + unsafe { + let cstr = CString::new(tooltip).unwrap(); + ui_toolbar_content_toggleitem_args_set_tooltip1(self.args, cstr.as_ptr()); + } + self + } + + pub fn varname(&mut self, varname: &str) -> &mut Self { + unsafe { + let cstr = CString::new(varname).unwrap(); + ui_toolbar_content_toggleitem_args_set_varname(self.args, cstr.as_ptr()); + } + self + } + + pub fn action(&mut self, action: &str) -> &mut Self { + unsafe { + let cstr = CString::new(action).unwrap(); + ui_toolbar_content_toggleitem_args_set_action(self.args, cstr.as_ptr()); + } + self + } + + pub fn onchange(&mut self, f: F) -> &mut Self + where F: FnMut(&mut event::Event) + 'static { + let wrapper = Box::new(EventWrapper { callback: Box::new(f) }); + let ctx = UiContext { ptr: self.ctx }; + let ptr = ctx.reg_box(wrapper); + unsafe { + ui_toolbar_content_toggleitem_args_set_onchange(self.args, Some(event::event_wrapper::)); + ui_toolbar_content_toggleitem_args_set_onchangedata(self.args, ptr as *mut c_void); + } + self + } + + pub fn istogglebutton(&mut self, value: bool) -> &mut Self { + unsafe { + ui_toolbar_content_toggleitem_args_set_istogglebutton(self.args, value as c_int); + } + self + } + + pub fn toggled_by_state(&mut self, state: i32) -> &mut Self { + unsafe { + ui_toolbar_content_toggleitem_args_set_toggled_by_state(self.args, state as c_int); + } + self + } + + pub fn states(&mut self, states: &[i32]) -> &mut Self { + unsafe { + ui_toolbar_content_toggleitem_args_set_states(self.args, states.as_ptr(), states.len() as c_int); + } + self + } + + pub fn visibility_states(&mut self, states: &[i32]) -> &mut Self { + unsafe { + ui_toolbar_content_toggleitem_args_set_visibility_states(self.args, states.as_ptr(), states.len() as c_int); + } + self + } +} + impl Drop for ToolbarMenuItemBuilder { fn drop(&mut self) { unsafe { @@ -341,6 +470,7 @@ impl ToolbarMenuItemBuilder { unsafe extern "C" { fn ui_toolbar_item_create(name: *const c_char, args: *const UiToolbarItemArgs); fn ui_toolbar_toggleitem_create(name: *const c_char, args: *const UiToolbarToggleItemArgs); + fn ui_toolbar_content_toggleitem_create(name: *const c_char, args: *const UiToolbarContentToggleItemArgs); fn ui_toolbar_menu_create(name: *const c_char, args: *const UiToolbarMenuArgs); fn ui_toolbar_add_default(name: *const c_char, pos: c_int); @@ -367,6 +497,24 @@ unsafe extern "C" { fn ui_toolbar_toggleitem_args_set_visibility_states(args: *mut UiToolbarToggleItemArgs, states: *const c_int, numstates: c_int); fn ui_toolbar_toggleitem_args_free(args: *mut UiToolbarToggleItemArgs); + fn ui_toolbar_content_toggleitem_args_new() -> *mut UiToolbarContentToggleItemArgs; + fn ui_toolbar_content_toggleitem_args_set_label0(args: *mut UiToolbarContentToggleItemArgs, label: *const c_char); + fn ui_toolbar_content_toggleitem_args_set_icon0(args: *mut UiToolbarContentToggleItemArgs, icon: *const c_char); + fn ui_toolbar_content_toggleitem_args_set_tooltip0(args: *mut UiToolbarContentToggleItemArgs, tooltip: *const c_char); + fn ui_toolbar_content_toggleitem_args_set_label1(args: *mut UiToolbarContentToggleItemArgs, label: *const c_char); + fn ui_toolbar_content_toggleitem_args_set_icon1(args: *mut UiToolbarContentToggleItemArgs, icon: *const c_char); + fn ui_toolbar_content_toggleitem_args_set_tooltip1(args: *mut UiToolbarContentToggleItemArgs, tooltip: *const c_char); + fn ui_toolbar_content_toggleitem_args_set_action(args: *mut UiToolbarContentToggleItemArgs, action: *const c_char); + fn ui_toolbar_content_toggleitem_args_set_varname(args: *mut UiToolbarContentToggleItemArgs, varname: *const c_char); + fn ui_toolbar_content_toggleitem_args_set_onchange(args: *mut UiToolbarContentToggleItemArgs, onclick: UiCallback); + fn ui_toolbar_content_toggleitem_args_set_onchangedata(args: *mut UiToolbarContentToggleItemArgs, data: *mut c_void); + fn ui_toolbar_content_toggleitem_args_set_istogglebutton(args: *mut UiToolbarContentToggleItemArgs, value: c_int); + fn ui_toolbar_content_toggleitem_args_set_toggled_by_state(args: *mut UiToolbarContentToggleItemArgs, state: c_int); + + fn ui_toolbar_content_toggleitem_args_set_states(args: *mut UiToolbarContentToggleItemArgs, states: *const c_int, numstates: c_int); + fn ui_toolbar_content_toggleitem_args_set_visibility_states(args: *mut UiToolbarContentToggleItemArgs, states: *const c_int, numstates: c_int); + fn ui_toolbar_content_toggleitem_args_free(args: *mut UiToolbarContentToggleItemArgs); + fn ui_toolbar_menu_args_new() -> *mut UiToolbarMenuArgs; fn ui_toolbar_menu_args_set_label(args: *mut UiToolbarMenuArgs, label: *const c_char); fn ui_toolbar_menu_args_set_icon(args: *mut UiToolbarMenuArgs, icon: *const c_char);