-----------------------------------------------------------------------
-- GtkAda - Ada95 binding for Gtk+/Gnome --
-- --
-- Copyright (C) 2001-2008, 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. --
-- --
-- --
-- --
-- --
-- --
-- --
-- --
-----------------------------------------------------------------------
--
-- Note: this package need only be used and understood by people who
-- want to create their own new widgets and their associated properties.
-- Normal usage of properties doesn't require any deep understanding of
-- this package.
--
-- This package provides two generic subpackages that make it easy to
-- declare properties.
-- Each of these packages define two types:
--
-- - Property_RO : this type should be used for a read-only property
-- of the given type.
-- - Property : This is for read-write properties
--
-- Each of these two types is associated with one or two primitive
-- operations Get_Property and Set_Property, that allows the modification
-- of properties of this type.
--
-- As a user and creator of new widgets, you should always use the
-- Generic_Enumeration_Property package, since it also registers the
-- enumeration type with gtk+ for a full compatibility with C.
--
-- Glib, the general-purpose library
with Glib.Object;
with Glib.Values;
package Glib.Generic_Properties is
--------------------------------------------------
-- Generic package for discrete type properties --
--------------------------------------------------
-- This package should be used to implement the
-- Get_Property and Set_Property subprograms for all
-- properties related to enumeration types and simple
-- types.
-- This should be used only for types defined in GtkAda
-- or gtk+ themselves, not for types that you define
-- yourself. Use Generic_Discrete_Type instead.
generic
type Discrete_Type is (<>);
package Generic_Internal_Discrete_Property is
type Property_RO is new Glib.Property;
type Property is new Glib.Property;
procedure Set_Property
(Object : access Glib.Object.GObject_Record'Class;
Name : Property;
Value : Discrete_Type);
-- Set a property of Object based on Enumeration_Type.
function Get_Property
(Object : access Glib.Object.GObject_Record'Class;
Name : Property) return Discrete_Type;
pragma Inline (Get_Property);
function Get_Property
(Object : access Glib.Object.GObject_Record'Class;
Name : Property_RO) return Discrete_Type;
-- Get a property from Object
end Generic_Internal_Discrete_Property;
-------------------------------------------------
-- Generic package for enumerations properties --
-------------------------------------------------
-- This package should be used to implement the
-- Get_Property and Set_Property subprograms for all
-- properties related to enumeration types and simple
-- types in users' applications.
-- Name is the name registered in gtk+ for the type. This is also
-- the name that appears in all the tools that use introspection
-- to get information about the widgets and their properties, like
-- GUI builders for instance
--
-- !!IMPORTANT!!: For proper usage of properties based on enumeration
-- types, you must specify the Convention C on the type:
-- pragma Convention (C, Enumeration_Type);
generic
Name : String;
type Enumeration is (<>);
package Generic_Enumeration_Property is
-----------------
-- Properties --
-----------------
package Properties is new Generic_Internal_Discrete_Property
(Enumeration);
type Property_RO is new Properties.Property_RO;
type Property is new Properties.Property;
-----------
-- Types --
-----------
function Get_Type return Glib.GType;
-- Return the internal gtk+ type associated with the Ada enumeration
-- Enumeration. You don't need to use such a function for the types
-- defined in standard in GtkAda. Use Glib.Type_From_Name
-- instead.
function Gnew_Enum
(Name, Nick, Blurb : String;
Default : Enumeration := Enumeration'First;
Flags : Param_Flags := Param_Readable or Param_Writable)
return Param_Spec;
-- Create a new param_spec (to describe properties), based on the
-- Ada enumeration type Enumeration. This function is used when
-- creating the property with Install_Property on an object.
-- Name, Nick and Blurb should describe the property, not its type.
------------
-- Values --
------------
function Get_Enum (Value : Glib.Values.GValue) return Enumeration;
-- Return the enumeration contained in Value, assuming it is of type
-- Enumeration
procedure Set_Enum
(Value : in out Glib.Values.GValue; Enum : Enumeration);
-- Set the enumeration value for Value. This properly initializes the
-- type of Value, so you don't need to call Init yourself.
private
The_Type : Glib.GType := Glib.GType_Invalid;
pragma Import (C, Get_Enum, "g_value_get_enum");
end Generic_Enumeration_Property;
-------------------------------------------------
-- Generic package for record types properties --
-------------------------------------------------
-- This package should be used to implement the
-- Get_Property and Set_Property subprograms for all
-- properties related to record type, like Gdk_Color and
-- Gdk_Rectangle.
-- This should be used only for types defined in GtkAda
-- or gtk+ themselves, not for types that you define
-- yourself.
generic
type Boxed_Type is private;
with function Get_Type return Glib.GType;
with function To_Address
(B : Boxed_Type; Default : System.Address) return System.Address;
-- Convert B into an address that can be passed to gtk+.
-- Default is the address of the parameters passed by the user (since
-- this function cannot return B'Address, where B might be passed by
-- copy).
package Generic_Internal_Boxed_Property is
type Property_RO is new Glib.Property;
type Property is new Glib.Property;
procedure Set_Property
(Object : access Glib.Object.GObject_Record'Class;
Name : Property;
Value : Boxed_Type);
-- Set a property of Object based on Enumeration_Type.
function Get_Property
(Object : access Glib.Object.GObject_Record'Class;
Name : Property) return Boxed_Type;
pragma Inline (Get_Property);
function Get_Property
(Object : access Glib.Object.GObject_Record'Class;
Name : Property_RO) return Boxed_Type;
-- Get a property from Object.
-- Unset_Value is raised if the property is not set
procedure Set_Value
(Value : out Glib.Values.GValue;
Val : Boxed_Type);
-- Store Val in Value. The latter is properly initialized, and reference
-- counting is handled automatically. You must Unset Value when you are
-- done using it.
function Get_Value (Value : Glib.Values.GValue) return Boxed_Type;
-- Get the value stored in Value. Reference counting is automatically
-- handled, and the returned value has been properly referenced.
-- Unset_Value is raised if Value contains no data
end Generic_Internal_Boxed_Property;
Unset_Value : exception;
end Glib.Generic_Properties;