------------------------------------------------------------------------------
-- --
-- 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>
-- The GActionMap interface is implemented by Glib.Action_Group.Gaction_Group
-- implementations that operate by containing a number of named
-- Glib.Action.Gaction instances, such as
-- Glib.Simple_Action_Group.Gsimple_Action_Group.
--
-- One useful application of this interface is to map the names of actions
-- from various action groups to unique, prefixed names (e.g. by prepending
-- "app." or "win."). This is the motivation for the 'Map' part of the
-- interface name.
--
-- </description>
pragma Ada_2005;
pragma Warnings (Off, "*is already use-visible*");
with Glib; use Glib;
with Glib.Action; use Glib.Action;
with Glib.Simple_Action; use Glib.Simple_Action;
with Glib.Types; use Glib.Types;
with Glib.Variant; use Glib.Variant;
with Interfaces.C.Strings; use Interfaces.C.Strings;
package Glib.Action_Map is
type Gaction_Map is new Glib.Types.GType_Interface;
Null_Gaction_Map : constant Gaction_Map;
type GAction_Entry is private;
function From_Object_Free (B : access GAction_Entry) return GAction_Entry;
pragma Inline (From_Object_Free);
-- This struct defines a single action. It is for use with
-- Glib.Action_Map.Add_Action_Entries.
--
-- The order of the items in the structure are intended to reflect
-- frequency of use. It is permissible to use an incomplete initialiser in
-- order to leave some of the later values as null. All values after Name
-- are optional. Additional optional fields may be added in the future.
--
-- See Glib.Action_Map.Add_Action_Entries for an example.
type GAction_Entry_Array is array (Natural range <>) of GAction_Entry;
------------------
-- Constructors --
------------------
function Get_Type return Glib.GType;
pragma Import (C, Get_Type, "g_action_map_get_type");
-------------
-- Methods --
-------------
procedure Add_Action (Self : Gaction_Map; Action : Glib.Action.Gaction);
pragma Import (C, Add_Action, "g_action_map_add_action");
-- Adds an action to the Action_Map.
-- If the action map already contains an action with the same name as
-- Action then the old action is dropped from the action map.
-- The action map takes its own reference on Action.
-- Since: gtk+ 2.32
-- "action": a Glib.Action.Gaction
procedure Add_Action_Entries
(Self : Gaction_Map;
Entries : GAction_Entry_Array;
User_Data : System.Address := System.Null_Address);
-- A convenience function for creating multiple
-- Glib.Simple_Action.Gsimple_Action instances and adding them to a
-- Glib.Action_Map.Gaction_Map.
-- Each action is constructed as per one Glib.Action_Map.GAction_Entry.
-- == Using Glib.Action_Map.Add_Action_Entries ==
-- static void
-- activate_quit (GSimpleAction *simple,
-- GVariant *parameter,
-- gpointer user_data)
-- {
-- exit (0);
-- }
-- static void
-- activate_print_string (GSimpleAction *simple,
-- GVariant *parameter,
-- gpointer user_data)
-- {
-- g_print ("%s\n", g_variant_get_string (parameter, NULL));
-- }
-- static GActionGroup *
-- create_action_group (void)
-- {
-- const GActionEntry entries[] = {
-- { "quit", activate_quit },
-- { "print-string", activate_print_string, "s" }
-- };
-- GSimpleActionGroup *group;
-- group = g_simple_action_group_new ();
-- g_action_map_add_action_entries (G_ACTION_MAP (group), entries, G_N_ELEMENTS (entries), NULL);
-- return G_ACTION_GROUP (group);
-- }
-- Since: gtk+ 2.32
-- "entries": a pointer to the first item in an array of
-- Glib.Action_Map.GAction_Entry structs
-- "user_data": the user data for signal connections
function Lookup_Action
(Self : Gaction_Map;
Action_Name : UTF8_String) return Glib.Action.Gaction;
-- Looks up the action with the name Action_Name in Action_Map.
-- If no such action exists, returns null.
-- Since: gtk+ 2.32
-- "action_name": the name of an action
procedure Remove_Action (Self : Gaction_Map; Action_Name : UTF8_String);
-- Removes the named action from the action map.
-- If no action of this name is in the map then nothing happens.
-- Since: gtk+ 2.32
-- "action_name": the name of the action
----------------------
-- GtkAda additions --
----------------------
type Activate_Callback is access procedure
(Action : access Glib.Simple_Action.Gsimple_Action;
Parameter : Glib.Variant.Gvariant;
Data : System.Address);
pragma Convention (C, Activate_Callback);
type Change_State_Callback is access procedure
(Action : access Glib.Simple_Action.Gsimple_Action;
Parameter : Glib.Variant.Gvariant;
Data : System.Address);
pragma Convention (C, Change_State_Callback);
function Build
(Name : String;
Activate : Activate_Callback := null;
Parameter_Type : String := "";
State : String := "";
Change_State : Change_State_Callback := null)
return GAction_Entry;
-- Return a newly allocation action entry.
-- This will be freed by the the action_map when needed.
--
-- Name is the name of the action.
-- Activate is the callback to connect to the "activate" signal of
-- the action.
-- Parameter_Type is the type of the parameter that must be passed
-- to the activate function for this action, given as a single
-- Gvariant (or the empty string for no parameter).
-- State is the initial state of this action, given in Gvariant
-- text format. The state is parsed with no extra type information
-- so type tags must be added to the string if they are necessary.
-- Change_State is the callback for the "change-state" signal.
----------------
-- Interfaces --
----------------
-- This class implements several interfaces. See Glib.Types
--
-- - "Gaction_Map"
function "+" (W : Gaction_Map) return Gaction_Map;
pragma Inline ("+");
private
type GAction_Entry is record
Name : Interfaces.C.Strings.chars_ptr;
Activate : System.Address;
Parameter_Type : Interfaces.C.Strings.chars_ptr;
State : Interfaces.C.Strings.chars_ptr;
Change_State : System.Address;
Padding : array_of_gsize (1 .. 3);
end record;
pragma Convention (C, GAction_Entry);
Null_Gaction_Map : constant Gaction_Map :=
Gaction_Map (Glib.Types.Null_Interface);
end Glib.Action_Map;