]> uap-core.de Git - note.git/commitdiff
add headerbar Rust wrapper main
authorOlaf Wintermann <olaf.wintermann@gmail.com>
Tue, 1 Sep 2026 18:00:44 +0000 (20:00 +0200)
committerOlaf Wintermann <olaf.wintermann@gmail.com>
Tue, 1 Sep 2026 18:00:44 +0000 (20:00 +0200)
ui-rs/src/ui/container.rs

index 3ffab1949204a4d8da2fc323ce35f9400996c7df..f2b8cb07a6c803b360434cb3c1f776b109787047 100644 (file)
@@ -237,6 +237,12 @@ pub enum TabViewType {
     Invisible = 5
 }
 
+pub enum HeaderbarAlternative {
+    Default = 0,
+    Toolbar = 1,
+    Box = 2
+}
+
 
 /* -------------------------------- Box/Grid Container -------------------------------- */
 
@@ -954,6 +960,226 @@ impl<'a, T> Drop for SplitPaneBuilder<'a, T> {
 }
 
 
+/* -------------------------------- Headerbar -------------------------------- */
+
+
+pub struct HeaderbarBuilder<'a, T> {
+    args: *mut UiHeaderbarArgs,
+    obj: &'a mut toolkit::UiObject<T>,
+}
+
+pub struct Headerbar<'a, T> {
+    obj: &'a mut toolkit::UiObject<T>,
+}
+
+
+impl<T> toolkit::UiObject<T> {
+    pub fn headerbar(&mut self) -> HeaderbarBuilder<'_, T>
+    {
+        unsafe {
+            let args = ui_headerbar_args_new();
+            HeaderbarBuilder {
+                args,
+                obj: self,
+            }
+        }
+    }
+}
+
+impl<'a, T> HeaderbarBuilder<'a, T> {
+    pub fn create<F>(&mut self, create_ui: F) -> Container
+    where F: FnOnce(&mut Headerbar<T>) {
+        unsafe {
+            let w = ui_headerbar_create(self.obj.ptr, self.args);
+            let mut headerbar = Headerbar {
+                obj: self.obj
+            };
+            create_ui(&mut headerbar);
+            ui_container_begin_close(self.obj.ptr);
+            ui_container_finish(self.obj.ptr);
+            Container {
+                ptr: w
+            }
+        }
+    }
+
+    pub fn fill(&mut self, fill: bool) -> &mut Self {
+        unsafe {
+            ui_headerbar_args_set_fill(self.args, fill as c_int);
+        }
+        self
+    }
+
+    pub fn hexpand(&mut self, value: bool) -> &mut Self {
+        unsafe {
+            ui_headerbar_args_set_hexpand(self.args, value as c_int);
+        }
+        self
+    }
+
+    pub fn vexpand(&mut self, value: bool) -> &mut Self {
+        unsafe {
+            ui_headerbar_args_set_vexpand(self.args, value as c_int);
+        }
+        self
+    }
+
+    pub fn hfill(&mut self, value: bool) -> &mut Self {
+        unsafe {
+            ui_headerbar_args_set_hfill(self.args, value as c_int);
+        }
+        self
+    }
+
+    pub fn vfill(&mut self, value: bool) -> &mut Self {
+        unsafe {
+            ui_headerbar_args_set_vfill(self.args, value as c_int);
+        }
+        self
+    }
+
+    pub fn override_defaults(&mut self, value: bool) -> &mut Self {
+        unsafe {
+            ui_headerbar_args_set_override_defaults(self.args, value as c_int);
+        }
+        self
+    }
+
+    pub fn margin(&mut self, value: i32) -> &mut Self {
+        unsafe {
+            ui_headerbar_args_set_margin(self.args, value);
+        }
+        self
+    }
+
+    pub fn margin_left(&mut self, value: i32) -> &mut Self {
+        unsafe {
+            ui_headerbar_args_set_margin_left(self.args, value);
+        }
+        self
+    }
+
+    pub fn margin_right(&mut self, value: i32) -> &mut Self {
+        unsafe {
+            ui_headerbar_args_set_margin_right(self.args, value);
+        }
+        self
+    }
+
+    pub fn margin_top(&mut self, value: i32) -> &mut Self {
+        unsafe {
+            ui_headerbar_args_set_margin_top(self.args, value);
+        }
+        self
+    }
+
+    pub fn margin_bottom(&mut self, value: i32) -> &mut Self {
+        unsafe {
+            ui_headerbar_args_set_margin_bottom(self.args, value);
+        }
+        self
+    }
+
+    pub fn colspan(&mut self, value: i32) -> &mut Self {
+        unsafe {
+            ui_headerbar_args_set_colspan(self.args, value);
+        }
+        self
+    }
+
+    pub fn rowspan(&mut self, value: i32) -> &mut Self {
+        unsafe {
+            ui_headerbar_args_set_rowspan(self.args, value);
+        }
+        self
+    }
+
+    pub fn name(&mut self, value: &str) -> &mut Self {
+        let cstr = CString::new(value).unwrap();
+        unsafe {
+            ui_headerbar_args_set_name(self.args, cstr.as_ptr());
+        }
+        self
+    }
+
+    pub fn style_class(&mut self, value: &str) -> &mut Self {
+        let cstr = CString::new(value).unwrap();
+        unsafe {
+            ui_headerbar_args_set_style_class(self.args, cstr.as_ptr());
+        }
+        self
+    }
+
+    pub fn show_title(&mut self, value: bool) -> &mut Self {
+        unsafe {
+            ui_headerbar_args_set_showtitle(self.args, value as c_int);
+        }
+        self
+    }
+
+    pub fn show_window_buttons(&mut self, value: bool) -> &mut Self {
+        unsafe {
+            ui_headerbar_args_set_showwindowbuttons(self.args, value as c_int);
+        }
+        self
+    }
+
+    pub fn alternative(&mut self, alt: HeaderbarAlternative) -> &mut Self {
+        unsafe {
+            ui_headerbar_args_set_alternative(self.args, alt as c_int);
+        }
+        self
+    }
+
+    pub fn alt_spacing(&mut self, value: i32) -> &mut Self {
+        unsafe {
+            ui_headerbar_args_set_alt_spacing(self.args, value as c_int);
+        }
+        self
+    }
+}
+
+impl<'a, T> Drop for HeaderbarBuilder<'a, T> {
+    fn drop(&mut self) {
+        unsafe {
+            ui_headerbar_args_free(self.args);
+        }
+    }
+}
+
+impl<'a, T> Headerbar<'a, T> {
+    pub fn start<F>(&mut self, create_ui: F)
+    where F: FnOnce(&mut toolkit::UiObject<T>) {
+        unsafe {
+            ui_headerbar_start_create(self.obj.ptr);
+            create_ui(&mut self.obj);
+            ui_container_begin_close(self.obj.ptr);
+            ui_container_finish(self.obj.ptr);
+        }
+    }
+
+    pub fn center<F>(&mut self, create_ui: F)
+    where F: FnOnce(&mut toolkit::UiObject<T>) {
+        unsafe {
+            ui_headerbar_center_create(self.obj.ptr);
+            create_ui(&mut self.obj);
+            ui_container_begin_close(self.obj.ptr);
+            ui_container_finish(self.obj.ptr);
+        }
+    }
+
+    pub fn end<F>(&mut self, create_ui: F)
+    where F: FnOnce(&mut toolkit::UiObject<T>) {
+        unsafe {
+            ui_headerbar_end_create(self.obj.ptr);
+            create_ui(&mut self.obj);
+            ui_container_begin_close(self.obj.ptr);
+            ui_container_finish(self.obj.ptr);
+        }
+    }
+}
+
+
 
 /* -------------------------------- Sidebar -------------------------------- */
 
@@ -1585,6 +1811,10 @@ unsafe extern "C" {
     fn ui_scrolledwindow_create(obj: *mut UiObject, args: *const UiFrameArgs) -> *mut c_void;
     fn ui_hsplitpane_create(obj: *mut UiObject, args: *const UiSplitPaneArgs) -> *mut c_void;
     fn ui_vsplitpane_create(obj: *mut UiObject, args: *const UiSplitPaneArgs) -> *mut c_void;
+    fn ui_headerbar_create(obj: *mut UiObject, args: *const UiHeaderbarArgs) -> *mut c_void;
+    fn ui_headerbar_start_create(obj: *mut UiObject);
+    fn ui_headerbar_center_create(obj: *mut UiObject);
+    fn ui_headerbar_end_create(obj: *mut UiObject);
     fn ui_sidebar_create(obj: *mut UiObject, args: *const UiSidebarArgs) -> *mut c_void;
     fn ui_left_panel_create(obj: *mut UiObject, args: *const UiSidebarArgs) -> *mut c_void;
     fn ui_right_panel_create(obj: *mut UiObject, args: *const UiSidebarArgs) -> *mut c_void;
@@ -1669,6 +1899,28 @@ unsafe extern "C" {
     fn ui_splitpane_args_set_visibility_states(args: *mut UiSplitPaneArgs, states: *const c_int, numstates: c_int);
     fn ui_splitpane_args_free(args: *mut UiSplitPaneArgs);
 
+    fn ui_headerbar_args_new() -> *mut UiHeaderbarArgs;
+    fn ui_headerbar_args_set_fill(args: *mut UiHeaderbarArgs, fill: c_int);
+    fn ui_headerbar_args_set_hexpand(args: *mut UiHeaderbarArgs, value: c_int);
+    fn ui_headerbar_args_set_vexpand(args: *mut UiHeaderbarArgs, value: c_int);
+    fn ui_headerbar_args_set_hfill(args: *mut UiHeaderbarArgs, value: c_int);
+    fn ui_headerbar_args_set_vfill(args: *mut UiHeaderbarArgs, value: c_int);
+    fn ui_headerbar_args_set_override_defaults(args: *mut UiHeaderbarArgs, value: c_int);
+    fn ui_headerbar_args_set_margin(args: *mut UiHeaderbarArgs, value: c_int);
+    fn ui_headerbar_args_set_margin_left(args: *mut UiHeaderbarArgs, value: c_int);
+    fn ui_headerbar_args_set_margin_right(args: *mut UiHeaderbarArgs, value: c_int);
+    fn ui_headerbar_args_set_margin_top(args: *mut UiHeaderbarArgs, value: c_int);
+    fn ui_headerbar_args_set_margin_bottom(args: *mut UiHeaderbarArgs, value: c_int);
+    fn ui_headerbar_args_set_colspan(args: *mut UiHeaderbarArgs, colspan: c_int);
+    fn ui_headerbar_args_set_rowspan(args: *mut UiHeaderbarArgs, rowspan: c_int);
+    fn ui_headerbar_args_set_name(args: *mut UiHeaderbarArgs, name: *const c_char);
+    fn ui_headerbar_args_set_style_class(args: *mut UiHeaderbarArgs, classname: *const c_char);
+    fn ui_headerbar_args_set_showtitle(args: *mut UiHeaderbarArgs, value: c_int);
+    fn ui_headerbar_args_set_showwindowbuttons(args: *mut UiHeaderbarArgs, value: c_int);
+    fn ui_headerbar_args_set_alternative(args: *mut UiHeaderbarArgs, alt: c_int);
+    fn ui_headerbar_args_set_alt_spacing(args: *mut UiHeaderbarArgs, spacing: c_int);
+    fn ui_headerbar_args_free(args: *mut UiHeaderbarArgs);
+
 
     fn ui_sidebar_args_new() -> *mut UiSidebarArgs;
     fn ui_sidebar_args_set_margin(args: *mut UiSidebarArgs, value: c_int);