// GENERATED — DO NOT EDIT

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

///|
pub(open) trait ICalendar {
  fn as_calendar(Self) -> Calendar
  fn clear_marks(Self) -> Unit = _
  fn get_day(Self) -> Int = _
  fn get_day_is_marked(Self, UInt) -> Bool = _
  fn get_month(Self) -> Int = _
  fn get_show_day_names(Self) -> Bool = _
  fn get_show_heading(Self) -> Bool = _
  fn get_show_week_numbers(Self) -> Bool = _
  fn get_year(Self) -> Int = _
  fn mark_day(Self, UInt) -> Unit = _
  fn set_day(Self, Int) -> Unit = _
  fn set_month(Self, Int) -> Unit = _
  fn set_show_day_names(Self, Bool) -> Unit = _
  fn set_show_heading(Self, Bool) -> Unit = _
  fn set_show_week_numbers(Self, Bool) -> Unit = _
  fn set_year(Self, Int) -> Unit = _
  fn unmark_day(Self, UInt) -> Unit = _
  fn connect_day_selected(Self, (Calendar) -> Unit) -> UInt64 = _
  fn connect_next_month(Self, (Calendar) -> Unit) -> UInt64 = _
  fn connect_next_year(Self, (Calendar) -> Unit) -> UInt64 = _
  fn connect_prev_month(Self, (Calendar) -> Unit) -> UInt64 = _
  fn connect_prev_year(Self, (Calendar) -> Unit) -> UInt64 = _
}

///|
pub impl ICalendar for Calendar with fn as_calendar(self) {
  self
}

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

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

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

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Calendar.get_day_is_marked.html).
#borrow(self)
pub extern "c" fn Calendar::get_day_is_marked(
  self : Calendar,
  day : UInt,
) -> Bool = "moonbit_gtk_calendar_get_day_is_marked"

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

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

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

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

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

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Calendar.mark_day.html).
#borrow(self)
pub extern "c" fn Calendar::mark_day(self : Calendar, day : UInt) = "moonbit_gtk_calendar_mark_day"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Calendar.set_day.html).
#borrow(self)
pub extern "c" fn Calendar::set_day(self : Calendar, day : Int) = "moonbit_gtk_calendar_set_day"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Calendar.set_month.html).
#borrow(self)
pub extern "c" fn Calendar::set_month(self : Calendar, month : Int) = "moonbit_gtk_calendar_set_month"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Calendar.set_show_day_names.html).
#borrow(self)
pub extern "c" fn Calendar::set_show_day_names(self : Calendar, value : Bool) = "moonbit_gtk_calendar_set_show_day_names"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Calendar.set_show_heading.html).
#borrow(self)
pub extern "c" fn Calendar::set_show_heading(self : Calendar, value : Bool) = "moonbit_gtk_calendar_set_show_heading"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Calendar.set_show_week_numbers.html).
#borrow(self)
pub extern "c" fn Calendar::set_show_week_numbers(
  self : Calendar,
  value : Bool,
) = "moonbit_gtk_calendar_set_show_week_numbers"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Calendar.set_year.html).
#borrow(self)
pub extern "c" fn Calendar::set_year(self : Calendar, year : Int) = "moonbit_gtk_calendar_set_year"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Calendar.unmark_day.html).
#borrow(self)
pub extern "c" fn Calendar::unmark_day(self : Calendar, day : UInt) = "moonbit_gtk_calendar_unmark_day"

///|
#borrow(instance)
extern "c" fn gtk_calendar_connect_day_selected(
  instance : Calendar,
  function : FuncRef[(Calendar, (Calendar) -> Unit) -> Unit],
  closure : (Calendar) -> Unit,
) -> UInt64 = "moonbit_gtk_calendar_connect_day_selected"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/signal.Calendar.day-selected.html).
pub fn Calendar::connect_day_selected(
  self : Calendar,
  f : (Calendar) -> Unit,
) -> UInt64 {
  gtk_calendar_connect_day_selected(self, fn(instance_, f) { f(instance_) }, f)
}

///|
#borrow(instance)
extern "c" fn gtk_calendar_connect_next_month(
  instance : Calendar,
  function : FuncRef[(Calendar, (Calendar) -> Unit) -> Unit],
  closure : (Calendar) -> Unit,
) -> UInt64 = "moonbit_gtk_calendar_connect_next_month"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/signal.Calendar.next-month.html).
pub fn Calendar::connect_next_month(
  self : Calendar,
  f : (Calendar) -> Unit,
) -> UInt64 {
  gtk_calendar_connect_next_month(self, fn(instance_, f) { f(instance_) }, f)
}

///|
#borrow(instance)
extern "c" fn gtk_calendar_connect_next_year(
  instance : Calendar,
  function : FuncRef[(Calendar, (Calendar) -> Unit) -> Unit],
  closure : (Calendar) -> Unit,
) -> UInt64 = "moonbit_gtk_calendar_connect_next_year"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/signal.Calendar.next-year.html).
pub fn Calendar::connect_next_year(
  self : Calendar,
  f : (Calendar) -> Unit,
) -> UInt64 {
  gtk_calendar_connect_next_year(self, fn(instance_, f) { f(instance_) }, f)
}

///|
#borrow(instance)
extern "c" fn gtk_calendar_connect_prev_month(
  instance : Calendar,
  function : FuncRef[(Calendar, (Calendar) -> Unit) -> Unit],
  closure : (Calendar) -> Unit,
) -> UInt64 = "moonbit_gtk_calendar_connect_prev_month"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/signal.Calendar.prev-month.html).
pub fn Calendar::connect_prev_month(
  self : Calendar,
  f : (Calendar) -> Unit,
) -> UInt64 {
  gtk_calendar_connect_prev_month(self, fn(instance_, f) { f(instance_) }, f)
}

///|
#borrow(instance)
extern "c" fn gtk_calendar_connect_prev_year(
  instance : Calendar,
  function : FuncRef[(Calendar, (Calendar) -> Unit) -> Unit],
  closure : (Calendar) -> Unit,
) -> UInt64 = "moonbit_gtk_calendar_connect_prev_year"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/signal.Calendar.prev-year.html).
pub fn Calendar::connect_prev_year(
  self : Calendar,
  f : (Calendar) -> Unit,
) -> UInt64 {
  gtk_calendar_connect_prev_year(self, fn(instance_, f) { f(instance_) }, f)
}

///|
impl ICalendar with fn clear_marks(self) -> Unit {
  self.as_calendar().clear_marks()
}

///|
impl ICalendar with fn get_day(self) -> Int {
  self.as_calendar().get_day()
}

///|
impl ICalendar with fn get_day_is_marked(self, day) -> Bool {
  self.as_calendar().get_day_is_marked(day)
}

///|
impl ICalendar with fn get_month(self) -> Int {
  self.as_calendar().get_month()
}

///|
impl ICalendar with fn get_show_day_names(self) -> Bool {
  self.as_calendar().get_show_day_names()
}

///|
impl ICalendar with fn get_show_heading(self) -> Bool {
  self.as_calendar().get_show_heading()
}

///|
impl ICalendar with fn get_show_week_numbers(self) -> Bool {
  self.as_calendar().get_show_week_numbers()
}

///|
impl ICalendar with fn get_year(self) -> Int {
  self.as_calendar().get_year()
}

///|
impl ICalendar with fn mark_day(self, day) -> Unit {
  self.as_calendar().mark_day(day)
}

///|
impl ICalendar with fn set_day(self, day) -> Unit {
  self.as_calendar().set_day(day)
}

///|
impl ICalendar with fn set_month(self, month) -> Unit {
  self.as_calendar().set_month(month)
}

///|
impl ICalendar with fn set_show_day_names(self, value) -> Unit {
  self.as_calendar().set_show_day_names(value)
}

///|
impl ICalendar with fn set_show_heading(self, value) -> Unit {
  self.as_calendar().set_show_heading(value)
}

///|
impl ICalendar with fn set_show_week_numbers(self, value) -> Unit {
  self.as_calendar().set_show_week_numbers(value)
}

///|
impl ICalendar with fn set_year(self, year) -> Unit {
  self.as_calendar().set_year(year)
}

///|
impl ICalendar with fn unmark_day(self, day) -> Unit {
  self.as_calendar().unmark_day(day)
}

///|
impl ICalendar with fn connect_day_selected(self, f) -> UInt64 {
  self.as_calendar().connect_day_selected(f)
}

///|
impl ICalendar with fn connect_next_month(self, f) -> UInt64 {
  self.as_calendar().connect_next_month(f)
}

///|
impl ICalendar with fn connect_next_year(self, f) -> UInt64 {
  self.as_calendar().connect_next_year(f)
}

///|
impl ICalendar with fn connect_prev_month(self, f) -> UInt64 {
  self.as_calendar().connect_prev_month(f)
}

///|
impl ICalendar with fn connect_prev_year(self, f) -> UInt64 {
  self.as_calendar().connect_prev_year(f)
}

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

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

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

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