// GENERATED — DO NOT EDIT

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

///|
pub(open) trait IApplicationWindow {
  fn as_application_window(Self) -> ApplicationWindow
  fn get_id(Self) -> UInt = _
  fn get_show_menubar(Self) -> Bool = _
  fn set_show_menubar(Self, Bool) -> Unit = _
}

///|
pub impl IApplicationWindow for ApplicationWindow with fn as_application_window(
  self,
) {
  self
}

///|
#borrow(application)
extern "c" fn moonbit_gtk_application_window_new(
  application : Application,
) -> ApplicationWindow = "moonbit_gtk_application_window_new"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/ctor.ApplicationWindow.new.html).
pub fn ApplicationWindow::new(application : &IApplication) -> ApplicationWindow {
  moonbit_gtk_application_window_new(application.as_application())
}

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.ApplicationWindow.get_id.html).
#borrow(self)
pub extern "c" fn ApplicationWindow::get_id(self : ApplicationWindow) -> UInt = "moonbit_gtk_application_window_get_id"

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

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.ApplicationWindow.set_show_menubar.html).
#borrow(self)
pub extern "c" fn ApplicationWindow::set_show_menubar(
  self : ApplicationWindow,
  show_menubar : Bool,
) = "moonbit_gtk_application_window_set_show_menubar"

///|
impl IApplicationWindow with fn get_id(self) -> UInt {
  self.as_application_window().get_id()
}

///|
impl IApplicationWindow with fn get_show_menubar(self) -> Bool {
  self.as_application_window().get_show_menubar()
}

///|
impl IApplicationWindow with fn set_show_menubar(self, show_menubar) -> Unit {
  self.as_application_window().set_show_menubar(show_menubar)
}

///|
pub fn ApplicationWindow::as_window(self : ApplicationWindow) -> Window = "%identity"

///|
pub impl IWindow for ApplicationWindow with fn as_window(self) {
  self.as_window()
}

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

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

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

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

///|
pub fn ApplicationWindow::as_gio_action_group(
  self : ApplicationWindow,
) -> @gio.ActionGroup = "%identity"

///|
pub impl @gio.IActionGroup for ApplicationWindow with fn as_action_group(self) {
  self.as_gio_action_group()
}

///|
pub fn ApplicationWindow::as_native(self : ApplicationWindow) -> Native = "%identity"

///|
pub impl INative for ApplicationWindow with fn as_native(self) {
  self.as_native()
}

///|
pub fn ApplicationWindow::as_root(self : ApplicationWindow) -> Root = "%identity"

///|
pub impl IRoot for ApplicationWindow with fn as_root(self) {
  self.as_root()
}