// GENERATED — DO NOT EDIT

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

///|
pub(open) trait ILevelBar {
  fn as_level_bar(Self) -> LevelBar
  fn add_offset_value(Self, String, Double) -> Unit = _
  fn get_inverted(Self) -> Bool = _
  fn get_max_value(Self) -> Double = _
  fn get_min_value(Self) -> Double = _
  fn get_mode(Self) -> LevelBarMode = _
  fn get_offset_value(Self, String?) -> (Bool, Double) = _
  fn get_value(Self) -> Double = _
  fn remove_offset_value(Self, String?) -> Unit = _
  fn set_inverted(Self, Bool) -> Unit = _
  fn set_max_value(Self, Double) -> Unit = _
  fn set_min_value(Self, Double) -> Unit = _
  fn set_mode(Self, LevelBarMode) -> Unit = _
  fn set_value(Self, Double) -> Unit = _
  fn connect_offset_changed(Self, (LevelBar, String) -> Unit) -> UInt64 = _
}

///|
pub impl ILevelBar for LevelBar with fn as_level_bar(self) {
  self
}

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

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/ctor.LevelBar.new_for_interval.html).
pub extern "c" fn LevelBar::new_for_interval(
  min_value : Double,
  max_value : Double,
) -> LevelBar = "moonbit_gtk_level_bar_new_for_interval"

///|
#borrow(self_, name)
extern "c" fn moonbit_gtk_level_bar_add_offset_value(
  self_ : LevelBar,
  name : Bytes,
  value : Double,
) = "moonbit_gtk_level_bar_add_offset_value"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.LevelBar.add_offset_value.html).
pub fn LevelBar::add_offset_value(
  self : LevelBar,
  name : String,
  value : Double,
) -> Unit {
  moonbit_gtk_level_bar_add_offset_value(
    self,
    @encoding/utf8.encode(name),
    value,
  )
}

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

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.LevelBar.get_max_value.html).
#borrow(self)
pub extern "c" fn LevelBar::get_max_value(self : LevelBar) -> Double = "moonbit_gtk_level_bar_get_max_value"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.LevelBar.get_min_value.html).
#borrow(self)
pub extern "c" fn LevelBar::get_min_value(self : LevelBar) -> Double = "moonbit_gtk_level_bar_get_min_value"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.LevelBar.get_mode.html).
#borrow(self)
pub extern "c" fn LevelBar::get_mode(self : LevelBar) -> LevelBarMode = "moonbit_gtk_level_bar_get_mode"

///|
#borrow(self_, name, value)
extern "c" fn moonbit_gtk_level_bar_get_offset_value(
  self_ : LevelBar,
  name : @glib.Nullable[Bytes],
  value : Ref[Double],
) -> Bool = "moonbit_gtk_level_bar_get_offset_value"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.LevelBar.get_offset_value.html).
pub fn LevelBar::get_offset_value(
  self : LevelBar,
  name : String?,
) -> (Bool, Double) {
  let value = Ref(0.0)
  let result = moonbit_gtk_level_bar_get_offset_value(
    self,
    match name {
      Some(s) => @glib.Nullable::some(@encoding/utf8.encode(s))
      None => @glib.Nullable::null()
    },
    value,
  )
  (result, value.val)
}

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.LevelBar.get_value.html).
#borrow(self)
pub extern "c" fn LevelBar::get_value(self : LevelBar) -> Double = "moonbit_gtk_level_bar_get_value"

///|
#borrow(self_, name)
extern "c" fn moonbit_gtk_level_bar_remove_offset_value(
  self_ : LevelBar,
  name : @glib.Nullable[Bytes],
) = "moonbit_gtk_level_bar_remove_offset_value"

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

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.LevelBar.set_inverted.html).
#borrow(self)
pub extern "c" fn LevelBar::set_inverted(self : LevelBar, inverted : Bool) = "moonbit_gtk_level_bar_set_inverted"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.LevelBar.set_max_value.html).
#borrow(self)
pub extern "c" fn LevelBar::set_max_value(self : LevelBar, value : Double) = "moonbit_gtk_level_bar_set_max_value"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.LevelBar.set_min_value.html).
#borrow(self)
pub extern "c" fn LevelBar::set_min_value(self : LevelBar, value : Double) = "moonbit_gtk_level_bar_set_min_value"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.LevelBar.set_mode.html).
#borrow(self)
pub extern "c" fn LevelBar::set_mode(self : LevelBar, mode : LevelBarMode) = "moonbit_gtk_level_bar_set_mode"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.LevelBar.set_value.html).
#borrow(self)
pub extern "c" fn LevelBar::set_value(self : LevelBar, value : Double) = "moonbit_gtk_level_bar_set_value"

///|
#borrow(instance)
extern "c" fn gtk_level_bar_connect_offset_changed(
  instance : LevelBar,
  function : FuncRef[(LevelBar, Bytes, (LevelBar, String) -> Unit) -> Unit],
  closure : (LevelBar, String) -> Unit,
) -> UInt64 = "moonbit_gtk_level_bar_connect_offset_changed"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/signal.LevelBar.offset-changed.html).
pub fn LevelBar::connect_offset_changed(
  self : LevelBar,
  f : (LevelBar, String) -> Unit,
) -> UInt64 {
  gtk_level_bar_connect_offset_changed(
    self,
    fn(instance_, name, f) { f(instance_, @encoding/utf8.decode_lossy(name)) },
    f,
  )
}

///|
impl ILevelBar with fn add_offset_value(self, name, value) -> Unit {
  self.as_level_bar().add_offset_value(name, value)
}

///|
impl ILevelBar with fn get_inverted(self) -> Bool {
  self.as_level_bar().get_inverted()
}

///|
impl ILevelBar with fn get_max_value(self) -> Double {
  self.as_level_bar().get_max_value()
}

///|
impl ILevelBar with fn get_min_value(self) -> Double {
  self.as_level_bar().get_min_value()
}

///|
impl ILevelBar with fn get_mode(self) -> LevelBarMode {
  self.as_level_bar().get_mode()
}

///|
impl ILevelBar with fn get_offset_value(self, name) -> (Bool, Double) {
  self.as_level_bar().get_offset_value(name)
}

///|
impl ILevelBar with fn get_value(self) -> Double {
  self.as_level_bar().get_value()
}

///|
impl ILevelBar with fn remove_offset_value(self, name) -> Unit {
  self.as_level_bar().remove_offset_value(name)
}

///|
impl ILevelBar with fn set_inverted(self, inverted) -> Unit {
  self.as_level_bar().set_inverted(inverted)
}

///|
impl ILevelBar with fn set_max_value(self, value) -> Unit {
  self.as_level_bar().set_max_value(value)
}

///|
impl ILevelBar with fn set_min_value(self, value) -> Unit {
  self.as_level_bar().set_min_value(value)
}

///|
impl ILevelBar with fn set_mode(self, mode) -> Unit {
  self.as_level_bar().set_mode(mode)
}

///|
impl ILevelBar with fn set_value(self, value) -> Unit {
  self.as_level_bar().set_value(value)
}

///|
impl ILevelBar with fn connect_offset_changed(self, f) -> UInt64 {
  self.as_level_bar().connect_offset_changed(f)
}

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

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

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

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

///|
pub fn LevelBar::as_orientable(self : LevelBar) -> Orientable = "%identity"

///|
pub impl IOrientable for LevelBar with fn as_orientable(self) {
  self.as_orientable()
}