------------------------------------------------------------------------------
-- --
-- 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 GtkBox widget organizes child widgets into a rectangular area.
--
-- The rectangular area of a GtkBox is organized into either a single row or
-- a single column of child widgets depending upon the orientation. Thus, all
-- children of a GtkBox are allocated one dimension in common, which is the
-- height of a row, or the width of a column.
--
-- GtkBox uses a notion of *packing*. Packing refers to adding widgets with
-- reference to a particular position in a Gtk.Container.Gtk_Container. For a
-- GtkBox, there are two reference positions: the *start* and the *end* of the
-- box. For a vertical Gtk.Box.Gtk_Box, the start is defined as the top of the
-- box and the end is defined as the bottom. For a horizontal Gtk.Box.Gtk_Box
-- the start is defined as the left side and the end is defined as the right
-- side.
--
-- Use repeated calls to Gtk.Box.Pack_Start to pack widgets into a GtkBox
-- from start to end. Use Gtk.Box.Pack_End to add widgets from end to start.
-- You may intersperse these calls and add widgets from both ends of the same
-- GtkBox.
--
-- Because GtkBox is a Gtk.Container.Gtk_Container, you may also use
-- Gtk.Container.Add to insert widgets into the box, and they will be packed
-- with the default values for Gtk.Box.Gtk_Box:expand and
-- Gtk.Box.Gtk_Box:fill. Use Gtk.Container.Remove to remove widgets from the
-- GtkBox.
--
-- Use Gtk.Box.Set_Homogeneous to specify whether or not all children of the
-- GtkBox are forced to get the same amount of space.
--
-- Use Gtk.Box.Set_Spacing to determine how much space will be minimally
-- placed between all children in the GtkBox. Note that spacing is added
-- *between* the children, while padding added by Gtk.Box.Pack_Start or
-- Gtk.Box.Pack_End is added *on either side* of the widget it belongs to.
--
-- Use Gtk.Box.Reorder_Child to move a GtkBox child to a different place in
-- the box.
--
-- Use Gtk.Box.Set_Child_Packing to reset the Gtk.Box.Gtk_Box:expand,
-- Gtk.Box.Gtk_Box:fill and Gtk.Box.Gtk_Box:padding child properties. Use
-- Gtk.Box.Query_Child_Packing to query these fields.
--
-- Note:
--
-- Note that a single-row or single-column Gtk.Grid.Gtk_Grid provides exactly
-- the same functionality as Gtk.Box.Gtk_Box.
--
-- </description>
-- <description>
-- See the testgtk example in the GtkAda distribution to see concrete
-- examples on how all the parameters for the boxes work.
--
-- </description>
-- <screenshot>gtk-box</screenshot>
-- <group>Layout containers</group>
-- <testgtk>create_box.adb</testgtk>
pragma Ada_2005;
pragma Warnings (Off, "*is already use-visible*");
with Glib; use Glib;
with Glib.Properties; use Glib.Properties;
with Glib.Types; use Glib.Types;
with Gtk.Buildable; use Gtk.Buildable;
with Gtk.Container; use Gtk.Container;
with Gtk.Enums; use Gtk.Enums;
with Gtk.Orientable; use Gtk.Orientable;
with Gtk.Widget; use Gtk.Widget;
package Gtk.Box is
type Gtk_Box_Record is new Gtk_Container_Record with null record;
type Gtk_Box is access all Gtk_Box_Record'Class;
subtype Gtk_Hbox_Record is Gtk_Box_Record;
subtype Gtk_Hbox is Gtk_Box;
subtype Gtk_Vbox_Record is Gtk_Box_Record;
subtype Gtk_Vbox is Gtk_Box;
------------------
-- Constructors --
------------------
procedure Gtk_New
(Box : out Gtk_Box;
Orientation : Gtk.Enums.Gtk_Orientation;
Spacing : Gint);
procedure Initialize
(Box : not null access Gtk_Box_Record'Class;
Orientation : Gtk.Enums.Gtk_Orientation;
Spacing : Gint);
-- Creates a new Gtk.Box.Gtk_Box.
-- Since: gtk+ 3.0
-- "orientation": the box's orientation.
-- "spacing": the number of pixels to place by default between children.
function Gtk_Box_New
(Orientation : Gtk.Enums.Gtk_Orientation;
Spacing : Gint) return Gtk_Box;
-- Creates a new Gtk.Box.Gtk_Box.
-- Since: gtk+ 3.0
-- "orientation": the box's orientation.
-- "spacing": the number of pixels to place by default between children.
function Get_Type return Glib.GType;
pragma Import (C, Get_Type, "gtk_box_get_type");
procedure Gtk_New_Hbox
(Box : out Gtk_Hbox;
Homogeneous : Boolean := False;
Spacing : Gint := 0);
procedure Initialize_Hbox
(Box : not null access Gtk_Hbox_Record'Class;
Homogeneous : Boolean := False;
Spacing : Gint := 0);
-- Creates a new Gtk.Box.Gtk_Hbox.
-- "homogeneous": True if all children are to be given equal space
-- allotments.
-- "spacing": the number of pixels to place by default between children.
function Gtk_Hbox_New
(Homogeneous : Boolean := False;
Spacing : Gint := 0) return Gtk_Hbox;
-- Creates a new Gtk.Box.Gtk_Hbox.
-- "homogeneous": True if all children are to be given equal space
-- allotments.
-- "spacing": the number of pixels to place by default between children.
function Get_Hbox_Type return Glib.GType;
pragma Import (C, Get_Hbox_Type, "gtk_hbox_get_type");
procedure Gtk_New_Vbox
(Box : out Gtk_Vbox;
Homogeneous : Boolean := False;
Spacing : Gint := 0);
procedure Initialize_Vbox
(Box : not null access Gtk_Vbox_Record'Class;
Homogeneous : Boolean := False;
Spacing : Gint := 0);
-- Creates a new Gtk.Box.Gtk_Vbox.
-- "homogeneous": True if all children are to be given equal space
-- allotments.
-- "spacing": the number of pixels to place by default between children.
function Gtk_Vbox_New
(Homogeneous : Boolean := False;
Spacing : Gint := 0) return Gtk_Vbox;
-- Creates a new Gtk.Box.Gtk_Vbox.
-- "homogeneous": True if all children are to be given equal space
-- allotments.
-- "spacing": the number of pixels to place by default between children.
function Get_Vbox_Type return Glib.GType;
pragma Import (C, Get_Vbox_Type, "gtk_vbox_get_type");
-------------
-- Methods --
-------------
function Get_Homogeneous
(Box : not null access Gtk_Box_Record) return Boolean;
-- Returns whether the box is homogeneous (all children are the same
-- size). See Gtk.Box.Set_Homogeneous.
procedure Set_Homogeneous
(Box : not null access Gtk_Box_Record;
Homogeneous : Boolean);
-- Sets the Gtk.Box.Gtk_Box:homogeneous property of Box, controlling
-- whether or not all children of Box are given equal space in the box.
-- "homogeneous": a boolean value, True to create equal allotments, False
-- for variable allotments
function Get_Spacing (Box : not null access Gtk_Box_Record) return Gint;
-- Gets the value set by Gtk.Box.Set_Spacing.
procedure Set_Spacing
(Box : not null access Gtk_Box_Record;
Spacing : Gint);
-- Sets the Gtk.Box.Gtk_Box:spacing property of Box, which is the number
-- of pixels to place between children of Box.
-- "spacing": the number of pixels to put between children
procedure Pack_End
(In_Box : not null access Gtk_Box_Record;
Child : not null access Gtk.Widget.Gtk_Widget_Record'Class;
Expand : Boolean := True;
Fill : Boolean := True;
Padding : Guint := 0);
-- Adds Child to Box, packed with reference to the end of Box. The Child
-- is packed after (away from end of) any other child packed with reference
-- to the end of Box.
-- "child": the Gtk.Widget.Gtk_Widget to be added to Box
-- "expand": True if the new child is to be given extra space allocated to
-- Box. The extra space will be divided evenly between all children of Box
-- that use this option
-- "fill": True if space given to Child by the Expand option is actually
-- allocated to Child, rather than just padding it. This parameter has no
-- effect if Expand is set to False. A child is always allocated the full
-- height of a horizontal Gtk.Box.Gtk_Box and the full width of a vertical
-- Gtk.Box.Gtk_Box. This option affects the other dimension
-- "padding": extra space in pixels to put between this child and its
-- neighbors, over and above the global amount specified by
-- Gtk.Box.Gtk_Box:spacing property. If Child is a widget at one of the
-- reference ends of Box, then Padding pixels are also put between Child
-- and the reference edge of Box
procedure Pack_Start
(In_Box : not null access Gtk_Box_Record;
Child : not null access Gtk.Widget.Gtk_Widget_Record'Class;
Expand : Boolean := True;
Fill : Boolean := True;
Padding : Guint := 0);
-- Adds Child to Box, packed with reference to the start of Box. The Child
-- is packed after any other child packed with reference to the start of
-- Box.
-- "child": the Gtk.Widget.Gtk_Widget to be added to Box
-- "expand": True if the new child is to be given extra space allocated to
-- Box. The extra space will be divided evenly between all children that
-- use this option
-- "fill": True if space given to Child by the Expand option is actually
-- allocated to Child, rather than just padding it. This parameter has no
-- effect if Expand is set to False. A child is always allocated the full
-- height of a horizontal Gtk.Box.Gtk_Box and the full width of a vertical
-- Gtk.Box.Gtk_Box. This option affects the other dimension
-- "padding": extra space in pixels to put between this child and its
-- neighbors, over and above the global amount specified by
-- Gtk.Box.Gtk_Box:spacing property. If Child is a widget at one of the
-- reference ends of Box, then Padding pixels are also put between Child
-- and the reference edge of Box
procedure Query_Child_Packing
(Box : not null access Gtk_Box_Record;
Child : not null access Gtk.Widget.Gtk_Widget_Record'Class;
Expand : out Boolean;
Fill : out Boolean;
Padding : out Guint;
Pack_Type : out Gtk.Enums.Gtk_Pack_Type);
-- Obtains information about how Child is packed into Box.
-- "child": the Gtk.Widget.Gtk_Widget of the child to query
-- "expand": pointer to return location for Gtk.Box.Gtk_Box:expand child
-- property
-- "fill": pointer to return location for Gtk.Box.Gtk_Box:fill child
-- property
-- "padding": pointer to return location for Gtk.Box.Gtk_Box:padding child
-- property
-- "pack_type": pointer to return location for Gtk.Box.Gtk_Box:pack-type
-- child property
procedure Set_Child_Packing
(Box : not null access Gtk_Box_Record;
Child : not null access Gtk.Widget.Gtk_Widget_Record'Class;
Expand : Boolean;
Fill : Boolean;
Padding : Guint;
Pack_Type : Gtk.Enums.Gtk_Pack_Type);
-- Sets the way Child is packed into Box.
-- "child": the Gtk.Widget.Gtk_Widget of the child to set
-- "expand": the new value of the Gtk.Box.Gtk_Box:expand child property
-- "fill": the new value of the Gtk.Box.Gtk_Box:fill child property
-- "padding": the new value of the Gtk.Box.Gtk_Box:padding child property
-- "pack_type": the new value of the Gtk.Box.Gtk_Box:pack-type child
-- property
procedure Reorder_Child
(Box : not null access Gtk_Box_Record;
Child : not null access Gtk.Widget.Gtk_Widget_Record'Class;
Position : Gint);
-- Moves Child to a new Position in the list of Box children. The list is
-- the <structfield>children</structfield> field of Gtk.Box.Gtk_Box-struct,
-- and contains both widgets packed GTK_PACK_START as well as widgets
-- packed GTK_PACK_END, in the order that these widgets were added to Box.
-- A widget's position in the Box children list determines where the
-- widget is packed into Box. A child widget at some position in the list
-- will be packed just after all other widgets of the same packing type
-- that appear earlier in the list.
-- "child": the Gtk.Widget.Gtk_Widget to move
-- "position": the new position for Child in the list of children of Box,
-- starting from 0. If negative, indicates the end of the list
function Get_Child
(Box : not null access Gtk_Box_Record;
Num : Gint) return Gtk.Widget.Gtk_Widget;
-- Return the Num-th child of the box, or null if there is no such child
-- Since: gtk+ GtkAda 1.0
---------------------------------------------
-- Inherited subprograms (from interfaces) --
---------------------------------------------
-- Methods inherited from the Buildable interface are not duplicated here
-- since they are meant to be used by tools, mostly. If you need to call
-- them, use an explicit cast through the "-" operator below.
function Get_Orientation
(Self : not null access Gtk_Box_Record)
return Gtk.Enums.Gtk_Orientation;
procedure Set_Orientation
(Self : not null access Gtk_Box_Record;
Orientation : Gtk.Enums.Gtk_Orientation);
----------------
-- Properties --
----------------
-- The following properties are defined for this widget. See
-- Glib.Properties for more information on properties)
Homogeneous_Property : constant Glib.Properties.Property_Boolean;
Spacing_Property : constant Glib.Properties.Property_Int;
----------------
-- Interfaces --
----------------
-- This class implements several interfaces. See Glib.Types
--
-- - "Buildable"
--
-- - "Orientable"
package Implements_Gtk_Buildable is new Glib.Types.Implements
(Gtk.Buildable.Gtk_Buildable, Gtk_Box_Record, Gtk_Box);
function "+"
(Widget : access Gtk_Box_Record'Class)
return Gtk.Buildable.Gtk_Buildable
renames Implements_Gtk_Buildable.To_Interface;
function "-"
(Interf : Gtk.Buildable.Gtk_Buildable)
return Gtk_Box
renames Implements_Gtk_Buildable.To_Object;
package Implements_Gtk_Orientable is new Glib.Types.Implements
(Gtk.Orientable.Gtk_Orientable, Gtk_Box_Record, Gtk_Box);
function "+"
(Widget : access Gtk_Box_Record'Class)
return Gtk.Orientable.Gtk_Orientable
renames Implements_Gtk_Orientable.To_Interface;
function "-"
(Interf : Gtk.Orientable.Gtk_Orientable)
return Gtk_Box
renames Implements_Gtk_Orientable.To_Object;
private
Spacing_Property : constant Glib.Properties.Property_Int :=
Glib.Properties.Build ("spacing");
Homogeneous_Property : constant Glib.Properties.Property_Boolean :=
Glib.Properties.Build ("homogeneous");
end Gtk.Box;