----------------------------------------------------------------------- -- GtkAda - Ada95 binding for Gtk+/Gnome -- -- -- -- Copyright (C) 2001-2003, ACT-Europe -- -- Copyright (C) 2010, 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. -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- ----------------------------------------------------------------------- -- -- Properties are a fully general way to modify the appareance or behavior -- of widgets. Most of the time, there exists a faster way to modify the -- widget in the same fashion (for instance a direct call to a primitive -- subprogram). However, the properties provide a general scheme to modify -- these attributes. -- For instance, they can be used to provide introspection on the widget -- (to automatically retrieve the attributes that can be modified), or if -- you need to implement a tool like a GUI-Builder that is able to -- manipulate any widget, even those that didn't exist when the tool was -- written. -- -- Two functions are provided for each type of property: Set_Property and -- Get_Property, which allow easy modification of specific widget -- properties. For instance, you could do the following: -- declare -- Button : Gtk_Button; -- begin -- Gtk_New (Button, "old label"); -- Set_Property (Button, Label_Property, "new label"); -- end; -- to modify the label of a button. -- -- Likewise, you can retrieve the current label with: -- Current : String := Get_Property (Button, Label_Property); -- -- Dispatching is used ensure type-safety while using properties. The -- appropriate Set_Property/Get_Property functions are called depending -- on the type of the property you are trying to use. This is checked -- statically by the compiler, which provides additional type-safety -- compared to the C library. -- -- Note that some properties are read-only, and thus do not have the -- Set_Property subprogram defined. -- -- When a property is modified, the signal "notify::" is emitted, -- for instance, "notify::label" for a gtk_button. This is a standard gtk+ -- signal to which you can connect with the subprograms in gtk-handlers.ads -- -- 1.3.4 -- Glib, the general-purpose library with Glib.Object; with Glib.Generic_Properties; use Glib.Generic_Properties; pragma Elaborate_All (Glib.Generic_Properties); with System; with Glib.Values; package Glib.Properties is -- -- Definition of the types and subprograms. -- You can ignore this section. package Char_Properties is new Generic_Internal_Discrete_Property (Glib.Gchar); package Uchar_Properties is new Generic_Internal_Discrete_Property (Glib.Guchar); package Int_Properties is new Generic_Internal_Discrete_Property (Glib.Gint); package Uint_Properties is new Generic_Internal_Discrete_Property (Glib.Guint); package Long_Properties is new Generic_Internal_Discrete_Property (Glib.Glong); package Ulong_Properties is new Generic_Internal_Discrete_Property (Glib.Gulong); package Unichar_Properties is new Generic_Internal_Discrete_Property (Glib.Gunichar); -- -- Predefined types of properties. Additional types are available -- for most of the standard enumeration types, and you can create -- your own types (see Glib.Properties). type Property_Char is new Char_Properties.Property; type Property_Char_RO is new Char_Properties.Property_RO; type Property_Uchar is new Uchar_Properties.Property; type Property_Uchar_RO is new Uchar_Properties.Property_RO; type Property_Int is new Int_Properties.Property; type Property_Uint_RO is new Uint_Properties.Property_RO; type Property_Uint is new Uint_Properties.Property; type Property_Long_RO is new Long_Properties.Property_RO; type Property_Long is new Long_Properties.Property; type Property_Ulong_RO is new Ulong_Properties.Property_RO; type Property_Ulong is new Ulong_Properties.Property; type Property_Unichar is new Unichar_Properties.Property; type Property_C_Proxy is new Glib.Property; type Property_String_RO is new Glib.Property; type Property_String_WO is new Glib.Property; type Property_String is new Glib.Property; type Property_Boolean is new Glib.Property; type Property_Object is new Glib.Property; type Property_Object_WO is new Glib.Property; type Property_Address is new Glib.Property; type Property_Float is new Glib.Property; type Property_Double is new Glib.Property; type Property_Enum is new Glib.Property; type Property_Boxed is new Glib.Property; -- General properties getter procedure Set_Property (Object : access Glib.Object.GObject_Record'Class; Name : String; Value : in out Glib.Values.GValue); procedure Get_Property (Object : access Glib.Object.GObject_Record'Class; Name : String; Value : in out Glib.Values.GValue); -- Get the property. Value must have been initialized first with the -- expected type for the property, as in: -- Value : GValue; -- Init (Value, Value_Type (Pspec)); -- Get_Property (Object, Pspec_Name (Pspec), Value); -- If you do not have a Param_Spec, this can be replaced with: -- Init (Value, GType_Int); -- Get_Property (Object, Property_Name (Property), Value); -- Value must be Unset by the caller to free memory -- Special handling of string properties procedure Set_Property (Object : access Glib.Object.GObject_Record'Class; Name : Property_String; Value : String); procedure Set_Property (Object : access Glib.Object.GObject_Record'Class; Name : Property_String_WO; Value : String); function Get_Property (Object : access Glib.Object.GObject_Record'Class; Name : Property_String) return String; function Get_Property (Object : access Glib.Object.GObject_Record'Class; Name : Property_String_RO) return String; -- Special handling of boolean properties procedure Set_Property (Object : access Glib.Object.GObject_Record'Class; Name : Property_Boolean; Value : Boolean); function Get_Property (Object : access Glib.Object.GObject_Record'Class; Name : Property_Boolean) return Boolean; -- Special handling of object properties procedure Set_Property (Object : access Glib.Object.GObject_Record'Class; Name : Property_Object; Value : access Glib.Object.GObject_Record'Class); function Get_Property (Object : access Glib.Object.GObject_Record'Class; Name : Property_Object) return Glib.Object.GObject; procedure Set_Property (Object : access Glib.Object.GObject_Record'Class; Name : Property_Object_WO; Value : access Glib.Object.GObject_Record'Class); -- Special handling of address properties procedure Set_Property (Object : access Glib.Object.GObject_Record'Class; Name : Property_Address; Value : System.Address); function Get_Property (Object : access Glib.Object.GObject_Record'Class; Name : Property_Address) return System.Address; -- Special handling of float properties procedure Set_Property (Object : access Glib.Object.GObject_Record'Class; Name : Property_Float; Value : Gfloat); function Get_Property (Object : access Glib.Object.GObject_Record'Class; Name : Property_Float) return Gfloat; -- Special handling of double properties procedure Set_Property (Object : access Glib.Object.GObject_Record'Class; Name : Property_Double; Value : Gdouble); function Get_Property (Object : access Glib.Object.GObject_Record'Class; Name : Property_Double) return Gdouble; -- Special handling of c_proxy properties procedure Set_Property (Object : access Glib.Object.GObject_Record'Class; Name : Property_C_Proxy; Value : C_Proxy); function Get_Property (Object : access Glib.Object.GObject_Record'Class; Name : Property_C_Proxy) return C_Proxy; end Glib.Properties;