1-----------------------------------------------------------------------
2--               GtkAda - Ada95 binding for Gtk+/Gnome               --
3--                                                                   --
4--   Copyright (C) 1998-2000 E. Briot, J. Brobecker and A. Charlet   --
5--                Copyright (C) 2000-2013, AdaCore                   --
6--                                                                   --
7-- This library is free software; you can redistribute it and/or     --
8-- modify it under the terms of the GNU General Public               --
9-- License as published by the Free Software Foundation; either      --
10-- version 2 of the License, or (at your option) any later version.  --
11--                                                                   --
12-- This library is distributed in the hope that it will be useful,   --
13-- but WITHOUT ANY WARRANTY; without even the implied warranty of    --
14-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU --
15-- General Public License for more details.                          --
16--                                                                   --
17-- You should have received a copy of the GNU General Public         --
18-- License along with this library; if not, write to the             --
19-- Free Software Foundation, Inc., 59 Temple Place - Suite 330,      --
20-- Boston, MA 02111-1307, USA.                                       --
21--                                                                   --
22-- As a special exception, if other files instantiate generics from  --
23-- this unit, or you link this unit with other files to produce an   --
24-- executable, this  unit  does not  by itself cause  the resulting  --
25-- executable to be covered by the GNU General Public License. This  --
26-- exception does not however invalidate any other reasons why the   --
27-- executable file  might be covered by the  GNU Public License.     --
28-----------------------------------------------------------------------
29
30--  <description>
31--  A Gtk_Radio_Action is similar to Gtk_Radio_Menu_Item. A number of radio
32--  actions can be linked together so that only one may be active at any one
33--  time.
34--
35--  </description>
36--  <group>Action-based menus</group>
37--  <see>Gtk_Action</see>
38
39pragma Warnings (Off, "*is already use-visible*");
40with Glib;              use Glib;
41with Glib.Properties;   use Glib.Properties;
42with Glib.Types;        use Glib.Types;
43with Gtk.Buildable;     use Gtk.Buildable;
44with Gtk.Toggle_Action; use Gtk.Toggle_Action;
45with Gtk.Widget;        use Gtk.Widget;
46
47package Gtk.Radio_Action is
48
49   type Gtk_Radio_Action_Record is new Gtk_Toggle_Action_Record with null record;
50   type Gtk_Radio_Action is access all Gtk_Radio_Action_Record'Class;
51
52   ------------------
53   -- Constructors --
54   ------------------
55
56   procedure Gtk_New
57      (Action   : out Gtk_Radio_Action;
58       Name     : UTF8_String;
59       Label    : UTF8_String := "";
60       Tooltip  : UTF8_String := "";
61       Stock_Id : UTF8_String := "";
62       Value    : Gint);
63   procedure Initialize
64      (Action   : access Gtk_Radio_Action_Record'Class;
65       Name     : UTF8_String;
66       Label    : UTF8_String := "";
67       Tooltip  : UTF8_String := "";
68       Stock_Id : UTF8_String := "";
69       Value    : Gint);
70   --  Creates a new Gtk.Radio_Action.Gtk_Radio_Action object. To add the
71   --  action to a Gtk.Actiongroup.Gtk_Actiongroup and set the accelerator for
72   --  the action, call Gtk.Action_Group.Add_Action_With_Accel.
73   --  Since: gtk+ 2.4
74   --  "name": A unique name for the action
75   --  "label": The label displayed in menu items and on buttons, or null
76   --  "tooltip": A tooltip for this action, or null
77   --  "stock_id": The stock icon to display in widgets representing this
78   --  action, or null
79   --  "value": The value which Gtk.Radio_Action.Get_Current_Value should
80   --  return if this action is selected.
81
82   function Get_Type return Glib.GType;
83   pragma Import (C, Get_Type, "gtk_radio_action_get_type");
84
85   -------------
86   -- Methods --
87   -------------
88
89   function Get_Current_Value
90      (Action : access Gtk_Radio_Action_Record) return Gint;
91   procedure Set_Current_Value
92      (Action        : access Gtk_Radio_Action_Record;
93       Current_Value : Gint);
94   --  Sets the currently active group member to the member with value
95   --  property Current_Value.
96   --  Since: gtk+ 2.10
97   --  "current_value": the new value
98
99   function Get_Group
100      (Action : access Gtk_Radio_Action_Record)
101       return Gtk.Widget.Widget_SList.GSlist;
102   procedure Set_Group
103      (Action : access Gtk_Radio_Action_Record;
104       Group  : Gtk.Widget.Widget_SList.GSlist);
105   --  Sets the radio group for the radio action object.
106   --  A common way to set up a group of radio group is the following:
107   --       Group  : GSlist := null;
108   --       Action : Gtk_Radio_Action;
109   --       while ... loop
110   --          Gtk_New (Action, ...);
111   --          Set_Group (Action, Group);
112   --          Group := Get_Group (Action);
113   --       end loop;
114   --  Since: gtk+ 2.4
115   --  "group": a list representing a radio group
116
117   ----------------
118   -- Interfaces --
119   ----------------
120   --  This class implements several interfaces. See Glib.Types
121   --
122   --  - "Buildable"
123
124   package Implements_Buildable is new Glib.Types.Implements
125     (Gtk.Buildable.Gtk_Buildable, Gtk_Radio_Action_Record, Gtk_Radio_Action);
126   function "+"
127     (Widget : access Gtk_Radio_Action_Record'Class)
128   return Gtk.Buildable.Gtk_Buildable
129   renames Implements_Buildable.To_Interface;
130   function "-"
131     (Interf : Gtk.Buildable.Gtk_Buildable)
132   return Gtk_Radio_Action
133   renames Implements_Buildable.To_Object;
134
135   ----------------
136   -- Properties --
137   ----------------
138   --  The following properties are defined for this widget. See
139   --  Glib.Properties for more information on properties)
140   --
141   --  Name: Current_Value_Property
142   --  Type: Gint
143   --  Flags: read-write
144   --  The value property of the currently active member of the group to which
145   --  this action belongs.
146   --
147   --  Name: Group_Property
148   --  Type: Gtk_Radio_Action
149   --  Flags: write
150   --  Sets a new group for a radio action.
151   --
152   --  Name: Value_Property
153   --  Type: Gint
154   --  Flags: read-write
155   --  The value is an arbitrary integer which can be used as a convenient way
156   --  to determine which action in the group is currently active in an
157   --  ::activate or ::changed signal handler. See
158   --  Gtk.Radio_Action.Get_Current_Value and GtkRadioActionEntry for
159   --  convenient ways to get and set this property.
160
161   Current_Value_Property : constant Glib.Properties.Property_Int;
162   Group_Property : constant Glib.Properties.Property_Object;
163   Value_Property : constant Glib.Properties.Property_Int;
164
165   -------------
166   -- Signals --
167   -------------
168   --  The following new signals are defined for this widget:
169   --
170   --  "changed"
171   --     procedure Handler
172   --       (Self    : access Gtk_Radio_Action_Record'Class;
173   --        Current : Gtk_Radio_Action);
174   --    --  "current": the member of Action<!-- -->s group which has just been
175   --    --  activated
176   --  The ::changed signal is emitted on every member of a radio group when
177   --  the active member is changed. The signal gets emitted after the
178   --  ::activate signals for the previous and current active members.
179
180   Signal_Changed : constant Glib.Signal_Name := "changed";
181
182private
183   Current_Value_Property : constant Glib.Properties.Property_Int :=
184     Glib.Properties.Build ("current-value");
185   Group_Property : constant Glib.Properties.Property_Object :=
186     Glib.Properties.Build ("group");
187   Value_Property : constant Glib.Properties.Property_Int :=
188     Glib.Properties.Build ("value");
189end Gtk.Radio_Action;
190