+/* -------------------------------- 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);
+ }
+ }
+}
+
+