1. ----------------------------------------------------------------------- 
  2. --               GtkAda - Ada95 binding for Gtk+/Gnome               -- 
  3. --                                                                   -- 
  4. --   Copyright (C) 1998-2000 E. Briot, J. Brobecker and A. Charlet   -- 
  5. --                Copyright (C) 2000-2013, AdaCore                   -- 
  6. --                                                                   -- 
  7. -- This library is free software; you can redistribute it and/or     -- 
  8. -- modify it under the terms of the GNU General Public               -- 
  9. -- License as published by the Free Software Foundation; either      -- 
  10. -- version 2 of the License, or (at your option) any later version.  -- 
  11. --                                                                   -- 
  12. -- This library is distributed in the hope that it will be useful,   -- 
  13. -- but WITHOUT ANY WARRANTY; without even the implied warranty of    -- 
  14. -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU -- 
  15. -- General Public License for more details.                          -- 
  16. --                                                                   -- 
  17. -- You should have received a copy of the GNU General Public         -- 
  18. -- License along with this library; if not, write to the             -- 
  19. -- Free Software Foundation, Inc., 59 Temple Place - Suite 330,      -- 
  20. -- Boston, MA 02111-1307, USA.                                       -- 
  21. --                                                                   -- 
  22. -- As a special exception, if other files instantiate generics from  -- 
  23. -- this unit, or you link this unit with other files to produce an   -- 
  24. -- executable, this  unit  does not  by itself cause  the resulting  -- 
  25. -- executable to be covered by the GNU General Public License. This  -- 
  26. -- exception does not however invalidate any other reasons why the   -- 
  27. -- executable file  might be covered by the  GNU Public License.     -- 
  28. ----------------------------------------------------------------------- 
  29.  
  30. --  <description> 
  31. --  A Gtk_Layout is a widget that can have an almost infinite size, without 
  32. --  occupying a lot of memory. Its children can be located anywhere within it, 
  33. --  but will only appear on the screen if the visible area of the layout 
  34. --  contains them. Just like a Gtk_Viewport, its visible area is indicated by 
  35. --  two Gtk_Adjustment widgets, and thus a Gtk_Layout can be put as is in a 
  36. --  Gtk_Scrolled_Window. As for Gtk_Fixed containers, the children can be 
  37. --  located anywhere in the layout (no automatic organization is done). But, as 
  38. --  opposed to Gtk_Fixed widgets, a Gtk_Layout does not try to resize itself to 
  39. --  show all its children. 
  40. -- 
  41. --  Starting from GtkAda 2.0, you have to call Set_Size and specify the 
  42. --  maximum size of the layout, otherwise children added with Put outside the 
  43. --  size defined for the layout will never be visible. One way to do this is to 
  44. --  systematically call Set_Size before calling Put, and make sure you specify 
  45. --  a size big enough for the layout. 
  46. -- 
  47. --  </description> 
  48. --  <screenshot>gtk-layout</screenshot> 
  49. --  <group>Layout containers</group> 
  50. --  <testgtk>create_layout.adb</testgtk> 
  51.  
  52. pragma Warnings (Off, "*is already use-visible*"); 
  53. with Gdk.Window;      use Gdk.Window; 
  54. with Glib;            use Glib; 
  55. with Glib.Properties; use Glib.Properties; 
  56. with Glib.Types;      use Glib.Types; 
  57. with Gtk.Adjustment;  use Gtk.Adjustment; 
  58. with Gtk.Buildable;   use Gtk.Buildable; 
  59. with Gtk.Container;   use Gtk.Container; 
  60. with Gtk.Widget;      use Gtk.Widget; 
  61.  
  62. package Gtk.Layout is 
  63.  
  64.    type Gtk_Layout_Record is new Gtk_Container_Record with null record; 
  65.    type Gtk_Layout is access all Gtk_Layout_Record'Class; 
  66.  
  67.    ------------------ 
  68.    -- Constructors -- 
  69.    ------------------ 
  70.  
  71.    procedure Gtk_New 
  72.       (Layout      : out Gtk_Layout; 
  73.        Hadjustment : Gtk.Adjustment.Gtk_Adjustment := null; 
  74.        Vadjustment : Gtk.Adjustment.Gtk_Adjustment := null); 
  75.    procedure Initialize 
  76.       (Layout      : access Gtk_Layout_Record'Class; 
  77.        Hadjustment : Gtk.Adjustment.Gtk_Adjustment := null; 
  78.        Vadjustment : Gtk.Adjustment.Gtk_Adjustment := null); 
  79.    --  Creates a new Gtk.Layout.Gtk_Layout. Unless you have a specific 
  80.    --  adjustment you'd like the layout to use for scrolling, pass null for 
  81.    --  "hadjustment": horizontal scroll adjustment, or null 
  82.    --  "vadjustment": vertical scroll adjustment, or null 
  83.  
  84.    function Get_Type return Glib.GType; 
  85.    pragma Import (C, Get_Type, "gtk_layout_get_type"); 
  86.  
  87.    ------------- 
  88.    -- Methods -- 
  89.    ------------- 
  90.  
  91.    procedure Freeze (Layout : access Gtk_Layout_Record); 
  92.    --  This is a deprecated function, it doesn't do anything useful. 
  93.  
  94.    function Get_Bin_Window 
  95.       (Layout : access Gtk_Layout_Record) return Gdk.Window.Gdk_Window; 
  96.    --  Retrieve the bin window of the layout used for drawing operations. 
  97.    --  Since: gtk+ 2.14 
  98.  
  99.    function Get_Hadjustment 
  100.       (Layout : access Gtk_Layout_Record) 
  101.        return Gtk.Adjustment.Gtk_Adjustment; 
  102.    procedure Set_Hadjustment 
  103.       (Layout     : access Gtk_Layout_Record; 
  104.        Adjustment : access Gtk.Adjustment.Gtk_Adjustment_Record'Class); 
  105.    --  Return the adjustment that indicate the horizontal visual area of the 
  106.    --  layout. You generally do not have to modify the value of this adjustment 
  107.    --  yourself, since this is done automatically when the layout has been put 
  108.    --  in a Gtk_Scrolled_Window. 
  109.    --  "adjustment": new scroll adjustment 
  110.  
  111.    procedure Get_Size 
  112.       (Layout : access Gtk_Layout_Record; 
  113.        Width  : out Guint; 
  114.        Height : out Guint); 
  115.    procedure Set_Size 
  116.       (Layout : access Gtk_Layout_Record; 
  117.        Width  : Guint; 
  118.        Height : Guint); 
  119.    --  Sets the size of the scrollable area of the layout. 
  120.    --  "width": width of entire scrollable area 
  121.    --  "height": height of entire scrollable area 
  122.  
  123.    function Get_Vadjustment 
  124.       (Layout : access Gtk_Layout_Record) 
  125.        return Gtk.Adjustment.Gtk_Adjustment; 
  126.    procedure Set_Vadjustment 
  127.       (Layout     : access Gtk_Layout_Record; 
  128.        Adjustment : access Gtk.Adjustment.Gtk_Adjustment_Record'Class); 
  129.    --  Sets the vertical scroll adjustment for the layout. See 
  130.    --  Gtk.Scrolledwindow.Gtk_Scrolledwindow, Gtk.Scrollbar.Gtk_Scrollbar, 
  131.    --  Gtk.Adjustment.Gtk_Adjustment for details. 
  132.    --  "adjustment": new scroll adjustment 
  133.  
  134.    procedure Move 
  135.       (Layout       : access Gtk_Layout_Record; 
  136.        Child_Widget : access Gtk.Widget.Gtk_Widget_Record'Class; 
  137.        X            : Gint; 
  138.        Y            : Gint); 
  139.    --  Moves a current child of Layout to a new position. 
  140.    --  "child_widget": a current child of Layout 
  141.    --  "x": X position to move to 
  142.    --  "y": Y position to move to 
  143.  
  144.    procedure Put 
  145.       (Layout       : access Gtk_Layout_Record; 
  146.        Child_Widget : access Gtk.Widget.Gtk_Widget_Record'Class; 
  147.        X            : Gint; 
  148.        Y            : Gint); 
  149.    --  The child will be displayed on the screen only if at least part of it 
  150.    --  intersects the visible area of the layout. The layout does not resize 
  151.    --  itself to automatically show the widget. You also need to call Set_Size, 
  152.    --  if the size you initially defined is smaller than (X, Y), or the child 
  153.    --  will never be visible even if the layout is scrolled. 
  154.    --  "child_widget": child widget 
  155.    --  "x": X position of child widget 
  156.    --  "y": Y position of child widget 
  157.  
  158.    procedure Thaw (Layout : access Gtk_Layout_Record); 
  159.    --  This is a deprecated function, it doesn't do anything useful. 
  160.  
  161.    ---------------- 
  162.    -- Interfaces -- 
  163.    ---------------- 
  164.    --  This class implements several interfaces. See Glib.Types 
  165.    -- 
  166.    --  - "Buildable" 
  167.  
  168.    package Implements_Buildable is new Glib.Types.Implements 
  169.      (Gtk.Buildable.Gtk_Buildable, Gtk_Layout_Record, Gtk_Layout); 
  170.    function "+" 
  171.      (Widget : access Gtk_Layout_Record'Class) 
  172.    return Gtk.Buildable.Gtk_Buildable 
  173.    renames Implements_Buildable.To_Interface; 
  174.    function "-" 
  175.      (Interf : Gtk.Buildable.Gtk_Buildable) 
  176.    return Gtk_Layout 
  177.    renames Implements_Buildable.To_Object; 
  178.  
  179.    ---------------- 
  180.    -- Properties -- 
  181.    ---------------- 
  182.    --  The following properties are defined for this widget. See 
  183.    --  Glib.Properties for more information on properties) 
  184.    -- 
  185.    --  Name: Hadjustment_Property 
  186.    --  Type: Gtk.Adjustment.Gtk_Adjustment 
  187.    --  Flags: read-write 
  188.    -- 
  189.    --  Name: Height_Property 
  190.    --  Type: Guint 
  191.    --  Flags: read-write 
  192.    -- 
  193.    --  Name: Vadjustment_Property 
  194.    --  Type: Gtk.Adjustment.Gtk_Adjustment 
  195.    --  Flags: read-write 
  196.    -- 
  197.    --  Name: Width_Property 
  198.    --  Type: Guint 
  199.    --  Flags: read-write 
  200.  
  201.    Hadjustment_Property : constant Glib.Properties.Property_Object; 
  202.    Height_Property : constant Glib.Properties.Property_Uint; 
  203.    Vadjustment_Property : constant Glib.Properties.Property_Object; 
  204.    Width_Property : constant Glib.Properties.Property_Uint; 
  205.  
  206.    ------------- 
  207.    -- Signals -- 
  208.    ------------- 
  209.    --  The following new signals are defined for this widget: 
  210.    -- 
  211.    --  "set-scroll-adjustments" 
  212.    --     procedure Handler 
  213.    --       (Self   : access Gtk_Layout_Record'Class; 
  214.    --        Object : Gtk.Adjustment.Gtk_Adjustment; 
  215.    --        P0     : Gtk.Adjustment.Gtk_Adjustment); 
  216.    --  Set the scroll adjustments for the layout. Usually scrolled containers 
  217.    --  like Gtk.Scrolledwindow.Gtk_Scrolledwindow will emit this signal to 
  218.    --  connect two instances of Gtk.Scrollbar.Gtk_Scrollbar to the scroll 
  219.    --  directions of the Gtk.Layout.Gtk_Layout. 
  220.  
  221.    Signal_Set_Scroll_Adjustments : constant Glib.Signal_Name := "set-scroll-adjustments"; 
  222.  
  223. private 
  224.    Hadjustment_Property : constant Glib.Properties.Property_Object := 
  225.      Glib.Properties.Build ("hadjustment"); 
  226.    Height_Property : constant Glib.Properties.Property_Uint := 
  227.      Glib.Properties.Build ("height"); 
  228.    Vadjustment_Property : constant Glib.Properties.Property_Object := 
  229.      Glib.Properties.Build ("vadjustment"); 
  230.    Width_Property : constant Glib.Properties.Property_Uint := 
  231.      Glib.Properties.Build ("width"); 
  232. end Gtk.Layout;