------------------------------------------------------------------------------
-- --
-- Copyright (C) 1998-2000 E. Briot, J. Brobecker and A. Charlet --
-- Copyright (C) 2000-2014, AdaCore --
-- --
-- This library is free software; you can redistribute it and/or modify it --
-- under terms of the GNU General Public License as published by the Free --
-- Software Foundation; either version 3, or (at your option) any later --
-- version. This library is distributed in the hope that it will be useful, --
-- but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHAN- --
-- TABILITY or FITNESS FOR A PARTICULAR PURPOSE. --
-- --
-- As a special exception under Section 7 of GPL version 3, you are granted --
-- additional permissions described in the GCC Runtime Library Exception, --
-- version 3.1, as published by the Free Software Foundation. --
-- --
-- You should have received a copy of the GNU General Public License and --
-- a copy of the GCC Runtime Library Exception along with this program; --
-- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see --
-- <http://www.gnu.org/licenses/>. --
-- --
------------------------------------------------------------------------------
-- <description>
-- Gtk.Calendar.Gtk_Calendar is a widget that displays a Gregorian calendar,
-- one month at a time. It can be created with Gtk.Calendar.Gtk_New.
--
-- The month and year currently displayed can be altered with
-- Gtk.Calendar.Select_Month. The exact day can be selected from the displayed
-- month using Gtk.Calendar.Select_Day.
--
-- To place a visual marker on a particular day, use Gtk.Calendar.Mark_Day
-- and to remove the marker, Gtk.Calendar.Unmark_Day. Alternative, all marks
-- can be cleared with Gtk.Calendar.Clear_Marks.
--
-- The way in which the calendar itself is displayed can be altered using
-- Gtk.Calendar.Set_Display_Options.
--
-- The selected date can be retrieved from a Gtk.Calendar.Gtk_Calendar using
-- Gtk.Calendar.Get_Date.
--
-- Users should be aware that, although the Gregorian calendar is the legal
-- calendar in most countries, it was adopted progressively between 1582 and
-- 1929. Display before these dates is likely to be historically incorrect.
--
-- </description>
-- <screenshot>gtk-calendar</screenshot>
-- <group>Selectors</group>
-- <testgtk>create_calendar.adb</testgtk>
pragma Ada_2005;
pragma Warnings (Off, "*is already use-visible*");
with Glib; use Glib;
with Glib.Generic_Properties; use Glib.Generic_Properties;
with Glib.Object; use Glib.Object;
with Glib.Properties; use Glib.Properties;
with Glib.Types; use Glib.Types;
with Gtk.Buildable; use Gtk.Buildable;
with Gtk.Widget; use Gtk.Widget;
package Gtk.Calendar is
type Gtk_Calendar_Record is new Gtk_Widget_Record with null record;
type Gtk_Calendar is access all Gtk_Calendar_Record'Class;
type Gtk_Calendar_Display_Options is mod 2 ** Integer'Size;
pragma Convention (C, Gtk_Calendar_Display_Options);
-- These options can be used to influence the display and behaviour of a
-- Gtk.Calendar.Gtk_Calendar.
Show_Heading : constant Gtk_Calendar_Display_Options := 1;
Show_Day_Names : constant Gtk_Calendar_Display_Options := 2;
No_Month_Change : constant Gtk_Calendar_Display_Options := 4;
Show_Week_Numbers : constant Gtk_Calendar_Display_Options := 8;
Show_Details : constant Gtk_Calendar_Display_Options := 32;
---------------
-- Callbacks --
---------------
type Gtk_Calendar_Detail_Func is access function
(Calendar : not null access Gtk_Calendar_Record'Class;
Year : Guint;
Month : Guint;
Day : Guint) return UTF8_String;
-- This kind of functions provide Pango markup with detail information for
-- the specified day. Examples for such details are holidays or
-- appointments. The function returns null when no information is
-- available.
-- Since: gtk+ 2.14
-- "calendar": a Gtk.Calendar.Gtk_Calendar.
-- "year": the year for which details are needed.
-- "month": the month for which details are needed.
-- "day": the day of Month for which details are needed.
----------------------------
-- Enumeration Properties --
----------------------------
package Gtk_Calendar_Display_Options_Properties is
new Generic_Internal_Discrete_Property (Gtk_Calendar_Display_Options);
type Property_Gtk_Calendar_Display_Options is new Gtk_Calendar_Display_Options_Properties.Property;
------------------
-- Constructors --
------------------
procedure Gtk_New (Calendar : out Gtk_Calendar);
procedure Initialize
(Calendar : not null access Gtk_Calendar_Record'Class);
-- Creates a new calendar, with the current date being selected.
function Gtk_Calendar_New return Gtk_Calendar;
-- Creates a new calendar, with the current date being selected.
function Get_Type return Glib.GType;
pragma Import (C, Get_Type, "gtk_calendar_get_type");
-------------
-- Methods --
-------------
procedure Clear_Marks (Calendar : not null access Gtk_Calendar_Record);
-- Remove all visual markers.
procedure Get_Date
(Calendar : not null access Gtk_Calendar_Record;
Year : out Guint;
Month : out Guint;
Day : out Guint);
-- Obtains the selected date from a Gtk.Calendar.Gtk_Calendar.
-- "year": location to store the year as a decimal number (e.g. 2011), or
-- null
-- "month": location to store the month number (between 0 and 11), or null
-- "day": location to store the day number (between 1 and 31), or null
function Get_Day_Is_Marked
(Calendar : not null access Gtk_Calendar_Record;
Day : Guint) return Boolean;
-- Returns if the Day of the Calendar is already marked.
-- Since: gtk+ 3.0
-- "day": the day number between 1 and 31.
function Get_Detail_Height_Rows
(Calendar : not null access Gtk_Calendar_Record) return Gint;
-- Queries the height of detail cells, in rows. See
-- Gtk.Calendar.Gtk_Calendar:detail-width-chars.
-- Since: gtk+ 2.14
procedure Set_Detail_Height_Rows
(Calendar : not null access Gtk_Calendar_Record;
Rows : Gint);
-- Updates the height of detail cells. See
-- Gtk.Calendar.Gtk_Calendar:detail-height-rows.
-- Since: gtk+ 2.14
-- "rows": detail height in rows.
function Get_Detail_Width_Chars
(Calendar : not null access Gtk_Calendar_Record) return Gint;
-- Queries the width of detail cells, in characters. See
-- Gtk.Calendar.Gtk_Calendar:detail-width-chars.
-- Since: gtk+ 2.14
procedure Set_Detail_Width_Chars
(Calendar : not null access Gtk_Calendar_Record;
Chars : Gint);
-- Updates the width of detail cells. See
-- Gtk.Calendar.Gtk_Calendar:detail-width-chars.
-- Since: gtk+ 2.14
-- "chars": detail width in characters.
function Get_Display_Options
(Calendar : not null access Gtk_Calendar_Record)
return Gtk_Calendar_Display_Options;
-- Returns the current display options of Calendar.
-- Since: gtk+ 2.4
procedure Set_Display_Options
(Calendar : not null access Gtk_Calendar_Record;
Flags : Gtk_Calendar_Display_Options);
-- Sets display options (whether to display the heading and the month
-- headings).
-- Since: gtk+ 2.4
-- "flags": the display options to set
procedure Mark_Day
(Calendar : not null access Gtk_Calendar_Record;
Day : Guint);
-- Places a visual marker on a particular day.
-- "day": the day number to mark between 1 and 31.
procedure Select_Day
(Calendar : not null access Gtk_Calendar_Record;
Day : Guint);
-- Selects a day from the current month.
-- "day": the day number between 1 and 31, or 0 to unselect the currently
-- selected day.
procedure Select_Month
(Calendar : not null access Gtk_Calendar_Record;
Month : Guint;
Year : Guint);
-- Shifts the calendar to a different month.
-- "month": a month number between 0 and 11.
-- "year": the year the month is in.
procedure Set_Detail_Func
(Calendar : not null access Gtk_Calendar_Record;
Func : Gtk_Calendar_Detail_Func);
-- Installs a function which provides Pango markup with detail information
-- for each day. Examples for such details are holidays or appointments.
-- That information is shown below each day when
-- Gtk.Calendar.Gtk_Calendar:show-details is set. A tooltip containing with
-- full detail information is provided, if the entire text should not fit
-- into the details area, or if Gtk.Calendar.Gtk_Calendar:show-details is
-- not set.
-- The size of the details area can be restricted by setting the
-- Gtk.Calendar.Gtk_Calendar:detail-width-chars and
-- Gtk.Calendar.Gtk_Calendar:detail-height-rows properties.
-- Since: gtk+ 2.14
-- "func": a function providing details for each day.
generic
type User_Data_Type (<>) is private;
with procedure Destroy (Data : in out User_Data_Type) is null;
package Set_Detail_Func_User_Data is
type Gtk_Calendar_Detail_Func is access function
(Calendar : not null access Gtk.Calendar.Gtk_Calendar_Record'Class;
Year : Guint;
Month : Guint;
Day : Guint;
User_Data : User_Data_Type) return UTF8_String;
-- This kind of functions provide Pango markup with detail information for
-- the specified day. Examples for such details are holidays or
-- appointments. The function returns null when no information is
-- available.
-- Since: gtk+ 2.14
-- "calendar": a Gtk.Calendar.Gtk_Calendar.
-- "year": the year for which details are needed.
-- "month": the month for which details are needed.
-- "day": the day of Month for which details are needed.
-- "user_data": the data passed with Gtk.Calendar.Set_Detail_Func.
procedure Set_Detail_Func
(Calendar : not null access Gtk.Calendar.Gtk_Calendar_Record'Class;
Func : Gtk_Calendar_Detail_Func;
Data : User_Data_Type);
-- Installs a function which provides Pango markup with detail
-- information for each day. Examples for such details are holidays or
-- appointments. That information is shown below each day when
-- Gtk.Calendar.Gtk_Calendar:show-details is set. A tooltip containing
-- with full detail information is provided, if the entire text should
-- not fit into the details area, or if
-- Gtk.Calendar.Gtk_Calendar:show-details is not set.
-- The size of the details area can be restricted by setting the
-- Gtk.Calendar.Gtk_Calendar:detail-width-chars and
-- Gtk.Calendar.Gtk_Calendar:detail-height-rows properties.
-- Since: gtk+ 2.14
-- "func": a function providing details for each day.
-- "data": data to pass to Func invokations.
end Set_Detail_Func_User_Data;
procedure Unmark_Day
(Calendar : not null access Gtk_Calendar_Record;
Day : Guint);
-- Removes the visual marker from a particular day.
-- "day": the day number to unmark between 1 and 31.
----------------
-- Properties --
----------------
-- The following properties are defined for this widget. See
-- Glib.Properties for more information on properties)
Day_Property : constant Glib.Properties.Property_Int;
-- The selected day (as a number between 1 and 31, or 0 to unselect the
-- currently selected day). This property gets initially set to the current
-- day.
Detail_Height_Rows_Property : constant Glib.Properties.Property_Int;
-- Height of a detail cell, in rows. A value of 0 allows any width. See
-- Gtk.Calendar.Set_Detail_Func.
Detail_Width_Chars_Property : constant Glib.Properties.Property_Int;
-- Width of a detail cell, in characters. A value of 0 allows any width.
-- See Gtk.Calendar.Set_Detail_Func.
Month_Property : constant Glib.Properties.Property_Int;
-- The selected month (as a number between 0 and 11). This property gets
-- initially set to the current month.
No_Month_Change_Property : constant Glib.Properties.Property_Boolean;
-- Determines whether the selected month can be changed.
Show_Day_Names_Property : constant Glib.Properties.Property_Boolean;
-- Determines whether day names are displayed.
Show_Details_Property : constant Glib.Properties.Property_Boolean;
-- Determines whether details are shown directly in the widget, or if they
-- are available only as tooltip. When this property is set days with
-- details are marked.
Show_Heading_Property : constant Glib.Properties.Property_Boolean;
-- Determines whether a heading is displayed.
Show_Week_Numbers_Property : constant Glib.Properties.Property_Boolean;
-- Determines whether week numbers are displayed.
Year_Property : constant Glib.Properties.Property_Int;
-- The selected year. This property gets initially set to the current
-- year.
-------------
-- Signals --
-------------
type Cb_Gtk_Calendar_Void is not null access procedure (Self : access Gtk_Calendar_Record'Class);
type Cb_GObject_Void is not null access procedure
(Self : access Glib.Object.GObject_Record'Class);
Signal_Day_Selected : constant Glib.Signal_Name := "day-selected";
procedure On_Day_Selected
(Self : not null access Gtk_Calendar_Record;
Call : Cb_Gtk_Calendar_Void;
After : Boolean := False);
procedure On_Day_Selected
(Self : not null access Gtk_Calendar_Record;
Call : Cb_GObject_Void;
Slot : not null access Glib.Object.GObject_Record'Class;
After : Boolean := False);
-- Emitted when the user selects a day.
Signal_Day_Selected_Double_Click : constant Glib.Signal_Name := "day-selected-double-click";
procedure On_Day_Selected_Double_Click
(Self : not null access Gtk_Calendar_Record;
Call : Cb_Gtk_Calendar_Void;
After : Boolean := False);
procedure On_Day_Selected_Double_Click
(Self : not null access Gtk_Calendar_Record;
Call : Cb_GObject_Void;
Slot : not null access Glib.Object.GObject_Record'Class;
After : Boolean := False);
-- Emitted when the user double-clicks a day.
Signal_Month_Changed : constant Glib.Signal_Name := "month-changed";
procedure On_Month_Changed
(Self : not null access Gtk_Calendar_Record;
Call : Cb_Gtk_Calendar_Void;
After : Boolean := False);
procedure On_Month_Changed
(Self : not null access Gtk_Calendar_Record;
Call : Cb_GObject_Void;
Slot : not null access Glib.Object.GObject_Record'Class;
After : Boolean := False);
-- Emitted when the user clicks a button to change the selected month on a
-- calendar.
Signal_Next_Month : constant Glib.Signal_Name := "next-month";
procedure On_Next_Month
(Self : not null access Gtk_Calendar_Record;
Call : Cb_Gtk_Calendar_Void;
After : Boolean := False);
procedure On_Next_Month
(Self : not null access Gtk_Calendar_Record;
Call : Cb_GObject_Void;
Slot : not null access Glib.Object.GObject_Record'Class;
After : Boolean := False);
-- Emitted when the user switched to the next month.
Signal_Next_Year : constant Glib.Signal_Name := "next-year";
procedure On_Next_Year
(Self : not null access Gtk_Calendar_Record;
Call : Cb_Gtk_Calendar_Void;
After : Boolean := False);
procedure On_Next_Year
(Self : not null access Gtk_Calendar_Record;
Call : Cb_GObject_Void;
Slot : not null access Glib.Object.GObject_Record'Class;
After : Boolean := False);
-- Emitted when user switched to the next year.
Signal_Prev_Month : constant Glib.Signal_Name := "prev-month";
procedure On_Prev_Month
(Self : not null access Gtk_Calendar_Record;
Call : Cb_Gtk_Calendar_Void;
After : Boolean := False);
procedure On_Prev_Month
(Self : not null access Gtk_Calendar_Record;
Call : Cb_GObject_Void;
Slot : not null access Glib.Object.GObject_Record'Class;
After : Boolean := False);
-- Emitted when the user switched to the previous month.
Signal_Prev_Year : constant Glib.Signal_Name := "prev-year";
procedure On_Prev_Year
(Self : not null access Gtk_Calendar_Record;
Call : Cb_Gtk_Calendar_Void;
After : Boolean := False);
procedure On_Prev_Year
(Self : not null access Gtk_Calendar_Record;
Call : Cb_GObject_Void;
Slot : not null access Glib.Object.GObject_Record'Class;
After : Boolean := False);
-- Emitted when user switched to the previous year.
----------------
-- Interfaces --
----------------
-- This class implements several interfaces. See Glib.Types
--
-- - "Buildable"
package Implements_Gtk_Buildable is new Glib.Types.Implements
(Gtk.Buildable.Gtk_Buildable, Gtk_Calendar_Record, Gtk_Calendar);
function "+"
(Widget : access Gtk_Calendar_Record'Class)
return Gtk.Buildable.Gtk_Buildable
renames Implements_Gtk_Buildable.To_Interface;
function "-"
(Interf : Gtk.Buildable.Gtk_Buildable)
return Gtk_Calendar
renames Implements_Gtk_Buildable.To_Object;
private
Year_Property : constant Glib.Properties.Property_Int :=
Glib.Properties.Build ("year");
Show_Week_Numbers_Property : constant Glib.Properties.Property_Boolean :=
Glib.Properties.Build ("show-week-numbers");
Show_Heading_Property : constant Glib.Properties.Property_Boolean :=
Glib.Properties.Build ("show-heading");
Show_Details_Property : constant Glib.Properties.Property_Boolean :=
Glib.Properties.Build ("show-details");
Show_Day_Names_Property : constant Glib.Properties.Property_Boolean :=
Glib.Properties.Build ("show-day-names");
No_Month_Change_Property : constant Glib.Properties.Property_Boolean :=
Glib.Properties.Build ("no-month-change");
Month_Property : constant Glib.Properties.Property_Int :=
Glib.Properties.Build ("month");
Detail_Width_Chars_Property : constant Glib.Properties.Property_Int :=
Glib.Properties.Build ("detail-width-chars");
Detail_Height_Rows_Property : constant Glib.Properties.Property_Int :=
Glib.Properties.Build ("detail-height-rows");
Day_Property : constant Glib.Properties.Property_Int :=
Glib.Properties.Build ("day");
end Gtk.Calendar;