-----------------------------------------------------------------------
-- 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. --
-- --
-----------------------------------------------------------------------
-- <description>
-- A Gtk_Paned is a container that organizes its two children either
-- horizontally or vertically.
-- The initial size allocated to the children depends on the size
-- they request. However, the user has the possibility to interactively
-- move a separation bar between the two to enlarge one of the children,
-- while at the same time shrinking the second one.
-- The bar can be moved by clicking with the mouse on a small cursor
-- displayed in the bar, and then dragging the mouse.
--
-- No additional decoration is provided around the children.
--
-- Each child has two parameters, Resize and Shrink.
--
-- If Shrink is True, then the widget can be made smaller than its
-- requisition size by the user. Set this to False if you want to
-- set a minimum size.
--
-- if Resize is True, this means that the child accepts to be resized, and
-- will not require any size. Thus, the size allocated to it will be
-- the total size allocated to the container minus the size requested by
-- the other child.
-- If Resize is False, the child should ask for a specific size, which it
-- will get. The other child will be resized accordingly.
-- If both Child have the same value for Resize (either True or False), then
-- the size allocated to each is a ratio between the size requested by both.
--
-- When you use Set_Position with a parameter other than -1, or the user
-- moves the handle to resize the widgets, the behavior of Resize is
-- canceled.
--
-- </description>
-- <c_version>2.8.17</c_version>
-- <group>Layout containers</group>
-- <testgtk>create_paned.adb</testgtk>
-- <screenshot>gtk-paned</screenshot>
with Glib.Properties;
with Gtk.Container;
with Gtk.Widget; use Gtk.Widget;
package Gtk.Paned is
type Gtk_Paned_Record is new
Gtk.Container.Gtk_Container_Record with private;
subtype Gtk_Hpaned_Record is Gtk_Paned_Record;
subtype Gtk_Vpaned_Record is Gtk_Paned_Record;
type Gtk_Paned is access all Gtk_Paned_Record'Class;
subtype Gtk_Hpaned is Gtk_Paned;
subtype Gtk_Vpaned is Gtk_Paned;
procedure Gtk_New_Vpaned (Widget : out Gtk_Paned);
-- Create a new vertical container.
-- The children will be displayed one on top of the other.
procedure Gtk_New_Hpaned (Widget : out Gtk_Paned);
-- Create a new horizontal container.
-- The children will be displayed one besides the other.
procedure Initialize_Vpaned (Widget : access Gtk_Paned_Record'Class);
-- Internal initialization function.
-- See the section "Creating your own widgets" in the documentation.
procedure Initialize_Hpaned (Widget : access Gtk_Paned_Record'Class);
-- Internal initialization function.
-- See the section "Creating your own widgets" in the documentation.
function Get_Type return Glib.GType;
function Get_Type_Vpaned return Glib.GType;
function Get_Type_Hpaned return Glib.GType;
-- Return the internal value associated with a Gtk_Paned.
procedure Add1
(Paned : access Gtk_Paned_Record;
Child : access 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.
procedure Pack1
(Paned : access Gtk_Paned_Record;
Child : access 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 Gtk.Object.Ref on the child so as to be sure it is not destroyed
-- when you remove it, and Gtk.Object.Unref it at the end. See the
-- example in testgtk/ in the GtkAda distribution.
procedure Add2
(Paned : access Gtk_Paned_Record;
Child : access 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.
procedure Pack2
(Paned : access Gtk_Paned_Record;
Child : access Gtk_Widget_Record'Class;
Resize : Boolean := False;
Shrink : Boolean := False);
-- Add a child to the bottom or right pane.
procedure Set_Position (Paned : access Gtk_Paned_Record; Position : Gint);
function Get_Position (Paned : access Gtk_Paned_Record) return Gint;
-- Change or get the position of the separator.
-- If position is negative, the remembered position is forgotten,
-- and the division is recomputed from the requisitions of the
-- children.
-- Position is in fact the size (either vertically or horizontally,
-- depending on the container) set for the first child.
function Get_Child1
(Paned : access Gtk_Paned_Record) return Gtk.Widget.Gtk_Widget;
-- Return the child displayed in the top or left pane.
function Get_Child2
(Paned : access Gtk_Paned_Record) return Gtk.Widget.Gtk_Widget;
-- Return the child displayed in the bottom or right pane.
function Get_Child1_Resize
(Paned : access Gtk_Paned_Record) return Boolean;
-- Get the value of the resize attribute for the first child.
function Get_Child2_Resize (Paned : access Gtk_Paned_Record) return Boolean;
-- Get the value of the resize attribute for the second child.
function Get_Child1_Shrink (Paned : access Gtk_Paned_Record) return Boolean;
-- Get the value of the shrink attribute for the first child.
function Get_Child2_Shrink (Paned : access Gtk_Paned_Record) return Boolean;
-- Get the value of the shrink attribute for the second child.
-----------------
-- 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
-- <doc_ignore>
procedure Set_Handle_Size (Paned : access Gtk_Paned_Record; Size : Guint16);
pragma Obsolescent;
-- Do nothing.
-- Only provided for compatibility.
function Get_Handle_Size (Paned : access Gtk_Paned_Record) return Guint16;
pragma Obsolescent;
-- Return 0.
-- Only provided for compatibility.
procedure Set_Gutter_Size (Paned : access Gtk_Paned_Record; Size : Guint16);
pragma Obsolescent;
-- Do nothing.
-- Only provided for compatibility.
function Get_Gutter_Size (Paned : access Gtk_Paned_Record) return Guint16;
pragma Obsolescent;
-- Return 0.
-- Only provided for compatibility.
-- </doc_ignore>
----------------
-- Properties --
----------------
-- The following properties are defined for this widget. See
-- Glib.Properties for more information on properties.
-- <properties>
-- Name: Max_Position_Property
-- Type: Int
-- Descr: Largest possible value for the "position" property
--
-- Name: Min_Position_Property
-- Type: Int
-- Descr: Smallest possible value for the "position" property. This is
-- derived from the size and shrinkability of the widget
--
-- Name: Position_Property
-- Type: Int
-- Descr: Position of paned separator in pixels (0 means all the way to the
-- left/top)
--
-- Name: Position_Set_Property
-- Type: Boolean
-- Descr: TRUE if the Position property should be used
-- </properties>
Max_Position_Property : constant Glib.Properties.Property_Int;
Min_Position_Property : constant Glib.Properties.Property_Int;
Position_Property : constant Glib.Properties.Property_Int;
Position_Set_Property : constant Glib.Properties.Property_Boolean;
----------------------
-- Child Properties --
----------------------
-- The following properties can be set on children of this widget. See
-- in particular Gtk.Containers.Child_Set_Property.
-- <child_properties>
-- Name: Resize_Property
-- Type: Boolean
-- Descr: If TRUE, the child expands and shrinks along with the paned
-- widget
--
-- Name: Shrink_Property
-- Type: Boolean
-- Descr: If TRUE, the child can be made smaller than its requisition
-- </child_properties>
Resize_Property : constant Glib.Properties.Property_Boolean;
Shrink_Property : constant Glib.Properties.Property_Boolean;
----------------------
-- Style Properties --
----------------------
-- The following properties can be changed through the gtk theme and
-- configuration files, and retrieved through Gtk.Widget.Style_Get_Property
-- <style_properties>
-- Name: Handle_Size_Property
-- Type: Int
-- Descr: Width of handle
-- </style_properties>
Handle_Size_Property : constant Glib.Properties.Property_Int;
-------------
-- Signals --
-------------
-- <signals>
-- The following new signals are defined for this widget:
--
-- - "accept_position"
-- procedure Handler (Paned : access Gtk_Paned_Record'Class);
-- You should emit this signal to request that the current handle
-- position be considered as valid, and the focus moved out of the
-- handle. By default, this is bound to the key <enter>, so that after
-- resizing through the keyboard (see cycle_handle_focus), the user can
-- validate the new position
--
-- - "cancel_position"
-- procedure Handler (Paned : access Gtk_Paned_Record'Class);
-- Similar to accept_position, but cancel the last resizing operation.
-- This is bound to <esc> by default.
--
-- - "cycle_child_focus"
-- procedure Handler
-- (Paned : access Gtk_Paned_Record'Class;
-- To_Next : Boolean);
-- You should emit this signal to request that the child be moved to the
-- next child of paned. After the last child, the focus is moved to the
-- parent of Paned (if it is a Gtk_Paned_Record itself),...
-- This signal is mostly intended to be used from a keybinding (by
-- default, gtk+ attaches it to F6 and shift-F6).
--
-- - "cycle_handle_focus"
-- procedure Handler
-- (Paned : access Gtk_Paned_Record'Class;
-- To_Next : Boolean);
-- You should emit this signal to request that the focus be given to the
-- handle, so that the user can then resize the children through the
-- keyboard. It it mostly intended to be used from a keybinding. By
-- default, gtk+ attaches it to F8. The children can then be resized
-- with the arrow keys, PageUp, PageDown, Home and End.
--
-- - "move_handle"
-- procedure Handler
-- (Paned : access Gtk_Paned_Record'Class;
-- Typ : Gtk_Scroll_Type);
-- You should emit this signal to request a resizing of the children.
-- This is mostly useful when bound to keys, so that when the handle has
-- the focus (cycle_handle_focus), the children can be resized with the
-- arrow keys, PageUp, PageDown, Home and End
--
-- - "toggle_handle_focus"
-- procedure Handler (Paned : access Gtk_Paned_Record'Class);
-- Mostly intended to be bound to a keybinding. When called, this removes
-- the keyboard focus from the handle (if it was given through
-- cycle_handle_focus above).
--
-- </signals>
Signal_Accept_Position : constant Glib.Signal_Name :=
"accept_position";
Signal_Cancel_Position : constant Glib.Signal_Name :=
"cancel_position";
Signal_Cycle_Child_Focus : constant Glib.Signal_Name :=
"cycle_child_focus";
Signal_Cycle_Handle_Focus : constant Glib.Signal_Name :=
"cycle_handle_focus";
Signal_Move_Handle : constant Glib.Signal_Name :=
"move_handle";
Signal_Toggle_Handle_Focus : constant Glib.Signal_Name :=
"toggle_handle_focus";
private
type Gtk_Paned_Record is new Gtk.Container.Gtk_Container_Record
with null record;
Max_Position_Property : constant Glib.Properties.Property_Int :=
Glib.Properties.Build ("max-position");
Min_Position_Property : constant Glib.Properties.Property_Int :=
Glib.Properties.Build ("min-position");
Position_Property : constant Glib.Properties.Property_Int :=
Glib.Properties.Build ("position");
Position_Set_Property : constant Glib.Properties.Property_Boolean :=
Glib.Properties.Build ("position-set");
Resize_Property : constant Glib.Properties.Property_Boolean :=
Glib.Properties.Build ("resize");
Shrink_Property : constant Glib.Properties.Property_Boolean :=
Glib.Properties.Build ("shrink");
Handle_Size_Property : constant Glib.Properties.Property_Int :=
Glib.Properties.Build ("handle-size");
pragma Import (C, Get_Type, "gtk_paned_get_type");
pragma Import (C, Get_Type_Vpaned, "gtk_vpaned_get_type");
pragma Import (C, Get_Type_Hpaned, "gtk_hpaned_get_type");
end Gtk.Paned;
-- Was never implemented, and is now obsolescent anyway:
-- No binding: gtk_paned_compute_position