// GENERATED — DO NOT EDIT

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

///|
pub(open) trait ILabel {
  fn as_label(Self) -> Label
  fn get_attributes(Self) -> @pango.AttrList? = _
  fn get_current_uri(Self) -> String? = _
  fn get_ellipsize(Self) -> @pango.EllipsizeMode = _
  fn get_extra_menu(Self) -> @gio.MenuModel? = _
  fn get_justify(Self) -> Justification = _
  fn get_label(Self) -> String = _
  fn get_layout(Self) -> @pango.Layout = _
  fn get_layout_offsets(Self) -> (Int, Int) = _
  fn get_lines(Self) -> Int = _
  fn get_max_width_chars(Self) -> Int = _
  fn get_mnemonic_keyval(Self) -> UInt = _
  fn get_mnemonic_widget(Self) -> Widget? = _
  fn get_natural_wrap_mode(Self) -> NaturalWrapMode = _
  fn get_selectable(Self) -> Bool = _
  fn get_selection_bounds(Self) -> (Bool, Int, Int) = _
  fn get_single_line_mode(Self) -> Bool = _
  fn get_tabs(Self) -> @pango.TabArray? = _
  fn get_text(Self) -> String = _
  fn get_use_markup(Self) -> Bool = _
  fn get_use_underline(Self) -> Bool = _
  fn get_width_chars(Self) -> Int = _
  fn get_wrap(Self) -> Bool = _
  fn get_wrap_mode(Self) -> @pango.WrapMode = _
  fn get_xalign(Self) -> Float = _
  fn get_yalign(Self) -> Float = _
  fn select_region(Self, Int, Int) -> Unit = _
  fn set_attributes(Self, @pango.AttrList?) -> Unit = _
  fn set_ellipsize(Self, @pango.EllipsizeMode) -> Unit = _
  fn set_extra_menu(Self, &@gio.IMenuModel?) -> Unit = _
  fn set_justify(Self, Justification) -> Unit = _
  fn set_label(Self, String) -> Unit = _
  fn set_lines(Self, Int) -> Unit = _
  fn set_markup(Self, String) -> Unit = _
  fn set_markup_with_mnemonic(Self, String) -> Unit = _
  fn set_max_width_chars(Self, Int) -> Unit = _
  fn set_mnemonic_widget(Self, &IWidget?) -> Unit = _
  fn set_natural_wrap_mode(Self, NaturalWrapMode) -> Unit = _
  fn set_selectable(Self, Bool) -> Unit = _
  fn set_single_line_mode(Self, Bool) -> Unit = _
  fn set_tabs(Self, @pango.TabArray?) -> Unit = _
  fn set_text(Self, String) -> Unit = _
  fn set_text_with_mnemonic(Self, String) -> Unit = _
  fn set_use_markup(Self, Bool) -> Unit = _
  fn set_use_underline(Self, Bool) -> Unit = _
  fn set_width_chars(Self, Int) -> Unit = _
  fn set_wrap(Self, Bool) -> Unit = _
  fn set_wrap_mode(Self, @pango.WrapMode) -> Unit = _
  fn set_xalign(Self, Float) -> Unit = _
  fn set_yalign(Self, Float) -> Unit = _
  fn connect_activate_current_link(Self, (Label) -> Unit) -> UInt64 = _
  fn connect_activate_link(Self, (Label, String) -> Bool) -> UInt64 = _
  fn connect_copy_clipboard(Self, (Label) -> Unit) -> UInt64 = _
  fn connect_move_cursor(Self, (Label, MovementStep, Int, Bool) -> Unit) -> UInt64 = _
}

///|
pub impl ILabel for Label with fn as_label(self) {
  self
}

///|
#borrow(str)
extern "c" fn moonbit_gtk_label_new(str : @glib.Nullable[Bytes]) -> Label = "moonbit_gtk_label_new"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/ctor.Label.new.html).
pub fn Label::new(str : String?) -> Label {
  moonbit_gtk_label_new(
    match str {
      Some(s) => @glib.Nullable::some(@encoding/utf8.encode(s))
      None => @glib.Nullable::null()
    },
  )
}

///|
#borrow(str)
extern "c" fn moonbit_gtk_label_new_with_mnemonic(
  str : @glib.Nullable[Bytes],
) -> Label = "moonbit_gtk_label_new_with_mnemonic"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/ctor.Label.new_with_mnemonic.html).
pub fn Label::new_with_mnemonic(str : String?) -> Label {
  moonbit_gtk_label_new_with_mnemonic(
    match str {
      Some(s) => @glib.Nullable::some(@encoding/utf8.encode(s))
      None => @glib.Nullable::null()
    },
  )
}

///|
#borrow(self_)
extern "c" fn moonbit_gtk_label_get_attributes(
  self_ : Label,
) -> @glib.Nullable[@pango.AttrList] = "moonbit_gtk_label_get_attributes"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Label.get_attributes.html).
pub fn Label::get_attributes(self : Label) -> @pango.AttrList? {
  let raw_result = moonbit_gtk_label_get_attributes(self)
  raw_result.to_option()
}

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

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

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

///|
#borrow(self_)
extern "c" fn moonbit_gtk_label_get_extra_menu(
  self_ : Label,
) -> @glib.Nullable[@gio.MenuModel] = "moonbit_gtk_label_get_extra_menu"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Label.get_extra_menu.html).
pub fn Label::get_extra_menu(self : Label) -> @gio.MenuModel? {
  let raw_result = moonbit_gtk_label_get_extra_menu(self)
  raw_result.to_option()
}

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Label.get_justify.html).
#borrow(self)
pub extern "c" fn Label::get_justify(self : Label) -> Justification = "moonbit_gtk_label_get_justify"

///|
#borrow(self_)
extern "c" fn moonbit_gtk_label_get_label(self_ : Label) -> Bytes = "moonbit_gtk_label_get_label"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Label.get_label.html).
pub fn Label::get_label(self : Label) -> String {
  @encoding/utf8.decode_lossy(moonbit_gtk_label_get_label(self))
}

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Label.get_layout.html).
#borrow(self)
pub extern "c" fn Label::get_layout(self : Label) -> @pango.Layout = "moonbit_gtk_label_get_layout"

///|
#borrow(self_, x, y)
extern "c" fn moonbit_gtk_label_get_layout_offsets(
  self_ : Label,
  x : Ref[Int],
  y : Ref[Int],
) = "moonbit_gtk_label_get_layout_offsets"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Label.get_layout_offsets.html).
pub fn Label::get_layout_offsets(self : Label) -> (Int, Int) {
  let x = Ref(0)
  let y = Ref(0)
  moonbit_gtk_label_get_layout_offsets(self, x, y)
  (x.val, y.val)
}

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Label.get_lines.html).
#borrow(self)
pub extern "c" fn Label::get_lines(self : Label) -> Int = "moonbit_gtk_label_get_lines"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Label.get_max_width_chars.html).
#borrow(self)
pub extern "c" fn Label::get_max_width_chars(self : Label) -> Int = "moonbit_gtk_label_get_max_width_chars"

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

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

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

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Label.get_natural_wrap_mode.html).
#borrow(self)
pub extern "c" fn Label::get_natural_wrap_mode(self : Label) -> NaturalWrapMode = "moonbit_gtk_label_get_natural_wrap_mode"

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

///|
#borrow(self_, start, end)
extern "c" fn moonbit_gtk_label_get_selection_bounds(
  self_ : Label,
  start : Ref[Int],
  end : Ref[Int],
) -> Bool = "moonbit_gtk_label_get_selection_bounds"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Label.get_selection_bounds.html).
pub fn Label::get_selection_bounds(self : Label) -> (Bool, Int, Int) {
  let start = Ref(0)
  let end = Ref(0)
  let result = moonbit_gtk_label_get_selection_bounds(self, start, end)
  (result, start.val, end.val)
}

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

///|
#borrow(self_)
extern "c" fn moonbit_gtk_label_get_tabs(
  self_ : Label,
) -> @glib.Nullable[@pango.TabArray] = "moonbit_gtk_label_get_tabs"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Label.get_tabs.html).
pub fn Label::get_tabs(self : Label) -> @pango.TabArray? {
  let raw_result = moonbit_gtk_label_get_tabs(self)
  raw_result.to_option()
}

///|
#borrow(self_)
extern "c" fn moonbit_gtk_label_get_text(self_ : Label) -> Bytes = "moonbit_gtk_label_get_text"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Label.get_text.html).
pub fn Label::get_text(self : Label) -> String {
  @encoding/utf8.decode_lossy(moonbit_gtk_label_get_text(self))
}

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

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

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Label.get_width_chars.html).
#borrow(self)
pub extern "c" fn Label::get_width_chars(self : Label) -> Int = "moonbit_gtk_label_get_width_chars"

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

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Label.get_wrap_mode.html).
#borrow(self)
pub extern "c" fn Label::get_wrap_mode(self : Label) -> @pango.WrapMode = "moonbit_gtk_label_get_wrap_mode"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Label.get_xalign.html).
#borrow(self)
pub extern "c" fn Label::get_xalign(self : Label) -> Float = "moonbit_gtk_label_get_xalign"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Label.get_yalign.html).
#borrow(self)
pub extern "c" fn Label::get_yalign(self : Label) -> Float = "moonbit_gtk_label_get_yalign"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Label.select_region.html).
#borrow(self)
pub extern "c" fn Label::select_region(
  self : Label,
  start_offset : Int,
  end_offset : Int,
) = "moonbit_gtk_label_select_region"

///|
#borrow(self_, attrs)
extern "c" fn moonbit_gtk_label_set_attributes(
  self_ : Label,
  attrs : @glib.Nullable[@pango.AttrList],
) = "moonbit_gtk_label_set_attributes"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Label.set_attributes.html).
pub fn Label::set_attributes(self : Label, attrs : @pango.AttrList?) -> Unit {
  moonbit_gtk_label_set_attributes(
    self,
    match attrs {
      Some(v) => @glib.Nullable::some(v)
      None => @glib.Nullable::null()
    },
  )
}

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

///|
#borrow(self_, model)
extern "c" fn moonbit_gtk_label_set_extra_menu(
  self_ : Label,
  model : @glib.Nullable[@gio.MenuModel],
) = "moonbit_gtk_label_set_extra_menu"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Label.set_extra_menu.html).
pub fn Label::set_extra_menu(self : Label, model : &@gio.IMenuModel?) -> Unit {
  moonbit_gtk_label_set_extra_menu(
    self,
    match model {
      Some(v) => @glib.Nullable::some(v.as_menu_model())
      None => @glib.Nullable::null()
    },
  )
}

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Label.set_justify.html).
#borrow(self)
pub extern "c" fn Label::set_justify(self : Label, jtype : Justification) = "moonbit_gtk_label_set_justify"

///|
#borrow(self_, str)
extern "c" fn moonbit_gtk_label_set_label(self_ : Label, str : Bytes) = "moonbit_gtk_label_set_label"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Label.set_label.html).
pub fn Label::set_label(self : Label, str : String) -> Unit {
  moonbit_gtk_label_set_label(self, @encoding/utf8.encode(str))
}

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Label.set_lines.html).
#borrow(self)
pub extern "c" fn Label::set_lines(self : Label, lines : Int) = "moonbit_gtk_label_set_lines"

///|
#borrow(self_, str)
extern "c" fn moonbit_gtk_label_set_markup(self_ : Label, str : Bytes) = "moonbit_gtk_label_set_markup"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Label.set_markup.html).
pub fn Label::set_markup(self : Label, str : String) -> Unit {
  moonbit_gtk_label_set_markup(self, @encoding/utf8.encode(str))
}

///|
#borrow(self_, str)
extern "c" fn moonbit_gtk_label_set_markup_with_mnemonic(
  self_ : Label,
  str : Bytes,
) = "moonbit_gtk_label_set_markup_with_mnemonic"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Label.set_markup_with_mnemonic.html).
pub fn Label::set_markup_with_mnemonic(self : Label, str : String) -> Unit {
  moonbit_gtk_label_set_markup_with_mnemonic(self, @encoding/utf8.encode(str))
}

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Label.set_max_width_chars.html).
#borrow(self)
pub extern "c" fn Label::set_max_width_chars(self : Label, n_chars : Int) = "moonbit_gtk_label_set_max_width_chars"

///|
#borrow(self_, widget)
extern "c" fn moonbit_gtk_label_set_mnemonic_widget(
  self_ : Label,
  widget : @glib.Nullable[Widget],
) = "moonbit_gtk_label_set_mnemonic_widget"

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

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Label.set_natural_wrap_mode.html).
#borrow(self)
pub extern "c" fn Label::set_natural_wrap_mode(
  self : Label,
  wrap_mode : NaturalWrapMode,
) = "moonbit_gtk_label_set_natural_wrap_mode"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Label.set_selectable.html).
#borrow(self)
pub extern "c" fn Label::set_selectable(self : Label, setting : Bool) = "moonbit_gtk_label_set_selectable"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Label.set_single_line_mode.html).
#borrow(self)
pub extern "c" fn Label::set_single_line_mode(
  self : Label,
  single_line_mode : Bool,
) = "moonbit_gtk_label_set_single_line_mode"

///|
#borrow(self_, tabs)
extern "c" fn moonbit_gtk_label_set_tabs(
  self_ : Label,
  tabs : @glib.Nullable[@pango.TabArray],
) = "moonbit_gtk_label_set_tabs"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Label.set_tabs.html).
pub fn Label::set_tabs(self : Label, tabs : @pango.TabArray?) -> Unit {
  moonbit_gtk_label_set_tabs(
    self,
    match tabs {
      Some(v) => @glib.Nullable::some(v)
      None => @glib.Nullable::null()
    },
  )
}

///|
#borrow(self_, str)
extern "c" fn moonbit_gtk_label_set_text(self_ : Label, str : Bytes) = "moonbit_gtk_label_set_text"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Label.set_text.html).
pub fn Label::set_text(self : Label, str : String) -> Unit {
  moonbit_gtk_label_set_text(self, @encoding/utf8.encode(str))
}

///|
#borrow(self_, str)
extern "c" fn moonbit_gtk_label_set_text_with_mnemonic(
  self_ : Label,
  str : Bytes,
) = "moonbit_gtk_label_set_text_with_mnemonic"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Label.set_text_with_mnemonic.html).
pub fn Label::set_text_with_mnemonic(self : Label, str : String) -> Unit {
  moonbit_gtk_label_set_text_with_mnemonic(self, @encoding/utf8.encode(str))
}

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Label.set_use_markup.html).
#borrow(self)
pub extern "c" fn Label::set_use_markup(self : Label, setting : Bool) = "moonbit_gtk_label_set_use_markup"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Label.set_use_underline.html).
#borrow(self)
pub extern "c" fn Label::set_use_underline(self : Label, setting : Bool) = "moonbit_gtk_label_set_use_underline"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Label.set_width_chars.html).
#borrow(self)
pub extern "c" fn Label::set_width_chars(self : Label, n_chars : Int) = "moonbit_gtk_label_set_width_chars"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Label.set_wrap.html).
#borrow(self)
pub extern "c" fn Label::set_wrap(self : Label, wrap : Bool) = "moonbit_gtk_label_set_wrap"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Label.set_wrap_mode.html).
#borrow(self)
pub extern "c" fn Label::set_wrap_mode(
  self : Label,
  wrap_mode : @pango.WrapMode,
) = "moonbit_gtk_label_set_wrap_mode"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Label.set_xalign.html).
#borrow(self)
pub extern "c" fn Label::set_xalign(self : Label, xalign : Float) = "moonbit_gtk_label_set_xalign"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Label.set_yalign.html).
#borrow(self)
pub extern "c" fn Label::set_yalign(self : Label, yalign : Float) = "moonbit_gtk_label_set_yalign"

///|
#borrow(instance)
extern "c" fn gtk_label_connect_activate_current_link(
  instance : Label,
  function : FuncRef[(Label, (Label) -> Unit) -> Unit],
  closure : (Label) -> Unit,
) -> UInt64 = "moonbit_gtk_label_connect_activate_current_link"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/signal.Label.activate-current-link.html).
pub fn Label::connect_activate_current_link(
  self : Label,
  f : (Label) -> Unit,
) -> UInt64 {
  gtk_label_connect_activate_current_link(
    self,
    fn(instance_, f) { f(instance_) },
    f,
  )
}

///|
#borrow(instance)
extern "c" fn gtk_label_connect_activate_link(
  instance : Label,
  function : FuncRef[(Label, Bytes, (Label, String) -> Bool) -> Bool],
  closure : (Label, String) -> Bool,
) -> UInt64 = "moonbit_gtk_label_connect_activate_link"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/signal.Label.activate-link.html).
pub fn Label::connect_activate_link(
  self : Label,
  f : (Label, String) -> Bool,
) -> UInt64 {
  gtk_label_connect_activate_link(
    self,
    fn(instance_, uri, f) { f(instance_, @encoding/utf8.decode_lossy(uri)) },
    f,
  )
}

///|
#borrow(instance)
extern "c" fn gtk_label_connect_copy_clipboard(
  instance : Label,
  function : FuncRef[(Label, (Label) -> Unit) -> Unit],
  closure : (Label) -> Unit,
) -> UInt64 = "moonbit_gtk_label_connect_copy_clipboard"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/signal.Label.copy-clipboard.html).
pub fn Label::connect_copy_clipboard(
  self : Label,
  f : (Label) -> Unit,
) -> UInt64 {
  gtk_label_connect_copy_clipboard(self, fn(instance_, f) { f(instance_) }, f)
}

///|
#borrow(instance)
extern "c" fn gtk_label_connect_move_cursor(
  instance : Label,
  function : FuncRef[
    (Label, MovementStep, Int, Bool, (Label, MovementStep, Int, Bool) -> Unit) -> Unit,
  ],
  closure : (Label, MovementStep, Int, Bool) -> Unit,
) -> UInt64 = "moonbit_gtk_label_connect_move_cursor"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/signal.Label.move-cursor.html).
pub fn Label::connect_move_cursor(
  self : Label,
  f : (Label, MovementStep, Int, Bool) -> Unit,
) -> UInt64 {
  gtk_label_connect_move_cursor(
    self,
    fn(instance_, step, count, extend_selection, f) {
      f(instance_, step, count, extend_selection)
    },
    f,
  )
}

///|
impl ILabel with fn get_attributes(self) -> @pango.AttrList? {
  self.as_label().get_attributes()
}

///|
impl ILabel with fn get_current_uri(self) -> String? {
  self.as_label().get_current_uri()
}

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

///|
impl ILabel with fn get_extra_menu(self) -> @gio.MenuModel? {
  self.as_label().get_extra_menu()
}

///|
impl ILabel with fn get_justify(self) -> Justification {
  self.as_label().get_justify()
}

///|
impl ILabel with fn get_label(self) -> String {
  self.as_label().get_label()
}

///|
impl ILabel with fn get_layout(self) -> @pango.Layout {
  self.as_label().get_layout()
}

///|
impl ILabel with fn get_layout_offsets(self) -> (Int, Int) {
  self.as_label().get_layout_offsets()
}

///|
impl ILabel with fn get_lines(self) -> Int {
  self.as_label().get_lines()
}

///|
impl ILabel with fn get_max_width_chars(self) -> Int {
  self.as_label().get_max_width_chars()
}

///|
impl ILabel with fn get_mnemonic_keyval(self) -> UInt {
  self.as_label().get_mnemonic_keyval()
}

///|
impl ILabel with fn get_mnemonic_widget(self) -> Widget? {
  self.as_label().get_mnemonic_widget()
}

///|
impl ILabel with fn get_natural_wrap_mode(self) -> NaturalWrapMode {
  self.as_label().get_natural_wrap_mode()
}

///|
impl ILabel with fn get_selectable(self) -> Bool {
  self.as_label().get_selectable()
}

///|
impl ILabel with fn get_selection_bounds(self) -> (Bool, Int, Int) {
  self.as_label().get_selection_bounds()
}

///|
impl ILabel with fn get_single_line_mode(self) -> Bool {
  self.as_label().get_single_line_mode()
}

///|
impl ILabel with fn get_tabs(self) -> @pango.TabArray? {
  self.as_label().get_tabs()
}

///|
impl ILabel with fn get_text(self) -> String {
  self.as_label().get_text()
}

///|
impl ILabel with fn get_use_markup(self) -> Bool {
  self.as_label().get_use_markup()
}

///|
impl ILabel with fn get_use_underline(self) -> Bool {
  self.as_label().get_use_underline()
}

///|
impl ILabel with fn get_width_chars(self) -> Int {
  self.as_label().get_width_chars()
}

///|
impl ILabel with fn get_wrap(self) -> Bool {
  self.as_label().get_wrap()
}

///|
impl ILabel with fn get_wrap_mode(self) -> @pango.WrapMode {
  self.as_label().get_wrap_mode()
}

///|
impl ILabel with fn get_xalign(self) -> Float {
  self.as_label().get_xalign()
}

///|
impl ILabel with fn get_yalign(self) -> Float {
  self.as_label().get_yalign()
}

///|
impl ILabel with fn select_region(self, start_offset, end_offset) -> Unit {
  self.as_label().select_region(start_offset, end_offset)
}

///|
impl ILabel with fn set_attributes(self, attrs) -> Unit {
  self.as_label().set_attributes(attrs)
}

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

///|
impl ILabel with fn set_extra_menu(self, model) -> Unit {
  self.as_label().set_extra_menu(model)
}

///|
impl ILabel with fn set_justify(self, jtype) -> Unit {
  self.as_label().set_justify(jtype)
}

///|
impl ILabel with fn set_label(self, str) -> Unit {
  self.as_label().set_label(str)
}

///|
impl ILabel with fn set_lines(self, lines) -> Unit {
  self.as_label().set_lines(lines)
}

///|
impl ILabel with fn set_markup(self, str) -> Unit {
  self.as_label().set_markup(str)
}

///|
impl ILabel with fn set_markup_with_mnemonic(self, str) -> Unit {
  self.as_label().set_markup_with_mnemonic(str)
}

///|
impl ILabel with fn set_max_width_chars(self, n_chars) -> Unit {
  self.as_label().set_max_width_chars(n_chars)
}

///|
impl ILabel with fn set_mnemonic_widget(self, widget) -> Unit {
  self.as_label().set_mnemonic_widget(widget)
}

///|
impl ILabel with fn set_natural_wrap_mode(self, wrap_mode) -> Unit {
  self.as_label().set_natural_wrap_mode(wrap_mode)
}

///|
impl ILabel with fn set_selectable(self, setting) -> Unit {
  self.as_label().set_selectable(setting)
}

///|
impl ILabel with fn set_single_line_mode(self, single_line_mode) -> Unit {
  self.as_label().set_single_line_mode(single_line_mode)
}

///|
impl ILabel with fn set_tabs(self, tabs) -> Unit {
  self.as_label().set_tabs(tabs)
}

///|
impl ILabel with fn set_text(self, str) -> Unit {
  self.as_label().set_text(str)
}

///|
impl ILabel with fn set_text_with_mnemonic(self, str) -> Unit {
  self.as_label().set_text_with_mnemonic(str)
}

///|
impl ILabel with fn set_use_markup(self, setting) -> Unit {
  self.as_label().set_use_markup(setting)
}

///|
impl ILabel with fn set_use_underline(self, setting) -> Unit {
  self.as_label().set_use_underline(setting)
}

///|
impl ILabel with fn set_width_chars(self, n_chars) -> Unit {
  self.as_label().set_width_chars(n_chars)
}

///|
impl ILabel with fn set_wrap(self, wrap) -> Unit {
  self.as_label().set_wrap(wrap)
}

///|
impl ILabel with fn set_wrap_mode(self, wrap_mode) -> Unit {
  self.as_label().set_wrap_mode(wrap_mode)
}

///|
impl ILabel with fn set_xalign(self, xalign) -> Unit {
  self.as_label().set_xalign(xalign)
}

///|
impl ILabel with fn set_yalign(self, yalign) -> Unit {
  self.as_label().set_yalign(yalign)
}

///|
impl ILabel with fn connect_activate_current_link(self, f) -> UInt64 {
  self.as_label().connect_activate_current_link(f)
}

///|
impl ILabel with fn connect_activate_link(self, f) -> UInt64 {
  self.as_label().connect_activate_link(f)
}

///|
impl ILabel with fn connect_copy_clipboard(self, f) -> UInt64 {
  self.as_label().connect_copy_clipboard(f)
}

///|
impl ILabel with fn connect_move_cursor(self, f) -> UInt64 {
  self.as_label().connect_move_cursor(f)
}

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

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

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

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