----------------------------------------------------------------------- -- GtkAda - Ada95 binding for Gtk+/Gnome -- -- -- -- Copyright (C) 2006-2007, AdaCore -- -- -- -- This library is free software; you can redistribute it and/or -- -- modify it under the terms of the GNU General Public -- -- License as published by the Free Software Foundation; either -- -- version 2 of the License, 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 -- -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -- -- General Public License for more details. -- -- -- -- You should have received a copy of the GNU General Public -- -- License along with this library; if not, write to the -- -- Free Software Foundation, Inc., 59 Temple Place - Suite 330, -- -- Boston, MA 02111-1307, USA. -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- ----------------------------------------------------------------------- -- -- Actions are organised into groups. An action group is essentially a map -- from names to Gtk_Action objects. -- -- All actions that would make sense to use in a particular context should be -- in a single group. Multiple action groups may be used for a particular user -- interface. In fact, it is expected that most nontrivial applications will -- make use of multiple groups. For example, in an application that can edit -- multiple documents, one group holding global actions (e.g. quit, about, -- new), and one group per document holding actions that act on that document -- (eg. save, cut/copy/paste, etc). Each window's menus would be constructed -- from a combination of two action groups. -- -- Accelerators are handled by the GTK+ accelerator map. All actions are -- assigned an accelerator path (which normally has the form -- "/group-name/action-name") and a shortcut is associated with this -- accelerator path. All menu items and tool items take on this accelerator -- path. The GTK+ accelerator map code makes sure that the correct shortcut is -- displayed next to the menu item. -- -- 2.8.17 -- Action-based menus with Glib.Object; with Glib.Properties; with Gtk.Action; with Gtk.Object; with Interfaces.C.Strings; with System; package Gtk.Action_Group is type Gtk_Action_Group_Record is new Gtk.Object.Gtk_Object_Record with null record; type Gtk_Action_Group is access all Gtk_Action_Group_Record'Class; procedure Gtk_New (Group : out Gtk_Action_Group; Name : String); procedure Initialize (Group : access Gtk_Action_Group_Record'Class; Name : String); -- Creates a new Gtk_Action_Group object. The name of the action group -- is used when associating keybindings with the actions. function Get_Type return GType; -- Return the internal value associated with a Gtk_Action_Group. function Get_Action (Action_Group : access Gtk_Action_Group_Record; Action_Name : String) return Gtk.Action.Gtk_Action; -- Looks up an action in the action group by name, or null if no such -- action exists. function Get_Name (Action_Group : access Gtk_Action_Group_Record) return String; -- Gets the name of the action group. procedure Set_Sensitive (Action_Group : access Gtk_Action_Group_Record; Sensitive : Boolean); function Get_Sensitive (Action_Group : access Gtk_Action_Group_Record) return Boolean; -- Returns True if the group is sensitive. The constituent actions -- can only be logically sensitive (see Gtk.Action.Is_Sensitive) if -- they are sensitive (see Gtk.Action.Get_Sensitive) and their group -- is sensitive. procedure Set_Visible (Action_Group : access Gtk_Action_Group_Record; Visible : Boolean); function Get_Visible (Action_Group : access Gtk_Action_Group_Record) return Boolean; -- Returns True if the group is visible. The constituent actions -- can only be logically visible (see Gtk.Action.Is_Visible) if -- they are visible (see Gtk.Action.Get_Visible) and their group -- is visible. function List_Actions (Action_Group : access Gtk_Action_Group_Record) return Glib.Object.Object_Simple_List.Glist; -- Lists the actions in the action group. The returned list must be freed -- by the user. procedure Set_Translation_Domain (Action_Group : access Gtk_Action_Group_Record; Domain : String); -- Sets the translation domain and uses dgettext() for translating the -- Label and Tooltip of Gtk_Action_Entry's added by Add_Actions. --------------------------------- -- Adding and removing actions -- --------------------------------- type Action_Entry is private; type Radio_Action_Entry is private; type Toggle_Action_Entry is private; -- An opaque structure describing an action entry type Action_Entry_Array is array (Natural range <>) of Action_Entry; type Radio_Action_Entry_Array is array (Natural range <>) of Radio_Action_Entry; type Toggle_Action_Entry_Array is array (Natural range <>) of Toggle_Action_Entry; type Action_Callback is access procedure (Action : System.Address; User_Data : System.Address); pragma Convention (C, Action_Callback); -- Profile of callbacks when an action is activated. You must convert -- Action to a Gtk_Action through: -- Act : constant Gtk_Action := Convert (Action); type Radio_Action_Callback is access procedure (Group : access Gtk.Action.Gtk_Action_Record'Class; Current : access Gtk.Action.Gtk_Action_Record'Class; User_Data : System.Address); -- Called when an element of the Gtk_Radio_Action group is selected function Create (Name : String; Label : String := ""; Stock_Id : String := ""; Accelerator : String := ""; Tooltip : String := ""; Callback : Action_Callback := null) return Action_Entry; -- Create a new Action_Entry. The returned value must be freed by the -- caller. function Create (Name : String; Label : String := ""; Stock_Id : String := ""; Accelerator : String := ""; Tooltip : String := ""; Callback : Action_Callback := null; Is_Active : Boolean := True) return Toggle_Action_Entry; -- Create a new Action_Entry. The returned value must be freed by the -- caller. Is_Active is the initial state of the button. function Create (Name : String; Label : String; Stock_Id : String := ""; Accelerator : String := ""; Tooltip : String := ""; Value : Glib.Gint) return Radio_Action_Entry; -- Create a new Radio_Action_Entry. Value is the value set on the radio -- action (see Gtk.Radio_Action.Get_Current_Value) procedure Free (Action : in out Action_Entry); procedure Free (Actions : in out Action_Entry_Array); procedure Free (Action : in out Radio_Action_Entry); procedure Free (Actions : in out Radio_Action_Entry_Array); procedure Free (Action : in out Toggle_Action_Entry); procedure Free (Actions : in out Toggle_Action_Entry_Array); -- Free Action and Actions procedure Add_Action (Action_Group : access Gtk_Action_Group_Record; Action : access Gtk.Action.Gtk_Action_Record'Class); -- Adds an action object to the action group. Note that this function -- does not set up the accel path of the action, which can lead to problems -- if a user tries to modify the accelerator of a menuitem associated with -- the action. Therefore you must either set the accel path yourself with -- Gtk.Action.Set_Accel_Path, or use Add_Action_With_Accel. procedure Remove_Action (Action_Group : access Gtk_Action_Group_Record; Action : access Gtk.Action.Gtk_Action_Record'Class); -- Removes an action object from the action group. procedure Add_Action_With_Accel (Action_Group : access Gtk_Action_Group_Record; Action : access Gtk.Action.Gtk_Action_Record'Class; Accelerator : String := ""); -- Adds an action object to the action group and sets up the accelerator. -- If Accelerator is unspecified, attempts to use the accelerator -- associated with the stock_id of the action. -- Accel paths are set to /group-name/action-name. procedure Add_Actions (Action_Group : access Gtk_Action_Group_Record; Entries : Action_Entry_Array; User_Data : System.Address := System.Null_Address; Destroy : Glib.G_Destroy_Notify_Address := null); -- This is a convenience function to create a number of actions and add -- them to the action group. -- Destroy is called when User_Data is no longer needed. -- -- The "activate" signals of the actions are connected to the callbacks in -- Entries, and their accel paths are set to -- /group-name/action-name. procedure Add_Radio_Actions (Action_Group : access Gtk_Action_Group_Record; Entries : Radio_Action_Entry_Array; Value : Glib.Gint; On_Change : Radio_Action_Callback; User_Data : System.Address := System.Null_Address; Destroy : Glib.G_Destroy_Notify_Address := null); -- This is a convenience routine to create a group of radio actions and -- add them to the action group. -- -- The "changed" signal of the first radio action is connected to the -- On_Change callback and the accel paths of the actions are set to -- /group-name/action-name -- -- Value is the value of the action to activate initially, or -1 if no -- action should be activated. -- Destroy is called when User_Data is no longer necessary. procedure Add_Toggle_Actions (Action_Group : access Gtk_Action_Group_Record; Entries : Toggle_Action_Entry_Array; User_Data : System.Address := System.Null_Address; Destroy : Glib.G_Destroy_Notify_Address := null); -- This is a convenience function to create a number of toggle actions and -- add them to the action group. -- The "activate" signals of the actions are connected to the callbacks and -- their accel paths are set to /group-name/action-name. -- Destroy is called when User_Data is no longer necessary. ---------------- -- Properties -- ---------------- -- -- The following properties are defined for this widget. See -- Glib.Properties for more information on properties. -- -- Name: Name_Property -- Type: String -- Descr: A name for the action group. -- -- Name: Sensitive_Property -- Type: Boolean -- Descr: Whether the action group is enabled. -- -- Name: Visible_Property -- Type: Boolean -- Descr: Whether the action group is visible. -- -- Name_Property : constant Glib.Properties.Property_String; Sensitive_Property : constant Glib.Properties.Property_Boolean; Visible_Property : constant Glib.Properties.Property_Boolean; ------------- -- Signals -- ------------- -- -- The following new signals are defined for this widget: -- -- - "connect_proxy" -- procedure Handler -- (Group : access Gtk_Action_Group_Record'Class; -- Action : access Gtk_Action_Record'Class; -- Proxy : access Gtk_Widget_Record'Class); -- The connect_proxy signal is emitted after connecting a proxy to an -- action in the group. Note that the proxy may have been connected to a -- different action before. -- This is intended for simple customizations for which a custom action -- class would be too clumsy, e.g. showing tooltips for menuitems in the -- statusbar. -- Gtk_UI_Manager proxies the signal and provides global notification -- just before any action is connected to a proxy, which is probably more -- convenient to use. -- -- - "disconnect_proxy" -- procedure Handler -- (Group : access Gtk_Action_Group_Record'Class; -- Action : access Gtk_Action_Record'Class; -- Proxy : access Gtk_Widget_Record'Class); -- The disconnect_proxy signal is emitted after disconnecting a proxy -- from an action in the group. -- Gtk_UI_Manager proxies the signal and provides global notification -- just before any action is connected to a proxy, which is probably more -- convenient to use. -- -- - "post_activate" -- procedure Handler -- (Group : access Gtk_Action_Group_Record'Class; -- Action : access Gtk_Action_Record'Class); -- The post_activate signal is emitted just after the action in the -- action_group is activated -- This is intended for Gtk_UI_Manager to proxy the signal and provide -- global notification just after any action is activated. -- -- - "pre_activate" -- procedure Handler -- (Group : access Gtk_Action_Group_Record'Class; -- Action : access Gtk_Action_Record'Class); -- The post_activate signal is emitted just before the action in the -- action_group is activated -- This is intended for Gtk_UI_Manager to proxy the signal and provide -- global notification just after any action is activated. -- Signal_Connect_Proxy : constant Glib.Signal_Name := "connect_proxy"; Signal_Disconnect_Proxy : constant Glib.Signal_Name := "disconnect_proxy"; Signal_Post_Activate : constant Glib.Signal_Name := "post_activate"; Signal_Pre_Activate : constant Glib.Signal_Name := "pre_activate"; private Name_Property : constant Glib.Properties.Property_String := Glib.Properties.Build ("name"); Sensitive_Property : constant Glib.Properties.Property_Boolean := Glib.Properties.Build ("sensitive"); Visible_Property : constant Glib.Properties.Property_Boolean := Glib.Properties.Build ("visible"); type Action_Entry is record Name : Interfaces.C.Strings.chars_ptr; Stock_Id : Interfaces.C.Strings.chars_ptr; Label : Interfaces.C.Strings.chars_ptr; Accelerator : Interfaces.C.Strings.chars_ptr; Tooltip : Interfaces.C.Strings.chars_ptr; Callback : Action_Callback; end record; pragma Convention (C, Action_Entry); type Radio_Action_Entry is record Name : Interfaces.C.Strings.chars_ptr; Stock_Id : Interfaces.C.Strings.chars_ptr; Label : Interfaces.C.Strings.chars_ptr; Accelerator : Interfaces.C.Strings.chars_ptr; Tooltip : Interfaces.C.Strings.chars_ptr; Value : Glib.Gint; end record; pragma Convention (C, Radio_Action_Entry); type Toggle_Action_Entry is record Name : Interfaces.C.Strings.chars_ptr; Stock_Id : Interfaces.C.Strings.chars_ptr; Label : Interfaces.C.Strings.chars_ptr; Accelerator : Interfaces.C.Strings.chars_ptr; Tooltip : Interfaces.C.Strings.chars_ptr; Callback : Action_Callback; Is_Active : Glib.Gboolean; end record; pragma Convention (C, Toggle_Action_Entry); pragma Import (C, Get_Type, "gtk_action_group_get_type"); end Gtk.Action_Group; -- Binding is through *_full -- No binding: gtk_action_group_add_actions -- No binding: gtk_action_group_add_radio_actions -- No binding: gtk_action_group_add_toggle_actions -- Binding might be needed later -- No binding: gtk_action_group_set_translate_func -- No binding: gtk_action_group_translate_string