----------------------------------------------------------------------- -- GtkAda - Ada95 binding for Gtk+/Gnome -- -- -- -- Copyright (C) 1998-2000 E. Briot, J. Brobecker and A. Charlet -- -- Copyright (C) 2000-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. -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- ----------------------------------------------------------------------- -- -- Base class for widgets that have children. -- -- When writing your own container widgets, you need to fully handle the -- size_allocate event, by also resizing all the children (based on their size -- requisition). The size_allocate event will always be sent to the parent -- when a child calls Gtk.Widget.Queue_Resize. -- -- 2.8.17 -- Abstract base classes with Gdk.Event; with Glib.Properties; with Glib.Values; with Gtk.Adjustment; with Gtk.Enums; with Gtk.Widget; package Gtk.Container is type Gtk_Container_Record is new Gtk.Widget.Gtk_Widget_Record with private; type Gtk_Container is access all Gtk_Container_Record'Class; function Get_Type return Glib.GType; -- Return the internal value associated with a Gtk_Container. procedure Set_Border_Width (Container : access Gtk_Container_Record; Border_Width : Guint); function Get_Border_Width (Container : access Gtk_Container_Record) return Guint; -- Modify the size of the frame that surrounds the widget. -- The exact visual impact depends on the specific widget class. procedure Add (Container : access Gtk_Container_Record; Widget : access Gtk.Widget.Gtk_Widget_Record'Class); -- Add a new child to the container. -- Note that some containers can have only one child. Nothing is done -- if there is already a child. -- This basically sends the "add" signal (see below) procedure Remove (Container : access Gtk_Container_Record; Widget : access Gtk.Widget.Gtk_Widget_Record'Class); -- Removes Widget from Container. Widget must be inside Container. -- Note that Container will own a reference to Widget, and that this -- may be the last reference held; so removing a widget from its -- container can destroy that widget. If you want to use Widget -- again, you need to add a reference to it while it's not inside -- a container, using Glib.Object.Ref. If you don't want to use Widget -- again it's usually more efficient to simply destroy it directly -- using Gtk.Widget.Destroy since this will remove it from the -- container and help break any circular reference count cycles. procedure Set_Resize_Mode (Container : access Gtk_Container_Record; Resize_Mode : Gtk.Enums.Gtk_Resize_Mode); function Get_Resize_Mode (Container : access Gtk_Container_Record) return Gtk.Enums.Gtk_Resize_Mode; -- Change the resizing behavior for the Container. -- The default value is Resize_Parent. function Get_Children (Container : access Gtk_Container_Record) return Gtk.Widget.Widget_List.Glist; -- Return a list of all the children of the container. -- The caller must free the returned list. procedure Propagate_Expose (Container : access Gtk_Container_Record; Child : access Gtk.Widget.Gtk_Widget_Record'Class; Event : Gdk.Event.Gdk_Event_Expose); -- When a container receives an expose event, it must send synthetic -- expose events to all children that don't have their own Gdk_Window. -- This function provides a convenient way of doing this. A container, -- when it receives an expose event, Propagate_Expose -- once for each child, passing in the event the container received. -- -- Propagate_Expose takes care of deciding whether -- an expose event needs to be sent to the child, intersecting -- the event's area with the child area, and sending the event. -- -- In most cases, a container can simply either simply inherit the -- expose implementation from Gtk_Container, or, do some drawing -- and then chain to the expose implementation from Gtk_Container. ----------- -- Focus -- ----------- procedure Set_Focus_Chain (Container : access Gtk_Container_Record; Focusable_Widgets : Gtk.Widget.Widget_List.Glist); -- Set the chain of widgets that can take the focus for a given Container. -- The list should be freed by the user. -- This list indicates in which order the widgets will get the focus when -- the user presses tab or the arrow keys to move from one widget to the -- next. procedure Get_Focus_Chain (Container : access Gtk_Container_Record; Focusable_Widgets : out Gtk.Widget.Widget_List.Glist; Success : out Boolean); -- Retrieves the focus chain of the container, if one has been -- set explicitly. If no focus chain has been explicitly -- set, GTK+ computes the focus chain based on the positions -- of the children. In that case, GTK+ stores null in -- Focusable_Widgets and returns FALSE. -- The returned list must be freed by the user. procedure Unset_Focus_Chain (Container : access Gtk_Container_Record); -- Undoes the effect of Set_Focus_Chain procedure Set_Focus_Vadjustment (Container : access Gtk_Container_Record; Adjustment : Gtk.Adjustment.Gtk_Adjustment); function Get_Focus_Vadjustment (Container : access Gtk_Container_Record) return Gtk.Adjustment.Gtk_Adjustment; -- Set the focus to the vertical adjustment. -- Adjustment should have been created and displayed at some other -- place in your application. -- Container will make sure that Adjustment always matches the range -- for the focus widget's position (y .. y + height). procedure Set_Focus_Hadjustment (Container : access Gtk_Container_Record; Adjustment : Gtk.Adjustment.Gtk_Adjustment); function Get_Focus_Hadjustment (Container : access Gtk_Container_Record) return Gtk.Adjustment.Gtk_Adjustment; -- Set the focus to the horizontal adjustment. -- Adjustment should have been created and displayed at some other -- place in your application. -- Container will make sure that Adjustment always matches the range -- for the focus widget's position (x .. x + width). procedure Set_Focus_Child (Container : access Gtk_Container_Record; Child : access Gtk.Widget.Gtk_Widget_Record'Class); function Get_Focus_Child (Container : access Gtk_Container_Record) return Gtk.Widget.Gtk_Widget; -- Emit a "set_focus_child" signal, to set the child that currently has the -- keyboard focus. ---------------- -- Properties -- ---------------- procedure Child_Set_Property (Container : access Gtk_Container_Record; Child : access Gtk.Widget.Gtk_Widget_Record'Class; Property_Name : String; Value : Glib.Values.GValue); procedure Child_Get_Property (Container : access Gtk_Container_Record; Child : access Gtk.Widget.Gtk_Widget_Record'Class; Property_Name : String; Value : out Glib.Values.GValue); -- Sets or Gets the value of a child property for Child and Container. This -- is property set at the container level, and that applies to all children -- of that container. These are special type of properties, different from -- the properties associated with each type of widget. -- See also Gtk.Widget.Child_Notify -- You should use Glib.Property_Name to get the name from the property -- declaration in each of the GtkAda packages function Class_Find_Child_Property (Cclass : Glib.Object.GObject_Class; Property_Name : String) return Glib.Param_Spec; -- Finds a child property of a container class by name. The returned value -- describes the property (type, allowed range, description,...) -- You should use Glib.Property_Name to get the name from the property -- declaration in each of the GtkAda packages procedure Class_Install_Child_Property (Cclass : Glib.Object.GObject_Class; Property_Id : Guint; Pspec : Glib.Param_Spec); -- Installs a child property on a container class. -- The Property_Id is an custom id that you choose for your class. It will -- be used in signals that set or get the property, instead of passing -- around a string. function Class_List_Child_Properties (Cclass : Glib.Object.GObject_Class) return Glib.Param_Spec_Array; -- Returns all child properties of a container class. ---------------------- -- Forall functions -- ---------------------- type Gtk_Callback is access procedure (Item : access Gtk.Widget.Gtk_Widget_Record'Class); -- Function that can be call for each child of a container. -- This is called automatically by the Forall subprogram below. procedure Forall (Container : access Gtk_Container_Record; Func : Gtk_Callback); -- Invokes Func on each child of Container, including children that are -- considered "internal" (implementation details of the container). -- "Internal" children generally weren't added by the user of the -- container, but were added by the container implementation itself. See -- Gtk.Widget.Set_Composite_Name. -- Most applications should use gtk_container_foreach(), rather than -- gtk_container_forall(). -- See also the generic package Forall_Pkg if you want to pass some -- extra data to Func. procedure Foreach (Container : access Gtk_Container_Record; Func : Gtk_Callback); -- Invokes Func on each non-internal child of Container. See Forall for -- details on what constitutes an "internal" child. -- generic type Data_Type (<>) is private; package For_Pkg is type Gtk_Callback is access procedure (Item : access Gtk.Widget.Gtk_Widget_Record'Class; Data : in out Data_Type); procedure Forall (Container : access Gtk_Container_Record; Func : Gtk_Callback; Data : Data_Type); -- Execute Func for each of the children of Container, including -- internal ones procedure Foreach (Container : access Gtk_Container_Record; Func : Gtk_Callback; Data : Data_Type); -- Execute Func for each of the children of Container, not including -- internal ones end For_Pkg; -- -------------------------- -- Widget-level methods -- -------------------------- procedure Set_Reallocate_Redraws (Container : access Gtk_Container_Record; Needs_Redraws : Boolean := False); -- Set the "needs_redraws" field. -- If Needs_Redraws is True, then a "draw" signal is emitted for the -- Container whenever one is emitted for a child. function Child_Type (Container : access Gtk_Container_Record) return Gtk.Gtk_Type; -- Return the type of the children in Container. -- If Container can contain any type of widget, Gtk_Type_None is -- returned. procedure Resize_Children (Container : access Gtk_Container_Record); -- The container hasn't changed size but one of its children -- queued a resize request. Which means that the allocation -- is not sufficient for the requisition of some child. -- Run through the list of widgets and reallocate their size appropriately. ---------------------- -- Signals emission -- ---------------------- procedure Check_Resize (Container : access Gtk_Container_Record); -- Emit the "check_resize" signal ----------------- -- Obsolescent -- ----------------- -- All subprograms below are now obsolescent in gtk+. They might be removed -- from future versions of gtk+ (and therefore GtkAda). -- To find out whether your code uses any of these, we recommend compiling -- with the -gnatwj switch -- function Children (Container : access Gtk_Container_Record) return Gtk.Widget.Widget_List.Glist renames Get_Children; -- pragma Obsolescent; -- ---------------- -- Properties -- ---------------- -- -- The following properties are defined for this widget. See -- Glib.Properties for more information on properties. -- -- - Name: Border_Width_Property -- Type: Guint -- Flags: read-write -- Descr: The width of the empty border outside the containers children. -- See also: Set_Border_Width -- -- - Name: Resize_Mode_Property -- Type: Gtk_Resize_Mode -- Flags: read-write -- Descr: Specify how resize events are handled -- See also: Set_Resize_Mode -- -- - Name: Child_Property -- Type: Widget -- Flags: writable -- Descr: Can be used to add a new child to the container. -- See also: Add -- -- - Name: Reallocate_Redraws_Property -- Type: Boolean -- Flags: read-write -- Descr: Whether redraws should be reallocated -- See also: Set_Reallocate_Redraws -- Border_Width_Property : constant Glib.Properties.Property_Uint; Resize_Mode_Property : constant Gtk.Enums.Property_Gtk_Resize_Mode; Child_Property : constant Glib.Properties.Property_Object_WO; Reallocate_Redraws_Property : constant Glib.Properties.Property_Boolean; ------------- -- Signals -- ------------- -- -- The following new signals are defined for this widget: -- -- - "add" -- procedure Handler (Container : access Gtk_Container_Record'Class; -- Widget : access Gtk_Widget_Record'Class); -- -- A new widget is added to the container -- -- - "remove" -- procedure Handler (Container : access Gtk_Container_Record'Class; -- Widget : access Gtk_Widget_Record'Class); -- -- A widget is removed from the container -- -- - "check_resize" -- procedure Handler (Container : access Gtk_Container_Record'Class); -- -- Called every time the Container needs resizing. -- Upon receiving this signal, Container should check whether it needs -- to be resized, and if it does should queue a resize request. -- -- - "focus" -- procedure Handler (Container : access Gtk_Container_Record'Class; -- Direction : Gtk_Direction_Type); -- -- Moves the current selection to a new widget. -- -- - "set-focus-child" -- procedure Handler (Container : access Gtk_Container_Record'Class; -- Widget : access Gtk_Widget_Record'Class); -- -- Emitted when a new widget gains the focus. -- -- Signal_Add : constant Glib.Signal_Name := "add"; Signal_Check_Resize : constant Glib.Signal_Name := "check_resize"; Signal_Remove : constant Glib.Signal_Name := "remove"; Signal_Set_Focus_Child : constant Glib.Signal_Name := "set-focus-child"; private type Gtk_Container_Record is new Gtk.Widget.Gtk_Widget_Record with null record; Border_Width_Property : constant Glib.Properties.Property_Uint := Glib.Properties.Build ("border_width"); Resize_Mode_Property : constant Gtk.Enums.Property_Gtk_Resize_Mode := Gtk.Enums.Build ("resize_mode"); Child_Property : constant Glib.Properties.Property_Object_WO := Glib.Properties.Build ("child"); Reallocate_Redraws_Property : constant Glib.Properties.Property_Boolean := Glib.Properties.Build ("reallocate_redraws"); pragma Import (C, Get_Type, "gtk_container_get_type"); end Gtk.Container; -- No binding: gtk_container_child_get_valist -- No binding: gtk_container_child_set_valist -- No binding: gtk_container_child_set -- No binding: gtk_container_child_get -- No binding: gtk_container_add_with_properties -- These functions never had a binding, but are now obsolescent -- No binding: gtk_container_foreach_full -- Bound using C glue function: -- No binding: gtk_container_get_focus_child