///|
extern "c" fn moonbit_adw_ensure_gsettings() = "moonbit_adw_ensure_gsettings"

///|
fn init {
  moonbit_adw_ensure_gsettings()
}

// --- NavigationPage ---

///|
pub type NavigationPage

///|
pub impl @gtk.IWidget for NavigationPage with fn as_widget(self) {
  self.as_gtk_widget()
}

///|
#borrow(child, title)
extern "c" fn moonbit_adw_navigation_page_new(
  child : @gtk.Widget,
  title : Bytes,
) -> NavigationPage = "moonbit_adw_navigation_page_new"

///|
pub fn NavigationPage::new(
  child : &@gtk.IWidget,
  title : String,
) -> NavigationPage {
  moonbit_adw_navigation_page_new(
    child.as_widget(),
    @encoding/utf8.encode(title),
  )
}

///|
#borrow(self)
pub extern "c" fn NavigationPage::as_gtk_widget(
  self : NavigationPage,
) -> @gtk.Widget = "moonbit_adw_navigation_page_as_gtk_widget"

///|
#borrow(page, child)
extern "c" fn adw_navigation_page_set_child(
  page : NavigationPage,
  child : @gtk.Widget,
) -> Unit = "moonbit_adw_navigation_page_set_child"

///|
#borrow(self)
pub fn NavigationPage::set_child(
  self : NavigationPage,
  child : &@gtk.IWidget,
) -> Unit {
  adw_navigation_page_set_child(self, child.as_widget())
}

///|
#borrow(page, title)
extern "c" fn adw_navigation_page_set_title(
  page : NavigationPage,
  title : Bytes,
) -> Unit = "moonbit_adw_navigation_page_set_title"

///|
#borrow(self)
pub fn NavigationPage::set_title(self : NavigationPage, title : String) -> Unit {
  adw_navigation_page_set_title(self, @encoding/utf8.encode(title))
}

// --- NavigationSplitView ---

///|
pub type NavigationSplitView

///|
pub extern "c" fn NavigationSplitView::new() -> NavigationSplitView = "moonbit_adw_navigation_split_view_new"

///|
#borrow(self, page)
pub extern "c" fn NavigationSplitView::set_sidebar(
  self : NavigationSplitView,
  page : NavigationPage,
) -> Unit = "moonbit_adw_navigation_split_view_set_sidebar"

///|
#borrow(self, page)
pub extern "c" fn NavigationSplitView::set_content(
  self : NavigationSplitView,
  page : NavigationPage,
) -> Unit = "moonbit_adw_navigation_split_view_set_content"

///|
#borrow(self)
pub extern "c" fn NavigationSplitView::as_gtk_widget(
  self : NavigationSplitView,
) -> @gtk.Widget = "moonbit_adw_navigation_split_view_as_gtk_widget"

///|
pub impl @gtk.IWidget for NavigationSplitView with fn as_widget(self) {
  self.as_gtk_widget()
}

///|
#borrow(self)
pub extern "c" fn NavigationSplitView::set_min_sidebar_width(
  self : NavigationSplitView,
  width : Double,
) -> Unit = "moonbit_adw_navigation_split_view_set_min_sidebar_width"

///|
#borrow(self)
pub extern "c" fn NavigationSplitView::set_max_sidebar_width(
  self : NavigationSplitView,
  width : Double,
) -> Unit = "moonbit_adw_navigation_split_view_set_max_sidebar_width"

///|
#borrow(self)
pub extern "c" fn NavigationSplitView::set_sidebar_width_fraction(
  self : NavigationSplitView,
  fraction : Double,
) -> Unit = "moonbit_adw_navigation_split_view_set_sidebar_width_fraction"