]> uap-core.de Git - note.git/commitdiff
implement toolbar content toggle button
authorOlaf Wintermann <olaf.wintermann@gmail.com>
Thu, 18 Jun 2026 17:03:38 +0000 (19:03 +0200)
committerOlaf Wintermann <olaf.wintermann@gmail.com>
Thu, 18 Jun 2026 17:03:38 +0000 (19:03 +0200)
ui-rs/src/ui/ffi.rs
ui-rs/src/ui/toolbar.rs

index 21daf48e205859786f6ab85434170821fc185290..b448364a2f889e8cdd27777239c3dc2bf8166f5a 100644 (file)
@@ -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],
index b6e4a7f7082435644e45d44810795f726f360059..7cffe1d1659df93f233f990592a1eb313790ad84 100644 (file)
@@ -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<T: UiModel + UiActions> AppContext<T> {
         }
     }
 
+    pub fn toolbar_content_toggleitem(&self, name: &str) -> ToolbarContentToggleItemBuilder<T> {
+        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<T> {
         unsafe {
             ToolbarMenuItemBuilder {
@@ -117,6 +128,13 @@ pub struct ToolbarToggleItemBuilder<T: UiModel + UiActions> {
     _marker: PhantomData<T>,
 }
 
+pub struct ToolbarContentToggleItemBuilder<T: UiModel + UiActions> {
+    args: *mut UiToolbarContentToggleItemArgs,
+    ctx: *mut ffi::UiContext,
+    name: CString,
+    _marker: PhantomData<T>,
+}
+
 pub struct ToolbarMenuItemBuilder<T: UiModel + UiActions> {
     args: *mut UiToolbarMenuArgs,
     ctx: *mut ffi::UiContext,
@@ -278,6 +296,117 @@ impl<T: UiModel + UiActions> ToolbarToggleItemBuilder<T> {
     }
 }
 
+impl<T: UiModel + UiActions> ToolbarContentToggleItemBuilder<T> {
+    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<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 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::<T>));
+            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<T: UiModel + UiActions> Drop for ToolbarMenuItemBuilder<T> {
     fn drop(&mut self) {
         unsafe {
@@ -341,6 +470,7 @@ impl<T: UiModel + UiActions> ToolbarMenuItemBuilder<T> {
 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);