// GENERATED — DO NOT EDIT

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

///|
pub(open) trait IProgressBar {
  fn as_progress_bar(Self) -> ProgressBar
  fn get_ellipsize(Self) -> @pango.EllipsizeMode = _
  fn get_fraction(Self) -> Double = _
  fn get_inverted(Self) -> Bool = _
  fn get_pulse_step(Self) -> Double = _
  fn get_show_text(Self) -> Bool = _
  fn get_text(Self) -> String? = _
  fn pulse(Self) -> Unit = _
  fn set_ellipsize(Self, @pango.EllipsizeMode) -> Unit = _
  fn set_fraction(Self, Double) -> Unit = _
  fn set_inverted(Self, Bool) -> Unit = _
  fn set_pulse_step(Self, Double) -> Unit = _
  fn set_show_text(Self, Bool) -> Unit = _
  fn set_text(Self, String?) -> Unit = _
}

///|
pub impl IProgressBar for ProgressBar with fn as_progress_bar(self) {
  self
}

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

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.ProgressBar.get_ellipsize.html).
#borrow(self)
pub extern "c" fn ProgressBar::get_ellipsize(
  self : ProgressBar,
) -> @pango.EllipsizeMode = "moonbit_gtk_progress_bar_get_ellipsize"

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

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

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

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

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

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.ProgressBar.get_text.html).
pub fn ProgressBar::get_text(self : ProgressBar) -> String? {
  let result = moonbit_gtk_progress_bar_get_text(self)
  match result.to_option() {
    Some(bytes) => Some(@encoding/utf8.decode_lossy(bytes))
    None => None
  }
}

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.ProgressBar.pulse.html).
#borrow(self)
pub extern "c" fn ProgressBar::pulse(self : ProgressBar) = "moonbit_gtk_progress_bar_pulse"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.ProgressBar.set_ellipsize.html).
#borrow(self)
pub extern "c" fn ProgressBar::set_ellipsize(
  self : ProgressBar,
  mode : @pango.EllipsizeMode,
) = "moonbit_gtk_progress_bar_set_ellipsize"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.ProgressBar.set_fraction.html).
#borrow(self)
pub extern "c" fn ProgressBar::set_fraction(
  self : ProgressBar,
  fraction : Double,
) = "moonbit_gtk_progress_bar_set_fraction"

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

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.ProgressBar.set_pulse_step.html).
#borrow(self)
pub extern "c" fn ProgressBar::set_pulse_step(
  self : ProgressBar,
  fraction : Double,
) = "moonbit_gtk_progress_bar_set_pulse_step"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.ProgressBar.set_show_text.html).
#borrow(self)
pub extern "c" fn ProgressBar::set_show_text(
  self : ProgressBar,
  show_text : Bool,
) = "moonbit_gtk_progress_bar_set_show_text"

///|
#borrow(self_, text)
extern "c" fn moonbit_gtk_progress_bar_set_text(
  self_ : ProgressBar,
  text : @glib.Nullable[Bytes],
) = "moonbit_gtk_progress_bar_set_text"

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

///|
impl IProgressBar with fn get_ellipsize(self) -> @pango.EllipsizeMode {
  self.as_progress_bar().get_ellipsize()
}

///|
impl IProgressBar with fn get_fraction(self) -> Double {
  self.as_progress_bar().get_fraction()
}

///|
impl IProgressBar with fn get_inverted(self) -> Bool {
  self.as_progress_bar().get_inverted()
}

///|
impl IProgressBar with fn get_pulse_step(self) -> Double {
  self.as_progress_bar().get_pulse_step()
}

///|
impl IProgressBar with fn get_show_text(self) -> Bool {
  self.as_progress_bar().get_show_text()
}

///|
impl IProgressBar with fn get_text(self) -> String? {
  self.as_progress_bar().get_text()
}

///|
impl IProgressBar with fn pulse(self) -> Unit {
  self.as_progress_bar().pulse()
}

///|
impl IProgressBar with fn set_ellipsize(self, mode) -> Unit {
  self.as_progress_bar().set_ellipsize(mode)
}

///|
impl IProgressBar with fn set_fraction(self, fraction) -> Unit {
  self.as_progress_bar().set_fraction(fraction)
}

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

///|
impl IProgressBar with fn set_pulse_step(self, fraction) -> Unit {
  self.as_progress_bar().set_pulse_step(fraction)
}

///|
impl IProgressBar with fn set_show_text(self, show_text) -> Unit {
  self.as_progress_bar().set_show_text(show_text)
}

///|
impl IProgressBar with fn set_text(self, text) -> Unit {
  self.as_progress_bar().set_text(text)
}

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

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

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

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

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

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