// GENERATED — DO NOT EDIT

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

///|
pub(open) trait IEntryBuffer {
  fn as_entry_buffer(Self) -> EntryBuffer
  fn delete_text(Self, UInt, Int) -> UInt = _
  fn emit_deleted_text(Self, UInt, UInt) -> Unit = _
  fn emit_inserted_text(Self, UInt, String, UInt) -> Unit = _
  fn get_bytes(Self) -> UInt64 = _
  fn get_length(Self) -> UInt = _
  fn get_max_length(Self) -> Int = _
  fn get_text(Self) -> String = _
  fn insert_text(Self, UInt, String, Int) -> UInt = _
  fn set_max_length(Self, Int) -> Unit = _
  fn set_text(Self, String, Int) -> Unit = _
  fn connect_deleted_text(Self, (EntryBuffer, UInt, UInt) -> Unit) -> UInt64 = _
  fn connect_inserted_text(Self, (EntryBuffer, UInt, String, UInt) -> Unit) -> UInt64 = _
}

///|
pub impl IEntryBuffer for EntryBuffer with fn as_entry_buffer(self) {
  self
}

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

///|
/// Implementation contract for EntryBuffer.inserted_text. Self is the retained MoonBit state; the second parameter is the invoked EntryBuffer object.
pub(open) trait VEntryBufferInsertedText {
  fn inserted_text(Self, EntryBuffer, UInt, String, UInt) -> Unit
}

///|
#borrow(initial_chars)
extern "c" fn moonbit_gtk_entry_buffer_new(
  initial_chars : @glib.Nullable[Bytes],
  n_initial_chars : Int,
) -> EntryBuffer = "moonbit_gtk_entry_buffer_new"

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

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.EntryBuffer.delete_text.html).
#borrow(self)
pub extern "c" fn EntryBuffer::delete_text(
  self : EntryBuffer,
  position : UInt,
  n_chars : Int,
) -> UInt = "moonbit_gtk_entry_buffer_delete_text"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.EntryBuffer.emit_deleted_text.html).
#borrow(self)
pub extern "c" fn EntryBuffer::emit_deleted_text(
  self : EntryBuffer,
  position : UInt,
  n_chars : UInt,
) = "moonbit_gtk_entry_buffer_emit_deleted_text"

///|
#borrow(self_, chars)
extern "c" fn moonbit_gtk_entry_buffer_emit_inserted_text(
  self_ : EntryBuffer,
  position : UInt,
  chars : Bytes,
  n_chars : UInt,
) = "moonbit_gtk_entry_buffer_emit_inserted_text"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.EntryBuffer.emit_inserted_text.html).
pub fn EntryBuffer::emit_inserted_text(
  self : EntryBuffer,
  position : UInt,
  chars : String,
  n_chars : UInt,
) -> Unit {
  moonbit_gtk_entry_buffer_emit_inserted_text(
    self,
    position,
    @encoding/utf8.encode(chars),
    n_chars,
  )
}

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.EntryBuffer.get_bytes.html).
#borrow(self)
pub extern "c" fn EntryBuffer::get_bytes(self : EntryBuffer) -> UInt64 = "moonbit_gtk_entry_buffer_get_bytes"

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

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

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

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

///|
#borrow(self_, chars)
extern "c" fn moonbit_gtk_entry_buffer_insert_text(
  self_ : EntryBuffer,
  position : UInt,
  chars : Bytes,
  n_chars : Int,
) -> UInt = "moonbit_gtk_entry_buffer_insert_text"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.EntryBuffer.insert_text.html).
pub fn EntryBuffer::insert_text(
  self : EntryBuffer,
  position : UInt,
  chars : String,
  n_chars : Int,
) -> UInt {
  moonbit_gtk_entry_buffer_insert_text(
    self,
    position,
    @encoding/utf8.encode(chars),
    n_chars,
  )
}

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.EntryBuffer.set_max_length.html).
#borrow(self)
pub extern "c" fn EntryBuffer::set_max_length(
  self : EntryBuffer,
  max_length : Int,
) = "moonbit_gtk_entry_buffer_set_max_length"

///|
#borrow(self_, chars)
extern "c" fn moonbit_gtk_entry_buffer_set_text(
  self_ : EntryBuffer,
  chars : Bytes,
  n_chars : Int,
) = "moonbit_gtk_entry_buffer_set_text"

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

///|
#borrow(instance)
extern "c" fn gtk_entry_buffer_connect_deleted_text(
  instance : EntryBuffer,
  function : FuncRef[
    (EntryBuffer, UInt, UInt, (EntryBuffer, UInt, UInt) -> Unit) -> Unit,
  ],
  closure : (EntryBuffer, UInt, UInt) -> Unit,
) -> UInt64 = "moonbit_gtk_entry_buffer_connect_deleted_text"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/signal.EntryBuffer.deleted-text.html).
pub fn EntryBuffer::connect_deleted_text(
  self : EntryBuffer,
  f : (EntryBuffer, UInt, UInt) -> Unit,
) -> UInt64 {
  gtk_entry_buffer_connect_deleted_text(
    self,
    fn(instance_, position, n_chars, f) { f(instance_, position, n_chars) },
    f,
  )
}

///|
#borrow(instance)
extern "c" fn gtk_entry_buffer_connect_inserted_text(
  instance : EntryBuffer,
  function : FuncRef[
    (EntryBuffer, UInt, Bytes, UInt, (EntryBuffer, UInt, String, UInt) -> Unit) -> Unit,
  ],
  closure : (EntryBuffer, UInt, String, UInt) -> Unit,
) -> UInt64 = "moonbit_gtk_entry_buffer_connect_inserted_text"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/signal.EntryBuffer.inserted-text.html).
pub fn EntryBuffer::connect_inserted_text(
  self : EntryBuffer,
  f : (EntryBuffer, UInt, String, UInt) -> Unit,
) -> UInt64 {
  gtk_entry_buffer_connect_inserted_text(
    self,
    fn(instance_, position, chars, n_chars, f) {
      f(instance_, position, @encoding/utf8.decode_lossy(chars), n_chars)
    },
    f,
  )
}

///|
impl IEntryBuffer with fn delete_text(self, position, n_chars) -> UInt {
  self.as_entry_buffer().delete_text(position, n_chars)
}

///|
impl IEntryBuffer with fn emit_deleted_text(self, position, n_chars) -> Unit {
  self.as_entry_buffer().emit_deleted_text(position, n_chars)
}

///|
impl IEntryBuffer with fn emit_inserted_text(self, position, chars, n_chars) -> Unit {
  self.as_entry_buffer().emit_inserted_text(position, chars, n_chars)
}

///|
impl IEntryBuffer with fn get_bytes(self) -> UInt64 {
  self.as_entry_buffer().get_bytes()
}

///|
impl IEntryBuffer with fn get_length(self) -> UInt {
  self.as_entry_buffer().get_length()
}

///|
impl IEntryBuffer with fn get_max_length(self) -> Int {
  self.as_entry_buffer().get_max_length()
}

///|
impl IEntryBuffer with fn get_text(self) -> String {
  self.as_entry_buffer().get_text()
}

///|
impl IEntryBuffer with fn insert_text(self, position, chars, n_chars) -> UInt {
  self.as_entry_buffer().insert_text(position, chars, n_chars)
}

///|
impl IEntryBuffer with fn set_max_length(self, max_length) -> Unit {
  self.as_entry_buffer().set_max_length(max_length)
}

///|
impl IEntryBuffer with fn set_text(self, chars, n_chars) -> Unit {
  self.as_entry_buffer().set_text(chars, n_chars)
}

///|
impl IEntryBuffer with fn connect_deleted_text(self, f) -> UInt64 {
  self.as_entry_buffer().connect_deleted_text(f)
}

///|
impl IEntryBuffer with fn connect_inserted_text(self, f) -> UInt64 {
  self.as_entry_buffer().connect_inserted_text(f)
}

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

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