------------------------------------------------------------------------------
-- --
-- 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>
-- Gtk.Paned.Gtk_Paned has two panes, arranged either horizontally or
-- vertically. The division between the two panes is adjustable by the user by
-- dragging a handle.
--
-- Child widgets are added to the panes of the widget with Gtk.Paned.Pack1
-- and Gtk.Paned.Pack2. The division between the two children is set by
-- default from the size requests of the children, but it can be adjusted by
-- the user.
--
-- A paned widget draws a separator between the two child widgets and a small
-- handle that the user can drag to adjust the division. It does not draw any
-- relief around the children or around the separator. (The space in which the
-- separator is called the gutter.) Often, it is useful to put each child
-- inside a Gtk.Frame.Gtk_Frame with the shadow type set to
-- Gtk.Enums.Shadow_In so that the gutter appears as a ridge. No separator is
-- drawn if one of the children is missing.
--
-- Each child has two options that can be set, Resize and Shrink. If Resize
-- is true, then when the Gtk.Paned.Gtk_Paned is resized, that child will
-- expand or shrink along with the paned widget. If Shrink is true, then that
-- child can be made smaller than its requisition by the user. Setting Shrink
-- to False allows the application to set a minimum size. If Resize is false
-- for both children, then this is treated as if Resize is true for both
-- children.
--
-- The application can set the position of the slider as if it were set by
-- the user, by calling Gtk.Paned.Set_Position.
--
-- == Creating a paned widget with minimum sizes. ==
--
-- GtkWidget *hpaned = gtk_paned_new (GTK_ORIENTATION_HORIZONTAL);
-- GtkWidget *frame1 = gtk_frame_new (NULL);
-- GtkWidget *frame2 = gtk_frame_new (NULL);
-- gtk_frame_set_shadow_type (GTK_FRAME (frame1), GTK_SHADOW_IN);
-- gtk_frame_set_shadow_type (GTK_FRAME (frame2), GTK_SHADOW_IN);
-- gtk_widget_set_size_request (hpaned, 200, -1);
-- gtk_paned_pack1 (GTK_PANED (hpaned), frame1, TRUE, FALSE);
-- gtk_widget_set_size_request (frame1, 50, -1);
-- gtk_paned_pack2 (GTK_PANED (hpaned), frame2, FALSE, FALSE);
-- gtk_widget_set_size_request (frame2, 50, -1);
--
--
-- </description>
-- <screenshot>gtk-paned</screenshot>
-- <group>Layout container</group>
-- <testgtk>create_paned.adb</testgtk>
pragma Ada_2005;
pragma Warnings (Off, "*is already use-visible*");
with Gdk; use Gdk;
with Glib; use Glib;
with Glib.Object; use Glib.Object;
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.Paned is
type Gtk_Paned_Record is new Gtk_Container_Record with null record;
type Gtk_Paned is access all Gtk_Paned_Record'Class;
subtype Gtk_Hpaned_Record is Gtk_Paned_Record;
subtype Gtk_Hpaned is Gtk_Paned;
subtype Gtk_Vpaned_Record is Gtk_Paned_Record;
subtype Gtk_Vpaned is Gtk_Paned;
------------------
-- Constructors --
------------------
procedure Gtk_New
(Paned : out Gtk_Paned;
Orientation : Gtk.Enums.Gtk_Orientation);
procedure Initialize
(Paned : not null access Gtk_Paned_Record'Class;
Orientation : Gtk.Enums.Gtk_Orientation);
-- Creates a new Gtk.Paned.Gtk_Paned widget.
-- Since: gtk+ 3.0
-- "orientation": the paned's orientation.
function Gtk_Paned_New
(Orientation : Gtk.Enums.Gtk_Orientation) return Gtk_Paned;
-- Creates a new Gtk.Paned.Gtk_Paned widget.
-- Since: gtk+ 3.0
-- "orientation": the paned's orientation.
function Get_Type return Glib.GType;
pragma Import (C, Get_Type, "gtk_paned_get_type");
procedure Gtk_New_Hpaned (Paned : out Gtk_Hpaned);
procedure Initialize_Hpaned
(Paned : not null access Gtk_Hpaned_Record'Class);
-- The children will be displayed next to each other
function Gtk_Hpaned_New return Gtk_Hpaned;
-- The children will be displayed next to each other
function Get_Type_Hpaned return Glib.GType;
pragma Import (C, Get_Type_Hpaned, "gtk_hpaned_get_type");
procedure Gtk_New_Vpaned (Paned : out Gtk_Vpaned);
procedure Initialize_Vpaned
(Paned : not null access Gtk_Vpaned_Record'Class);
-- The children will be displayed one on top of the other
function Gtk_Vpaned_New return Gtk_Vpaned;
-- The children will be displayed one on top of the other
function Get_Type_Vpaned return Glib.GType;
pragma Import (C, Get_Type_Vpaned, "gtk_vpaned_get_type");
-------------
-- Methods --
-------------
procedure Add1
(Paned : not null access Gtk_Paned_Record;
Child : not null access Gtk.Widget.Gtk_Widget_Record'Class);
-- Add the first child of the container. The child will be displayed
-- either in the top or in the left pane, depending on the orientation of
-- the container. This is equivalent to using the Pack1 procedure with its
-- default parameters.
-- "child": the child to add
procedure Add2
(Paned : not null access Gtk_Paned_Record;
Child : not null access Gtk.Widget.Gtk_Widget_Record'Class);
-- Add the second child of the container. It will be displayed in the
-- bottom or right pane, depending on the container's orientation. This is
-- equivalent to using Pack2 with its default parameters.
-- "child": the child to add
function Get_Child1
(Paned : not null access Gtk_Paned_Record)
return Gtk.Widget.Gtk_Widget;
-- Obtains the first child of the paned widget.
-- Since: gtk+ 2.4
function Get_Child2
(Paned : not null access Gtk_Paned_Record)
return Gtk.Widget.Gtk_Widget;
-- Obtains the second child of the paned widget.
-- Since: gtk+ 2.4
function Get_Handle_Window
(Paned : not null access Gtk_Paned_Record) return Gdk.Gdk_Window;
-- Returns the Gdk.Gdk_Window of the handle. This function is useful when
-- handling button or motion events because it enables the callback to
-- distinguish between the window of the paned, a child and the handle.
-- Since: gtk+ 2.20
function Get_Position
(Paned : not null access Gtk_Paned_Record) return Gint;
-- Obtains the position of the divider between the two panes.
procedure Set_Position
(Paned : not null access Gtk_Paned_Record;
Position : Gint);
-- Sets the position of the divider between the two panes.
-- "position": pixel position of divider, a negative value means that the
-- position is unset.
procedure Pack1
(Paned : not null access Gtk_Paned_Record;
Child : not null access Gtk.Widget.Gtk_Widget_Record'Class;
Resize : Boolean := False;
Shrink : Boolean := True);
-- Add a child to the top or left pane. You can not change dynamically the
-- attributes Resize and Shrink. Instead, you have to remove the child from
-- the container, and put it back with the new value of the attributes. You
-- should also first call Glib.Object.Ref on the child so as to be sure it
-- is not destroyed when you remove it, and Glib.Object.Unref it at the
-- end. See the example in testgtk/ in the GtkAda distribution.
-- "child": the child to add
-- "resize": should this child expand when the paned widget is resized.
-- "shrink": can this child be made smaller than its requisition.
procedure Pack2
(Paned : not null access Gtk_Paned_Record;
Child : not null access Gtk.Widget.Gtk_Widget_Record'Class;
Resize : Boolean := False;
Shrink : Boolean := False);
-- Adds a child to the bottom or right pane.
-- "child": the child to add
-- "resize": should this child expand when the paned widget is resized.
-- "shrink": can this child be made smaller than its requisition.
---------------------------------------------
-- 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_Paned_Record)
return Gtk.Enums.Gtk_Orientation;
procedure Set_Orientation
(Self : not null access Gtk_Paned_Record;
Orientation : Gtk.Enums.Gtk_Orientation);
----------------
-- Properties --
----------------
-- The following properties are defined for this widget. See
-- Glib.Properties for more information on properties)
Max_Position_Property : constant Glib.Properties.Property_Int;
-- The largest possible value for the position property. This property is
-- derived from the size and shrinkability of the widget's children.
Min_Position_Property : constant Glib.Properties.Property_Int;
-- The smallest possible value for the position property. This property is
-- derived from the size and shrinkability of the widget's children.
Position_Property : constant Glib.Properties.Property_Int;
Position_Set_Property : constant Glib.Properties.Property_Boolean;
-------------
-- Signals --
-------------
type Cb_Gtk_Paned_Boolean is not null access function
(Self : access Gtk_Paned_Record'Class) return Boolean;
type Cb_GObject_Boolean is not null access function
(Self : access Glib.Object.GObject_Record'Class)
return Boolean;
Signal_Accept_Position : constant Glib.Signal_Name := "accept-position";
procedure On_Accept_Position
(Self : not null access Gtk_Paned_Record;
Call : Cb_Gtk_Paned_Boolean;
After : Boolean := False);
procedure On_Accept_Position
(Self : not null access Gtk_Paned_Record;
Call : Cb_GObject_Boolean;
Slot : not null access Glib.Object.GObject_Record'Class;
After : Boolean := False);
-- The ::accept-position signal is a <link
-- linkend="keybinding-signals">keybinding signal</link> which gets emitted
-- to accept the current position of the handle when moving it using key
-- bindings.
--
-- The default binding for this signal is Return or Space.
Signal_Cancel_Position : constant Glib.Signal_Name := "cancel-position";
procedure On_Cancel_Position
(Self : not null access Gtk_Paned_Record;
Call : Cb_Gtk_Paned_Boolean;
After : Boolean := False);
procedure On_Cancel_Position
(Self : not null access Gtk_Paned_Record;
Call : Cb_GObject_Boolean;
Slot : not null access Glib.Object.GObject_Record'Class;
After : Boolean := False);
-- The ::cancel-position signal is a <link
-- linkend="keybinding-signals">keybinding signal</link> which gets emitted
-- to cancel moving the position of the handle using key bindings. The
-- position of the handle will be reset to the value prior to moving it.
--
-- The default binding for this signal is Escape.
type Cb_Gtk_Paned_Boolean_Boolean is not null access function
(Self : access Gtk_Paned_Record'Class;
Reversed : Boolean) return Boolean;
type Cb_GObject_Boolean_Boolean is not null access function
(Self : access Glib.Object.GObject_Record'Class;
Reversed : Boolean) return Boolean;
Signal_Cycle_Child_Focus : constant Glib.Signal_Name := "cycle-child-focus";
procedure On_Cycle_Child_Focus
(Self : not null access Gtk_Paned_Record;
Call : Cb_Gtk_Paned_Boolean_Boolean;
After : Boolean := False);
procedure On_Cycle_Child_Focus
(Self : not null access Gtk_Paned_Record;
Call : Cb_GObject_Boolean_Boolean;
Slot : not null access Glib.Object.GObject_Record'Class;
After : Boolean := False);
-- The ::cycle-child-focus signal is a <link
-- linkend="keybinding-signals">keybinding signal</link> which gets emitted
-- to cycle the focus between the children of the paned.
--
-- The default binding is f6.
Signal_Cycle_Handle_Focus : constant Glib.Signal_Name := "cycle-handle-focus";
procedure On_Cycle_Handle_Focus
(Self : not null access Gtk_Paned_Record;
Call : Cb_Gtk_Paned_Boolean_Boolean;
After : Boolean := False);
procedure On_Cycle_Handle_Focus
(Self : not null access Gtk_Paned_Record;
Call : Cb_GObject_Boolean_Boolean;
Slot : not null access Glib.Object.GObject_Record'Class;
After : Boolean := False);
-- The ::cycle-handle-focus signal is a <link
-- linkend="keybinding-signals">keybinding signal</link> which gets emitted
-- to cycle whether the paned should grab focus to allow the user to change
-- position of the handle by using key bindings.
--
-- The default binding for this signal is f8.
type Cb_Gtk_Paned_Gtk_Scroll_Type_Boolean is not null access function
(Self : access Gtk_Paned_Record'Class;
Scroll_Type : Gtk.Enums.Gtk_Scroll_Type) return Boolean;
type Cb_GObject_Gtk_Scroll_Type_Boolean is not null access function
(Self : access Glib.Object.GObject_Record'Class;
Scroll_Type : Gtk.Enums.Gtk_Scroll_Type) return Boolean;
Signal_Move_Handle : constant Glib.Signal_Name := "move-handle";
procedure On_Move_Handle
(Self : not null access Gtk_Paned_Record;
Call : Cb_Gtk_Paned_Gtk_Scroll_Type_Boolean;
After : Boolean := False);
procedure On_Move_Handle
(Self : not null access Gtk_Paned_Record;
Call : Cb_GObject_Gtk_Scroll_Type_Boolean;
Slot : not null access Glib.Object.GObject_Record'Class;
After : Boolean := False);
-- The ::move-handle signal is a <link
-- linkend="keybinding-signals">keybinding signal</link> which gets emitted
-- to move the handle when the user is using key bindings to move it.
Signal_Toggle_Handle_Focus : constant Glib.Signal_Name := "toggle-handle-focus";
procedure On_Toggle_Handle_Focus
(Self : not null access Gtk_Paned_Record;
Call : Cb_Gtk_Paned_Boolean;
After : Boolean := False);
procedure On_Toggle_Handle_Focus
(Self : not null access Gtk_Paned_Record;
Call : Cb_GObject_Boolean;
Slot : not null access Glib.Object.GObject_Record'Class;
After : Boolean := False);
-- The ::toggle-handle-focus is a <link
-- linkend="keybinding-signals">keybinding signal</link> which gets emitted
-- to accept the current position of the handle and then move focus to the
-- next widget in the focus chain.
--
-- The default binding is Tab.
----------------
-- 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_Paned_Record, Gtk_Paned);
function "+"
(Widget : access Gtk_Paned_Record'Class)
return Gtk.Buildable.Gtk_Buildable
renames Implements_Gtk_Buildable.To_Interface;
function "-"
(Interf : Gtk.Buildable.Gtk_Buildable)
return Gtk_Paned
renames Implements_Gtk_Buildable.To_Object;
package Implements_Gtk_Orientable is new Glib.Types.Implements
(Gtk.Orientable.Gtk_Orientable, Gtk_Paned_Record, Gtk_Paned);
function "+"
(Widget : access Gtk_Paned_Record'Class)
return Gtk.Orientable.Gtk_Orientable
renames Implements_Gtk_Orientable.To_Interface;
function "-"
(Interf : Gtk.Orientable.Gtk_Orientable)
return Gtk_Paned
renames Implements_Gtk_Orientable.To_Object;
private
Position_Set_Property : constant Glib.Properties.Property_Boolean :=
Glib.Properties.Build ("position-set");
Position_Property : constant Glib.Properties.Property_Int :=
Glib.Properties.Build ("position");
Min_Position_Property : constant Glib.Properties.Property_Int :=
Glib.Properties.Build ("min-position");
Max_Position_Property : constant Glib.Properties.Property_Int :=
Glib.Properties.Build ("max-position");
end Gtk.Paned;