// GENERATED — DO NOT EDIT

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

///|
pub(open) trait IAdjustment {
  fn as_adjustment(Self) -> Adjustment
  fn clamp_page(Self, Double, Double) -> Unit = _
  fn configure(Self, Double, Double, Double, Double, Double, Double) -> Unit = _
  fn get_lower(Self) -> Double = _
  fn get_minimum_increment(Self) -> Double = _
  fn get_page_increment(Self) -> Double = _
  fn get_page_size(Self) -> Double = _
  fn get_step_increment(Self) -> Double = _
  fn get_upper(Self) -> Double = _
  fn get_value(Self) -> Double = _
  fn set_lower(Self, Double) -> Unit = _
  fn set_page_increment(Self, Double) -> Unit = _
  fn set_page_size(Self, Double) -> Unit = _
  fn set_step_increment(Self, Double) -> Unit = _
  fn set_upper(Self, Double) -> Unit = _
  fn set_value(Self, Double) -> Unit = _
  fn connect_changed(Self, (Adjustment) -> Unit) -> UInt64 = _
  fn connect_value_changed(Self, (Adjustment) -> Unit) -> UInt64 = _
}

///|
pub impl IAdjustment for Adjustment with fn as_adjustment(self) {
  self
}

///|
/// Implementation contract for Adjustment.changed. Self is the retained MoonBit state; the second parameter is the invoked Adjustment object.
pub(open) trait VAdjustmentChanged {
  fn changed(Self, Adjustment) -> Unit
}

///|
/// Implementation contract for Adjustment.value_changed. Self is the retained MoonBit state; the second parameter is the invoked Adjustment object.
pub(open) trait VAdjustmentValueChanged {
  fn value_changed(Self, Adjustment) -> Unit
}

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/ctor.Adjustment.new.html).
pub extern "c" fn Adjustment::new(
  value : Double,
  lower : Double,
  upper : Double,
  step_increment : Double,
  page_increment : Double,
  page_size : Double,
) -> Adjustment = "moonbit_gtk_adjustment_new"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Adjustment.clamp_page.html).
#borrow(self)
pub extern "c" fn Adjustment::clamp_page(
  self : Adjustment,
  lower : Double,
  upper : Double,
) = "moonbit_gtk_adjustment_clamp_page"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Adjustment.configure.html).
#borrow(self)
pub extern "c" fn Adjustment::configure(
  self : Adjustment,
  value : Double,
  lower : Double,
  upper : Double,
  step_increment : Double,
  page_increment : Double,
  page_size : Double,
) = "moonbit_gtk_adjustment_configure"

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

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

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

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

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

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

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

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Adjustment.set_lower.html).
#borrow(self)
pub extern "c" fn Adjustment::set_lower(self : Adjustment, lower : Double) = "moonbit_gtk_adjustment_set_lower"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Adjustment.set_page_increment.html).
#borrow(self)
pub extern "c" fn Adjustment::set_page_increment(
  self : Adjustment,
  page_increment : Double,
) = "moonbit_gtk_adjustment_set_page_increment"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Adjustment.set_page_size.html).
#borrow(self)
pub extern "c" fn Adjustment::set_page_size(
  self : Adjustment,
  page_size : Double,
) = "moonbit_gtk_adjustment_set_page_size"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Adjustment.set_step_increment.html).
#borrow(self)
pub extern "c" fn Adjustment::set_step_increment(
  self : Adjustment,
  step_increment : Double,
) = "moonbit_gtk_adjustment_set_step_increment"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Adjustment.set_upper.html).
#borrow(self)
pub extern "c" fn Adjustment::set_upper(self : Adjustment, upper : Double) = "moonbit_gtk_adjustment_set_upper"

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

///|
#borrow(instance)
extern "c" fn gtk_adjustment_connect_changed(
  instance : Adjustment,
  function : FuncRef[(Adjustment, (Adjustment) -> Unit) -> Unit],
  closure : (Adjustment) -> Unit,
) -> UInt64 = "moonbit_gtk_adjustment_connect_changed"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/signal.Adjustment.changed.html).
pub fn Adjustment::connect_changed(
  self : Adjustment,
  f : (Adjustment) -> Unit,
) -> UInt64 {
  gtk_adjustment_connect_changed(self, fn(instance_, f) { f(instance_) }, f)
}

///|
#borrow(instance)
extern "c" fn gtk_adjustment_connect_value_changed(
  instance : Adjustment,
  function : FuncRef[(Adjustment, (Adjustment) -> Unit) -> Unit],
  closure : (Adjustment) -> Unit,
) -> UInt64 = "moonbit_gtk_adjustment_connect_value_changed"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/signal.Adjustment.value-changed.html).
pub fn Adjustment::connect_value_changed(
  self : Adjustment,
  f : (Adjustment) -> Unit,
) -> UInt64 {
  gtk_adjustment_connect_value_changed(
    self,
    fn(instance_, f) { f(instance_) },
    f,
  )
}

///|
impl IAdjustment with fn clamp_page(self, lower, upper) -> Unit {
  self.as_adjustment().clamp_page(lower, upper)
}

///|
impl IAdjustment with fn configure(
  self,
  value,
  lower,
  upper,
  step_increment,
  page_increment,
  page_size,
) -> Unit {
  self
  .as_adjustment()
  .configure(value, lower, upper, step_increment, page_increment, page_size)
}

///|
impl IAdjustment with fn get_lower(self) -> Double {
  self.as_adjustment().get_lower()
}

///|
impl IAdjustment with fn get_minimum_increment(self) -> Double {
  self.as_adjustment().get_minimum_increment()
}

///|
impl IAdjustment with fn get_page_increment(self) -> Double {
  self.as_adjustment().get_page_increment()
}

///|
impl IAdjustment with fn get_page_size(self) -> Double {
  self.as_adjustment().get_page_size()
}

///|
impl IAdjustment with fn get_step_increment(self) -> Double {
  self.as_adjustment().get_step_increment()
}

///|
impl IAdjustment with fn get_upper(self) -> Double {
  self.as_adjustment().get_upper()
}

///|
impl IAdjustment with fn get_value(self) -> Double {
  self.as_adjustment().get_value()
}

///|
impl IAdjustment with fn set_lower(self, lower) -> Unit {
  self.as_adjustment().set_lower(lower)
}

///|
impl IAdjustment with fn set_page_increment(self, page_increment) -> Unit {
  self.as_adjustment().set_page_increment(page_increment)
}

///|
impl IAdjustment with fn set_page_size(self, page_size) -> Unit {
  self.as_adjustment().set_page_size(page_size)
}

///|
impl IAdjustment with fn set_step_increment(self, step_increment) -> Unit {
  self.as_adjustment().set_step_increment(step_increment)
}

///|
impl IAdjustment with fn set_upper(self, upper) -> Unit {
  self.as_adjustment().set_upper(upper)
}

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

///|
impl IAdjustment with fn connect_changed(self, f) -> UInt64 {
  self.as_adjustment().connect_changed(f)
}

///|
impl IAdjustment with fn connect_value_changed(self, f) -> UInt64 {
  self.as_adjustment().connect_value_changed(f)
}

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

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