sig
  type select_mode = [ `always | `default | `none | `ondemand ]
  type mark_repeat_type =
      [ `annually
      | `daily
      | `last_day_of_month
      | `monthly
      | `reverse_daily
      | `unique
      | `weekly ]
  type mark
  type weekday =
      [ `friday
      | `last
      | `monday
      | `saturday
      | `sunday
      | `thursday
      | `tuesday
      | `wednesday ]
  type selectable = [ `day | `month | `none | `year ]
  type selectable_ = { year : bool; month : bool; day : bool; }
  val add : Evas.obj -> Evas.obj
  val addx : Elm_object.t_addx
  val weekdays_names_get : Evas.obj -> string array
  val weekdays_names_set : Evas.obj -> string array -> unit
  val min_max_year_set : Evas.obj -> int -> int -> unit
  val min_max_year_get : Evas.obj -> int * int
  val select_mode_set : Evas.obj -> Elm_calendar.select_mode -> unit
  val select_mode_get : Evas.obj -> Elm_calendar.select_mode
  val selected_time_set : Evas.obj -> Unix.tm -> unit
  val selected_time_get : Evas.obj -> Unix.tm option
  val selectable_set : Evas.obj -> Elm_calendar.selectable list -> unit
  val selectable_get : Evas.obj -> Elm_calendar.selectable_
  val displayed_time_get : Evas.obj -> Unix.tm option
  val mark_add :
    Evas.obj ->
    string -> Unix.tm -> Elm_calendar.mark_repeat_type -> Elm_calendar.mark
  val mark_del : Elm_calendar.mark -> unit
  val marks_clear : Evas.obj -> unit
  val marks_get : Evas.obj -> Elm_calendar.mark list
  val marks_draw : Evas.obj -> unit
  val interval_set : Evas.obj -> float -> unit
  val interval_get : Evas.obj -> float
  val first_day_of_week_set : Evas.obj -> Elm_calendar.weekday -> unit
  val first_day_of_week_get : Evas.obj -> Elm_calendar.weekday
  val date_min_set : Evas.obj -> Unix.tm -> unit
  val date_min_get : Evas.obj -> Unix.tm
  val date_max_set : Evas.obj -> Unix.tm -> unit
  val date_max_get : Evas.obj -> Unix.tm
end