// GENERATED — DO NOT EDIT

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/class.HeaderBar.html).
pub type HeaderBar

///|
pub(open) trait IHeaderBar {
  fn as_header_bar(Self) -> HeaderBar
  fn get_decoration_layout(Self) -> String? = _
  fn get_show_title_buttons(Self) -> Bool = _
  fn get_title_widget(Self) -> Widget? = _
  fn get_use_native_controls(Self) -> Bool = _
  fn pack_end(Self, &IWidget) -> Unit = _
  fn pack_start(Self, &IWidget) -> Unit = _
  fn remove(Self, &IWidget) -> Unit = _
  fn set_decoration_layout(Self, String?) -> Unit = _
  fn set_show_title_buttons(Self, Bool) -> Unit = _
  fn set_title_widget(Self, &IWidget?) -> Unit = _
  fn set_use_native_controls(Self, Bool) -> Unit = _
}

///|
pub impl IHeaderBar for HeaderBar with fn as_header_bar(self) {
  self
}

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/ctor.HeaderBar.new.html).
pub extern "c" fn HeaderBar::new() -> HeaderBar = "moonbit_gtk_header_bar_new"

///|
#borrow(self_)
extern "c" fn moonbit_gtk_header_bar_get_decoration_layout(
  self_ : HeaderBar,
) -> @glib.Nullable[Bytes] = "moonbit_gtk_header_bar_get_decoration_layout"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.HeaderBar.get_decoration_layout.html).
pub fn HeaderBar::get_decoration_layout(self : HeaderBar) -> String? {
  let result = moonbit_gtk_header_bar_get_decoration_layout(self)
  match result.to_option() {
    Some(bytes) => Some(@encoding/utf8.decode_lossy(bytes))
    None => None
  }
}

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.HeaderBar.get_show_title_buttons.html).
#borrow(self)
pub extern "c" fn HeaderBar::get_show_title_buttons(self : HeaderBar) -> Bool = "moonbit_gtk_header_bar_get_show_title_buttons"

///|
#borrow(self_)
extern "c" fn moonbit_gtk_header_bar_get_title_widget(
  self_ : HeaderBar,
) -> @glib.Nullable[Widget] = "moonbit_gtk_header_bar_get_title_widget"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.HeaderBar.get_title_widget.html).
pub fn HeaderBar::get_title_widget(self : HeaderBar) -> Widget? {
  let raw_result = moonbit_gtk_header_bar_get_title_widget(self)
  raw_result.to_option()
}

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.HeaderBar.get_use_native_controls.html).
#borrow(self)
pub extern "c" fn HeaderBar::get_use_native_controls(self : HeaderBar) -> Bool = "moonbit_gtk_header_bar_get_use_native_controls"

///|
#borrow(self_, child)
extern "c" fn moonbit_gtk_header_bar_pack_end(
  self_ : HeaderBar,
  child : Widget,
) = "moonbit_gtk_header_bar_pack_end"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.HeaderBar.pack_end.html).
pub fn HeaderBar::pack_end(self : HeaderBar, child : &IWidget) -> Unit {
  moonbit_gtk_header_bar_pack_end(self, child.as_widget())
}

///|
#borrow(self_, child)
extern "c" fn moonbit_gtk_header_bar_pack_start(
  self_ : HeaderBar,
  child : Widget,
) = "moonbit_gtk_header_bar_pack_start"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.HeaderBar.pack_start.html).
pub fn HeaderBar::pack_start(self : HeaderBar, child : &IWidget) -> Unit {
  moonbit_gtk_header_bar_pack_start(self, child.as_widget())
}

///|
#borrow(self_, child)
extern "c" fn moonbit_gtk_header_bar_remove(self_ : HeaderBar, child : Widget) = "moonbit_gtk_header_bar_remove"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.HeaderBar.remove.html).
pub fn HeaderBar::remove(self : HeaderBar, child : &IWidget) -> Unit {
  moonbit_gtk_header_bar_remove(self, child.as_widget())
}

///|
#borrow(self_, layout)
extern "c" fn moonbit_gtk_header_bar_set_decoration_layout(
  self_ : HeaderBar,
  layout : @glib.Nullable[Bytes],
) = "moonbit_gtk_header_bar_set_decoration_layout"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.HeaderBar.set_decoration_layout.html).
pub fn HeaderBar::set_decoration_layout(
  self : HeaderBar,
  layout : String?,
) -> Unit {
  moonbit_gtk_header_bar_set_decoration_layout(
    self,
    match layout {
      Some(s) => @glib.Nullable::some(@encoding/utf8.encode(s))
      None => @glib.Nullable::null()
    },
  )
}

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.HeaderBar.set_show_title_buttons.html).
#borrow(self)
pub extern "c" fn HeaderBar::set_show_title_buttons(
  self : HeaderBar,
  setting : Bool,
) = "moonbit_gtk_header_bar_set_show_title_buttons"

///|
#borrow(self_, title_widget)
extern "c" fn moonbit_gtk_header_bar_set_title_widget(
  self_ : HeaderBar,
  title_widget : @glib.Nullable[Widget],
) = "moonbit_gtk_header_bar_set_title_widget"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.HeaderBar.set_title_widget.html).
pub fn HeaderBar::set_title_widget(
  self : HeaderBar,
  title_widget : &IWidget?,
) -> Unit {
  moonbit_gtk_header_bar_set_title_widget(
    self,
    match title_widget {
      Some(v) => @glib.Nullable::some(v.as_widget())
      None => @glib.Nullable::null()
    },
  )
}

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.HeaderBar.set_use_native_controls.html).
#borrow(self)
pub extern "c" fn HeaderBar::set_use_native_controls(
  self : HeaderBar,
  setting : Bool,
) = "moonbit_gtk_header_bar_set_use_native_controls"

///|
impl IHeaderBar with fn get_decoration_layout(self) -> String? {
  self.as_header_bar().get_decoration_layout()
}

///|
impl IHeaderBar with fn get_show_title_buttons(self) -> Bool {
  self.as_header_bar().get_show_title_buttons()
}

///|
impl IHeaderBar with fn get_title_widget(self) -> Widget? {
  self.as_header_bar().get_title_widget()
}

///|
impl IHeaderBar with fn get_use_native_controls(self) -> Bool {
  self.as_header_bar().get_use_native_controls()
}

///|
impl IHeaderBar with fn pack_end(self, child) -> Unit {
  self.as_header_bar().pack_end(child)
}

///|
impl IHeaderBar with fn pack_start(self, child) -> Unit {
  self.as_header_bar().pack_start(child)
}

///|
impl IHeaderBar with fn remove(self, child) -> Unit {
  self.as_header_bar().remove(child)
}

///|
impl IHeaderBar with fn set_decoration_layout(self, layout) -> Unit {
  self.as_header_bar().set_decoration_layout(layout)
}

///|
impl IHeaderBar with fn set_show_title_buttons(self, setting) -> Unit {
  self.as_header_bar().set_show_title_buttons(setting)
}

///|
impl IHeaderBar with fn set_title_widget(self, title_widget) -> Unit {
  self.as_header_bar().set_title_widget(title_widget)
}

///|
impl IHeaderBar with fn set_use_native_controls(self, setting) -> Unit {
  self.as_header_bar().set_use_native_controls(setting)
}

///|
pub fn HeaderBar::as_widget(self : HeaderBar) -> Widget = "%identity"

///|
pub impl IWidget for HeaderBar with fn as_widget(self) {
  self.as_widget()
}

///|
pub fn HeaderBar::as_gobject_object(self : HeaderBar) -> @gobject.Object = "%identity"

///|
pub impl @gobject.IObject for HeaderBar with fn as_object(self) {
  self.as_gobject_object()
}