// GENERATED — DO NOT EDIT

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

///|
pub(open) trait IRevealer {
  fn as_revealer(Self) -> Revealer
  fn get_child(Self) -> Widget? = _
  fn get_child_revealed(Self) -> Bool = _
  fn get_reveal_child(Self) -> Bool = _
  fn get_transition_duration(Self) -> UInt = _
  fn get_transition_type(Self) -> RevealerTransitionType = _
  fn set_child(Self, &IWidget?) -> Unit = _
  fn set_reveal_child(Self, Bool) -> Unit = _
  fn set_transition_duration(Self, UInt) -> Unit = _
  fn set_transition_type(Self, RevealerTransitionType) -> Unit = _
}

///|
pub impl IRevealer for Revealer with fn as_revealer(self) {
  self
}

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

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

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

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

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

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

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Revealer.get_transition_type.html).
#borrow(self)
pub extern "c" fn Revealer::get_transition_type(
  self : Revealer,
) -> RevealerTransitionType = "moonbit_gtk_revealer_get_transition_type"

///|
#borrow(self_, child)
extern "c" fn moonbit_gtk_revealer_set_child(
  self_ : Revealer,
  child : @glib.Nullable[Widget],
) = "moonbit_gtk_revealer_set_child"

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

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Revealer.set_reveal_child.html).
#borrow(self)
pub extern "c" fn Revealer::set_reveal_child(
  self : Revealer,
  reveal_child : Bool,
) = "moonbit_gtk_revealer_set_reveal_child"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Revealer.set_transition_duration.html).
#borrow(self)
pub extern "c" fn Revealer::set_transition_duration(
  self : Revealer,
  duration : UInt,
) = "moonbit_gtk_revealer_set_transition_duration"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Revealer.set_transition_type.html).
#borrow(self)
pub extern "c" fn Revealer::set_transition_type(
  self : Revealer,
  transition : RevealerTransitionType,
) = "moonbit_gtk_revealer_set_transition_type"

///|
impl IRevealer with fn get_child(self) -> Widget? {
  self.as_revealer().get_child()
}

///|
impl IRevealer with fn get_child_revealed(self) -> Bool {
  self.as_revealer().get_child_revealed()
}

///|
impl IRevealer with fn get_reveal_child(self) -> Bool {
  self.as_revealer().get_reveal_child()
}

///|
impl IRevealer with fn get_transition_duration(self) -> UInt {
  self.as_revealer().get_transition_duration()
}

///|
impl IRevealer with fn get_transition_type(self) -> RevealerTransitionType {
  self.as_revealer().get_transition_type()
}

///|
impl IRevealer with fn set_child(self, child) -> Unit {
  self.as_revealer().set_child(child)
}

///|
impl IRevealer with fn set_reveal_child(self, reveal_child) -> Unit {
  self.as_revealer().set_reveal_child(reveal_child)
}

///|
impl IRevealer with fn set_transition_duration(self, duration) -> Unit {
  self.as_revealer().set_transition_duration(duration)
}

///|
impl IRevealer with fn set_transition_type(self, transition) -> Unit {
  self.as_revealer().set_transition_type(transition)
}

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

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

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

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