// GENERATED — DO NOT EDIT

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libadwaita/doc/main/class.HeaderBar.html).
pub type HeaderBar

///|
pub(open) trait IHeaderBar {
  fn as_header_bar(Self) -> HeaderBar
  fn get_centering_policy(Self) -> CenteringPolicy = _
  fn get_decoration_layout(Self) -> String? = _
  fn get_show_back_button(Self) -> Bool = _
  fn get_show_end_title_buttons(Self) -> Bool = _
  fn get_show_start_title_buttons(Self) -> Bool = _
  fn get_show_title(Self) -> Bool = _
  fn get_title_widget(Self) -> @gtk.Widget? = _
  fn pack_end(Self, &@gtk.IWidget) -> Unit = _
  fn pack_start(Self, &@gtk.IWidget) -> Unit = _
  fn remove(Self, &@gtk.IWidget) -> Unit = _
  fn set_centering_policy(Self, CenteringPolicy) -> Unit = _
  fn set_decoration_layout(Self, String?) -> Unit = _
  fn set_show_back_button(Self, Bool) -> Unit = _
  fn set_show_end_title_buttons(Self, Bool) -> Unit = _
  fn set_show_start_title_buttons(Self, Bool) -> Unit = _
  fn set_show_title(Self, Bool) -> Unit = _
  fn set_title_widget(Self, &@gtk.IWidget?) -> Unit = _
}

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

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libadwaita/doc/main/ctor.HeaderBar.new.html).
pub extern "c" fn HeaderBar::new() -> HeaderBar = "moonbit_adw_header_bar_new"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libadwaita/doc/main/method.HeaderBar.get_centering_policy.html).
#borrow(self)
pub extern "c" fn HeaderBar::get_centering_policy(
  self : HeaderBar,
) -> CenteringPolicy = "moonbit_adw_header_bar_get_centering_policy"

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

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libadwaita/doc/main/method.HeaderBar.get_decoration_layout.html).
pub fn HeaderBar::get_decoration_layout(self : HeaderBar) -> String? {
  let result = moonbit_adw_header_bar_get_decoration_layout(self)
  match result.to_option() {
    Some(bytes) => Some(@encoding/utf8.decode_lossy(bytes))
    None => None
  }
}

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libadwaita/doc/main/method.HeaderBar.get_show_back_button.html).
#borrow(self)
pub extern "c" fn HeaderBar::get_show_back_button(self : HeaderBar) -> Bool = "moonbit_adw_header_bar_get_show_back_button"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libadwaita/doc/main/method.HeaderBar.get_show_end_title_buttons.html).
#borrow(self)
pub extern "c" fn HeaderBar::get_show_end_title_buttons(
  self : HeaderBar,
) -> Bool = "moonbit_adw_header_bar_get_show_end_title_buttons"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libadwaita/doc/main/method.HeaderBar.get_show_start_title_buttons.html).
#borrow(self)
pub extern "c" fn HeaderBar::get_show_start_title_buttons(
  self : HeaderBar,
) -> Bool = "moonbit_adw_header_bar_get_show_start_title_buttons"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libadwaita/doc/main/method.HeaderBar.get_show_title.html).
#borrow(self)
pub extern "c" fn HeaderBar::get_show_title(self : HeaderBar) -> Bool = "moonbit_adw_header_bar_get_show_title"

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

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libadwaita/doc/main/method.HeaderBar.get_title_widget.html).
pub fn HeaderBar::get_title_widget(self : HeaderBar) -> @gtk.Widget? {
  let raw_result = moonbit_adw_header_bar_get_title_widget(self)
  raw_result.to_option()
}

///|
#borrow(self_, child)
extern "c" fn moonbit_adw_header_bar_pack_end(
  self_ : HeaderBar,
  child : @gtk.Widget,
) = "moonbit_adw_header_bar_pack_end"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libadwaita/doc/main/method.HeaderBar.pack_end.html).
pub fn HeaderBar::pack_end(self : HeaderBar, child : &@gtk.IWidget) -> Unit {
  moonbit_adw_header_bar_pack_end(self, child.as_widget())
}

///|
#borrow(self_, child)
extern "c" fn moonbit_adw_header_bar_pack_start(
  self_ : HeaderBar,
  child : @gtk.Widget,
) = "moonbit_adw_header_bar_pack_start"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libadwaita/doc/main/method.HeaderBar.pack_start.html).
pub fn HeaderBar::pack_start(self : HeaderBar, child : &@gtk.IWidget) -> Unit {
  moonbit_adw_header_bar_pack_start(self, child.as_widget())
}

///|
#borrow(self_, child)
extern "c" fn moonbit_adw_header_bar_remove(
  self_ : HeaderBar,
  child : @gtk.Widget,
) = "moonbit_adw_header_bar_remove"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libadwaita/doc/main/method.HeaderBar.remove.html).
pub fn HeaderBar::remove(self : HeaderBar, child : &@gtk.IWidget) -> Unit {
  moonbit_adw_header_bar_remove(self, child.as_widget())
}

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libadwaita/doc/main/method.HeaderBar.set_centering_policy.html).
#borrow(self)
pub extern "c" fn HeaderBar::set_centering_policy(
  self : HeaderBar,
  centering_policy : CenteringPolicy,
) = "moonbit_adw_header_bar_set_centering_policy"

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

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libadwaita/doc/main/method.HeaderBar.set_decoration_layout.html).
pub fn HeaderBar::set_decoration_layout(
  self : HeaderBar,
  layout : String?,
) -> Unit {
  moonbit_adw_header_bar_set_decoration_layout(
    self,
    match layout {
      Some(s) => @glib.Nullable::some(@encoding/utf8.encode(s))
      None => @glib.Nullable::null()
    },
  )
}

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libadwaita/doc/main/method.HeaderBar.set_show_back_button.html).
#borrow(self)
pub extern "c" fn HeaderBar::set_show_back_button(
  self : HeaderBar,
  show_back_button : Bool,
) = "moonbit_adw_header_bar_set_show_back_button"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libadwaita/doc/main/method.HeaderBar.set_show_end_title_buttons.html).
#borrow(self)
pub extern "c" fn HeaderBar::set_show_end_title_buttons(
  self : HeaderBar,
  setting : Bool,
) = "moonbit_adw_header_bar_set_show_end_title_buttons"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libadwaita/doc/main/method.HeaderBar.set_show_start_title_buttons.html).
#borrow(self)
pub extern "c" fn HeaderBar::set_show_start_title_buttons(
  self : HeaderBar,
  setting : Bool,
) = "moonbit_adw_header_bar_set_show_start_title_buttons"

///|
/// [Upstream documentation](https://gnome.pages.gitlab.gnome.org/libadwaita/doc/main/method.HeaderBar.set_show_title.html).
#borrow(self)
pub extern "c" fn HeaderBar::set_show_title(
  self : HeaderBar,
  show_title : Bool,
) = "moonbit_adw_header_bar_set_show_title"

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

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

///|
impl IHeaderBar with fn get_centering_policy(self) -> CenteringPolicy {
  self.as_header_bar().get_centering_policy()
}

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

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

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

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

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

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

///|
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_centering_policy(self, centering_policy) -> Unit {
  self.as_header_bar().set_centering_policy(centering_policy)
}

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

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

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

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

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

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

///|
pub fn HeaderBar::as_gtk_widget(self : HeaderBar) -> @gtk.Widget = "%identity"

///|
pub impl @gtk.IWidget for HeaderBar with fn as_widget(self) {
  self.as_gtk_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()
}