1. ----------------------------------------------------------------------- 
  2. --               GtkAda - Ada95 binding for Gtk+/Gnome               -- 
  3. --                                                                   -- 
  4. --      Copyright (C) 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. -- 
  32. --  This package implements a high-level, general purpose plotting widget. 
  33. --  You can display any set of data (set of points, curve defined by a 
  34. --  parametric function, ...). This widget can automatically display them 
  35. --  as a curve, along with labelled axis, axis tic marks, legends,... 
  36. -- 
  37. --  This is the base class, that provides 2D graphics. Some children provide 
  38. --  polar-coordinates and 3D graphics in addition. 
  39. -- 
  40. --  It fully supports the drag-and-drop protocol for all of its children, 
  41. --  which means that the user can interactively move them in the Gtk_Plot 
  42. --  area. 
  43. -- 
  44. --  A Gtk_Plot is closely associated with a Gdk_Drawable, on which all the 
  45. --  drawings are done. It can be done anywhere within that drawable, its 
  46. --  "position" is indicated by a tuple (X, Y), which are two values between 
  47. --  0.0 and 1.0 (from left to right, or from top to bottom). 
  48. --  Its size is also given as a ratio other the drawable's size. 
  49. -- 
  50. --  Most points in the plot have also this relative coordinates systems, which 
  51. --  makes it really easy to handle resizing of a plot window. 
  52. -- 
  53. --  See the package Gtk.Extra.Plot_Ps for a way to easily print a Gtk_Plot to 
  54. --  a postscript file. 
  55. -- 
  56. --  In this package, font parameters are sometimes required. Here is the 
  57. --  list of possible fonts used by Gtk.Extra: 
  58. -- 
  59. --   - "Times-Roman", 
  60. --   - "Times-Italic", 
  61. --   - "Times-Bold", 
  62. --   - "Times-BoldItalic", 
  63. --   - "AvantGarde-Book", 
  64. --   - "AvantGarde-BookOblique", 
  65. --   - "AvantGarde-Demi", 
  66. --   - "AvantGarde-DemiOblique", 
  67. --   - "Bookman-Light", 
  68. --   - "Bookman-LightItalic", 
  69. --   - "Bookman-Demi", 
  70. --   - "Bookman-DemiItalic", 
  71. --   - "Courier", 
  72. --   - "Courier-Oblique", 
  73. --   - "Courier-Bold", 
  74. --   - "Courier-BoldOblique", 
  75. --   - "Helvetica", 
  76. --   - "Helvetica-Oblique", 
  77. --   - "Helvetica-Bold", 
  78. --   - "Helvetica-BoldOblique", 
  79. --   - "Helvetica-Narrow", 
  80. --   - "Helvetica-Narrow-Oblique", 
  81. --   - "Helvetica-Narrow-Bold", 
  82. --   - "Helvetica-Narrow-BoldOblique", 
  83. --   - "NewCenturySchoolbook-Roman", 
  84. --   - "NewCenturySchoolbook-Italic", 
  85. --   - "NewCenturySchoolbook-Bold", 
  86. --   - "NewCenturySchoolbook-BoldItalic", 
  87. --   - "Palatino-Roman", 
  88. --   - "Palatino-Italic", 
  89. --   - "Palatino-Bold", 
  90. --   - "Palatino-BoldItalic", 
  91. --   - "Symbol", 
  92. --   - "ZapfChancery-MediumItalic", 
  93. --   - "ZapfDingbats", 
  94. -- 
  95. --  </description> 
  96. --  <c_version>gtkextra 2.1.1</c_version> 
  97. --  <group>Plotting Data</group> 
  98. --  <testgtk>create_plot.adb</testgtk> 
  99. --  <screenshot>gtk-plot</screenshot> 
  100.  
  101. with Glib.Object; 
  102.  
  103. with System; 
  104. with Gdk.Color; 
  105. with Gdk.Drawable; 
  106. with Gdk.Pixmap; 
  107. with Gdk.Rectangle; 
  108. with Gtk.Enums; 
  109. with Gtk.Extra.Plot_Data;   use Gtk.Extra.Plot_Data; 
  110. with Gtk.Widget; 
  111.  
  112. package Gtk.Extra.Plot is 
  113.  
  114.    type Gtk_Plot_Record is new Gtk.Widget.Gtk_Widget_Record with private; 
  115.    type Gtk_Plot is access all Gtk_Plot_Record'Class; 
  116.  
  117.    type Gtk_Plot_Axis_Record is new Glib.Object.GObject_Record with private; 
  118.    type Gtk_Plot_Axis is access all Gtk_Plot_Axis_Record'Class; 
  119.    --  One of the axis of the plot. 
  120.    --  There are up to six axis for each plot, one on each side. They can have 
  121.    --  ticks, labels, etc. 
  122.  
  123.    type Gtk_Plot_Text is new Gdk.C_Proxy; 
  124.    --  A text that can be displayed anywhere on the plot. 
  125.  
  126.    type Gtk_Plot_Line is new Gdk.C_Proxy; 
  127.    --  A simple line drawn on the plot. 
  128.  
  129.    type Gtk_Plot_Symbol is new Gdk.C_Proxy; 
  130.    type Gtk_Plot_Tick   is new Gdk.C_Proxy; 
  131.    type Gtk_Plot_Ticks  is new Gdk.C_Proxy; 
  132.  
  133.    type Plot_Vector is record 
  134.       X, Y, Z : Gdouble; 
  135.    end record; 
  136.  
  137.    ---------------- 
  138.    -- Enum types -- 
  139.    ---------------- 
  140.  
  141.    type Plot_Border_Style is 
  142.      (Border_None, 
  143.       --  No border is drawn 
  144.  
  145.       Border_Line, 
  146.       --  A simple line on each side 
  147.  
  148.       Border_Shadow 
  149.       --  The right and bottom lines are 
  150.       --  thicker 
  151.      ); 
  152.    --  Border types used for legends. 
  153.    pragma Convention (C, Plot_Border_Style); 
  154.  
  155.    --     subtype Plot_Scale        is Gtk.Extra.Plot_Data.Plot_Scale; 
  156.    --     subtype Plot_Label_Style  is Gtk.Extra.Plot_Data.Plot_Label_Style; 
  157.    --     subtype Plot_Symbol_Style is Gtk.Extra.Plot_Data.Plot_Symbol_Style; 
  158.    --     subtype Plot_Symbol_Type  is Gtk.Extra.Plot_Data.Plot_Symbol_Type; 
  159.    --     subtype Plot_Line_Style   is Gtk.Extra.Plot_Data.Plot_Line_Style; 
  160.    --     subtype Plot_Connector    is Gtk.Extra.Plot_Data.Plot_Connector; 
  161.  
  162.    --  In C, these types are declared in gtkplot.h. However, because of type 
  163.    --  circularity, we need to define them in Gtk.Extra.Plot_Data, and have 
  164.    --  subtypes here. This would lead to unnecessary required qualification in 
  165.    --  user code though... 
  166.  
  167.    type Plot_Label_Pos is new Integer; 
  168.    --  Position of labels along an axis. 
  169.  
  170.    Label_None   : constant Plot_Label_Pos; 
  171.    Label_In     : constant Plot_Label_Pos; 
  172.    Label_Out    : constant Plot_Label_Pos; 
  173.  
  174.    type Plot_Error is (Error_Div_Zero, Error_Log_Neg); 
  175.    --  Errors that can be encountered while calculating a graph. 
  176.    pragma Convention (C, Plot_Error); 
  177.  
  178.    type Plot_Axis_Pos is (Axis_Left, Axis_Right, Axis_Top, Axis_Bottom); 
  179.    --  Where the axis should be put 
  180.    pragma Convention (C, Plot_Axis_Pos); 
  181.  
  182.    type Plot_Orientation is (Axis_X, Axis_Y, Axis_Z); 
  183.    --  How to reference axis in 3D plots 
  184.    pragma Convention (C, Plot_Orientation); 
  185.  
  186.    type Plot_Ticks_Pos is new Integer; 
  187.    --  The position and orientation of the ticks along an axis. 
  188.    --  See the constants below for the possible values. 
  189.    --  Note also that not all the values are valid with all types of axis. 
  190.  
  191.    Ticks_None  : constant Plot_Ticks_Pos; 
  192.    Ticks_In    : constant Plot_Ticks_Pos; 
  193.    Ticks_Out   : constant Plot_Ticks_Pos; 
  194.  
  195.    --------------------- 
  196.    -- Creating a plot -- 
  197.    --------------------- 
  198.  
  199.    procedure Gtk_New 
  200.      (Plot     : out Gtk_Plot; 
  201.       Drawable : Gdk.Drawable.Gdk_Drawable := Gdk.Drawable.Null_Drawable); 
  202.    --  Create a new plot, that will be displayed in Drawable. 
  203.    --  All the dataset, labels, axis,... associated with the plot will be drawn 
  204.    --  in that drawable, which must have been created beforehand. 
  205.    --  Note that the drawable can also be set later with Set_Drawable. 
  206.  
  207.    procedure Gtk_New 
  208.      (Plot     : out Gtk_Plot; 
  209.       Width    : Gdouble; 
  210.       Height   : Gdouble; 
  211.       Drawable : Gdk.Drawable.Gdk_Drawable := Gdk.Drawable.Null_Drawable); 
  212.    --  Create a new plot with a specific size. 
  213.  
  214.    procedure Initialize 
  215.      (Plot     : access Gtk_Plot_Record'Class; 
  216.       Drawable : Gdk.Drawable.Gdk_Drawable); 
  217.    --  Internal initialization function. 
  218.    --  See the section "Creating your own widgets" in the documentation. 
  219.  
  220.    procedure Initialize 
  221.      (Plot     : access Gtk_Plot_Record'Class; 
  222.       Drawable : Gdk.Drawable.Gdk_Drawable; 
  223.       Width    : Gdouble; 
  224.       Height   : Gdouble); 
  225.    --  Internal initialization function. 
  226.    --  See the section "Creating your own widgets" in the documentation. 
  227.  
  228.    function Get_Type return Gtk.Gtk_Type; 
  229.    --  Return the internal value associated with a Gtk_Plot. 
  230.  
  231.    procedure Set_Drawable 
  232.      (Plot     : access Gtk_Plot_Record; 
  233.       Drawable : Gdk.Drawable.Gdk_Drawable); 
  234.    --  Modify the drawable on which the graphs are displayed. 
  235.    --  From now on, all the drawings will be done on that drawable. Note that 
  236.    --  they are not automatically copied to the new Drawable until the Plot 
  237.    --  needs to be redrawn. 
  238.  
  239.    function Get_Drawable 
  240.      (Plot : access Gtk_Plot_Record) return Gdk.Drawable.Gdk_Drawable; 
  241.    --  Return the drawable on which the graphs are plotted. 
  242.  
  243.    procedure Set_Background 
  244.      (Plot       : access Gtk_Plot_Record; 
  245.       Background : Gdk.Color.Gdk_Color); 
  246.    --  Change the background for the plot. 
  247.    --  Note that this has no effect if the plot has been set to transparent 
  248.    --  (see the flags below). 
  249.    --  The Plot is also redrawn as soon as you modify this color. 
  250.  
  251.    procedure Set_Background_Pixmap 
  252.      (Plot : access Gtk_Plot_Record; Pixmap : Gdk.Pixmap.Gdk_Pixmap); 
  253.    --  Specificy a background pixmap to use for the plot 
  254.  
  255.    procedure Set_Transparent 
  256.      (Plot : access Gtk_Plot_Record; Transparent : Boolean); 
  257.    --  Whether the plot is transparent. If Transparent is True, all background 
  258.    --  attributes are ignored (pixmap, color,...) 
  259.  
  260.    function Is_Transparent (Plot : access Gtk_Plot_Record) return Boolean; 
  261.    --  Whether the plot is current transparent 
  262.  
  263.    procedure Paint (Plot : access Gtk_Plot_Record); 
  264.    --  Force an immediate repaint of the widget in its pixmap. 
  265.    --  The modification won't appear on the screen until you call Refresh. 
  266.    --  It is probably not a good idea to call this function directly, and it 
  267.    --  is more efficient to queue a draw request (see the Gtk.Widget package 
  268.    --  for related functions). 
  269.  
  270.    procedure Refresh 
  271.      (Plot : access Gtk_Plot_Record; 
  272.       Area : Gdk.Rectangle.Gdk_Rectangle); 
  273.    --  Copy the plot's pixmap to the screen. 
  274.    --  The same comment as for Paint applies here, and you probably don't 
  275.    --  have to call this function yourself, since queuing a draw request is 
  276.    --  more efficient. 
  277.  
  278.    ---------------------------- 
  279.    --  Coordinates and sizes -- 
  280.    ---------------------------- 
  281.  
  282.    procedure Get_Position 
  283.      (Plot : access Gtk_Plot_Record; 
  284.       X    : out Gdouble; 
  285.       Y    : out Gdouble); 
  286.    --  Return the position of the Plot within its drawable. 
  287.    --  X and Y are in the range 0.0 .. 1.0, where (0.0, 0.0) is the top-left 
  288.    --  corner and (1.0, 1.0) the bottom-right corner. The position can be 
  289.    --  modified by Move below. 
  290.  
  291.    procedure Get_Size 
  292.      (Plot   : access Gtk_Plot_Record; 
  293.       Width  : out Gdouble; 
  294.       Height : out Gdouble); 
  295.    --  Return the size of the Plot. 
  296.    --  Width and Height are both in the range 0.0 .. 1.0, where 1.0 means they 
  297.    --  occupy all the space available in the Drawable, 0.5 means they only 
  298.    --  occupy half of it. 
  299.  
  300.    function Get_Internal_Allocation 
  301.      (Plot : access Gtk_Plot_Record) return Gtk.Widget.Gtk_Allocation; 
  302.    --  Return the real position/size of the plot inside its parent container. 
  303.    --  You should use this function instead of converting yourself the result 
  304.    --  of Get_Position and Get_Size. 
  305.  
  306.    procedure Set_Magnification 
  307.      (Plot          : access Gtk_Plot_Record; 
  308.       Magnification : Gdouble); 
  309.    --  Change the magnification level of the plot. 
  310.    --  1.0 is the default magnification, higher values will zoom in while lower 
  311.    --  values will zoom out. 
  312.  
  313.    procedure Move 
  314.      (Plot : access Gtk_Plot_Record; 
  315.       X    : Gdouble; 
  316.       Y    : Gdouble); 
  317.    --  Move the plot widget inside its drawable. 
  318.    --  X and Y should both be in the range 0.0 .. 1.0 (from top-left corner 
  319.    --  to bottom-right corner). 
  320.  
  321.    procedure Resize 
  322.      (Plot   : access Gtk_Plot_Record; 
  323.       Width  : Gdouble; 
  324.       Height : Gdouble); 
  325.    --  Resize the widget. 
  326.    --  Width and Height should both be in the range 0.0 .. 1.0, this indicates 
  327.    --  which ratio of the drawable's screen real-estate they should use. 
  328.  
  329.    procedure Move_Resize 
  330.      (Plot   : access Gtk_Plot_Record; 
  331.       X      : Gdouble; 
  332.       Y      : Gdouble; 
  333.       Width  : Gdouble; 
  334.       Height : Gdouble); 
  335.    --  Move and resize the widget in a single operation. 
  336.    --  This is faster than doing each operation separately. 
  337.  
  338.    procedure Get_Pixel 
  339.      (Plot : access Gtk_Plot_Record; 
  340.       Xx   : Gdouble; 
  341.       Yy   : Gdouble; 
  342.       X    : out Gdouble; 
  343.       Y    : out Gdouble); 
  344.    --  Get the screen coordinate (relative to Plot's parent) of a point. 
  345.    --  The initial coordinates (Xx, Yy) should be in the range 0.0 .. 1.0. 
  346.  
  347.    procedure Clip_Data (Plot : access Gtk_Plot_Record; Clip : Boolean); 
  348.    --  If Clip is True, any drawing of a Gtk_Plot_Data will be limited to the 
  349.    --  area occupied by Plot. Otherwise, it might draw outside of Plot. 
  350.  
  351.    procedure Get_Point 
  352.      (Plot : access Gtk_Plot_Record; 
  353.       X    : Gint; 
  354.       Y    : Gint; 
  355.       Xx   : out Gdouble; 
  356.       Yy   : out Gdouble); 
  357.    --  Convert from an absolute screen coordinate to a relative one. 
  358.    --  (X, Y) should be relative to Plot's parent. 
  359.    --  This function is the opposite of Get_Pixel. 
  360.  
  361.    procedure Set_Xrange 
  362.      (Plot : access Gtk_Plot_Record; 
  363.       Xmin : Gdouble := 0.0; 
  364.       Xmax : Gdouble := 1.0); 
  365.    --  Set the range of visible points for this plot. 
  366.    --  Only the points of the graph those coordinates are in the range 
  367.    --  Xmin .. Xmax will be visible. 
  368.  
  369.    procedure Set_Yrange 
  370.      (Plot : access Gtk_Plot_Record; 
  371.       Ymin : Gdouble := 0.0; 
  372.       Ymax : Gdouble := 1.0); 
  373.    --  Set the range of visible points for this plot. 
  374.    --  Only the points of the graph those coordinates are in the range 
  375.    --  Xmin .. Xmax will be visible. 
  376.  
  377.    procedure Set_Range 
  378.      (Plot : access Gtk_Plot_Record; 
  379.       Xmin : Gdouble := 0.0; 
  380.       Xmax : Gdouble := 1.0; 
  381.       Ymin : Gdouble := 0.0; 
  382.       Ymax : Gdouble := 1.0); 
  383.    --  Set both ranges at the same time 
  384.  
  385.    procedure Autoscale (Plot : access Gtk_Plot_Record); 
  386.    --  Calculate automically the appropriate ranges for the plot. 
  387.  
  388.    procedure Get_Xrange 
  389.      (Plot : access Gtk_Plot_Record; 
  390.       Xmin : out Gdouble; 
  391.       Xmax : out Gdouble); 
  392.    --  Get the current range for the X axis. 
  393.  
  394.    procedure Get_Yrange 
  395.      (Plot : access Gtk_Plot_Record; 
  396.       Ymin : out Gdouble; 
  397.       Ymax : out Gdouble); 
  398.    --  Get the current range for the X axis. 
  399.  
  400.    procedure Set_Xscale 
  401.      (Plot       : access Gtk_Plot_Record; 
  402.       Scale_Type : Plot_Scale); 
  403.    --  Set the type of the X axis (logarithmic, linear, ...). 
  404.  
  405.    procedure Set_Yscale 
  406.      (Plot       : access Gtk_Plot_Record; 
  407.       Scale_Type : Plot_Scale); 
  408.    --  Set the type of the Y axis (logarithmic, linear, ...). 
  409.  
  410.    function Get_Xscale 
  411.      (Plot : access Gtk_Plot_Record) return Plot_Scale; 
  412.    --  Get the type of the X axis. 
  413.  
  414.    function Get_Yscale 
  415.      (Plot : access Gtk_Plot_Record) return Plot_Scale; 
  416.    --  Get the type of the Y axis. 
  417.  
  418.    procedure Reflect_X (Plot : access Gtk_Plot_Record; Reflect : Boolean); 
  419.    --  Reverse the direction of the X axis 
  420.  
  421.    function Is_X_Reflected (Plot : access Gtk_Plot_Record) return Boolean; 
  422.    --  Whether the X axis is currently reflected 
  423.  
  424.    procedure Reflect_Y (Plot : access Gtk_Plot_Record; Reflect : Boolean); 
  425.    --  Reverse the direction of the Y axis 
  426.  
  427.    function Is_Y_Reflected (Plot : access Gtk_Plot_Record) return Boolean; 
  428.    --  Whether the Y axis is currently reflected 
  429.  
  430.    ---------- 
  431.    -- Text -- 
  432.    ---------- 
  433.  
  434.    function Put_Text 
  435.      (Plot          : access Gtk_Plot_Record; 
  436.       X             : Gdouble; 
  437.       Y             : Gdouble; 
  438.       Font          : String := ""; 
  439.       Font_Height   : Gint := 10; 
  440.       Angle         : Plot_Angle; 
  441.       Foreground    : Gdk.Color.Gdk_Color := Gdk.Color.Null_Color; 
  442.       Background    : Gdk.Color.Gdk_Color := Gdk.Color.Null_Color; 
  443.       Transparent   : Boolean := False; 
  444.       Justification : Gtk.Enums.Gtk_Justification := Gtk.Enums.Justify_Center; 
  445.       Text          : String := "") return Gtk_Plot_Text; 
  446.    --  Print some text in Plot. 
  447.    --  The text will be drawn at the relative coordinates (X, Y), with a 
  448.    --  specified Angle. 
  449.    --  If Font is the empty string, a default font and default Font_Height 
  450.    --  will be used. Likewise, default colors will be used if you don't 
  451.    --  specify any. Font should be the name of a postscript font, the list of 
  452.    --  which can be found in Gtk.Plot.Psfont. 
  453.    --  If Transparent is True, then no background will be drawn for the text. 
  454.  
  455.    procedure Remove_Text 
  456.      (Plot : access Gtk_Plot_Record; 
  457.       Text : Gtk_Plot_Text); 
  458.    --  Remove some text that is currently visible on the plot. 
  459.    --  Nothing is done if Text is currently not visible. 
  460.  
  461.    procedure Text_Get_Area 
  462.      (Text          : Gtk_Plot_Text; 
  463.       Angle         : Plot_Angle; 
  464.       Just          : Gtk.Enums.Gtk_Justification; 
  465.       Font_Name     : String; 
  466.       Font_Size     : Gint; 
  467.       X             : out Gint; 
  468.       Y             : out Gint; 
  469.       Width         : out Gint; 
  470.       Height        : out Gint); 
  471.    --  Return the area currently occupied by a text. 
  472.    --  The coordinates are relative to the top-left corner of the plot in 
  473.    --  which the text was put. 
  474.  
  475.    procedure Text_Get_Size 
  476.      (Text          : Gtk_Plot_Text; 
  477.       Angle         : Plot_Angle; 
  478.       Font_Name     : String; 
  479.       Font_Size     : Gint; 
  480.       Width         : out Gint; 
  481.       Height        : out Gint; 
  482.       Ascent        : out Gint; 
  483.       Descent       : out Gint); 
  484.    --  Return the size in pixels occupied by a text in the plot. 
  485.    --  See Gtk.Extra.Plot_Canvas for a function that returns a Gtk_Plot_Text. 
  486.  
  487.    procedure Text_Set_Attributes 
  488.      (Text          : Gtk_Plot_Text; 
  489.       Font          : String; 
  490.       Height        : Gint; 
  491.       Angle         : Plot_Angle; 
  492.       Fg            : Gdk.Color.Gdk_Color; 
  493.       Bg            : Gdk.Color.Gdk_Color; 
  494.       Transparent   : Boolean := False; 
  495.       Justification : Gtk.Enums.Gtk_Justification := Gtk.Enums.Justify_Center; 
  496.       Str           : String := ""); 
  497.    --  Change the attributes of Text. 
  498.  
  499.    procedure Text_Set_Border 
  500.      (Text         : Gtk_Plot_Text; 
  501.       Border       : Plot_Border_Style; 
  502.       Border_Space : Gint; 
  503.       Border_Width : Gint; 
  504.       Shadow_Width : Gint); 
  505.    --  Set the border attributes for the text 
  506.  
  507.    procedure Draw_Text 
  508.      (Plot : access Gtk_Plot_Record; 
  509.       Text : Gtk_Plot_Text); 
  510.    --  Draw the text 
  511.  
  512.    ----------- 
  513.    -- Lines -- 
  514.    ----------- 
  515.  
  516.    procedure Draw_Line 
  517.      (Plot           : access Gtk_Plot_Record; 
  518.       Line           : Gtk_Plot_Line; 
  519.       X1, Y1, X2, Y2 : Gdouble); 
  520.    --  Draw a line on the plot 
  521.  
  522.    procedure Set_Line_Attributes 
  523.      (Plot : access Gtk_Plot_Record; 
  524.       Line : Gtk_Plot_Line); 
  525.  
  526.    ---------- 
  527.    -- Axis -- 
  528.    ---------- 
  529.    --  A Gtk_Plot has four axis, one one each of its sides. These axis can 
  530.    --  have ticks, labels for ticks, titles, ... associated with them. 
  531.  
  532.    procedure Set_Ticks 
  533.      (Plot        : access Gtk_Plot_Record; 
  534.       Orientation : Plot_Orientation; 
  535.       Major_Step  : Gdouble; 
  536.       Num_Minor   : Gint); 
  537.    --  Set up ticks for a specific orientation. 
  538.    --  A horizontal orientation will match the left and right sides, whereas 
  539.    --  a vertical orientation will match the top and bottom sides. 
  540.    --  Major_Step is a value between 0.0 and 1.0 which indicates the 
  541.    --  proportion of the total axis length between successive big ticks. 
  542.    --  For instance, if Major_Step has a value of 0.2, there will be 5 big 
  543.    --  ticks drawn along the axis. 
  544.    --  Num_Minor is the number of minor ticks between each major one. 
  545.  
  546.    procedure Set_Major_Ticks 
  547.      (Plot        : access Gtk_Plot_Record; 
  548.       Orientation : Plot_Orientation; 
  549.       Major_Step  : Gdouble); 
  550.    --  Modify the step for major ticks. 
  551.    --  Major_Step is a value between 0.0 and 1.0 which indicates the 
  552.    --  proportion of the total axis length between successive big ticks. 
  553.    --  For instance, if Major_Step has a value of 0.2, there will be 5 big 
  554.    --  ticks drawn along the axis. 
  555.    --  See also Set_Ticks. 
  556.  
  557.    procedure Set_Minor_Ticks 
  558.      (Plot        : access Gtk_Plot_Record; 
  559.       Orientation : Plot_Orientation; 
  560.       Num_Minor   : Gint); 
  561.    --  Modify the number of minor ticks between each major one. 
  562.    --  See also Axis_Set_Ticks. 
  563.  
  564.    procedure Set_Ticks_Limits 
  565.      (Plot        : access Gtk_Plot_Record; 
  566.       Orientation : Plot_Orientation; 
  567.       Ticks_Begin : Gdouble; 
  568.       Ticks_End   : Gdouble); 
  569.    --  Indicate the area of the axis that should have ticks. 
  570.    --  Ticks will be displayed only from Ticks_Beg to Ticks_End. 
  571.  
  572.    procedure Unset_Ticks_Limits 
  573.      (Plot        : access Gtk_Plot_Record; 
  574.       Orientation : Plot_Orientation); 
  575.    --  Cancel the ticks limits set by a previous call to 
  576.    --  Axis_Set_Ticks_Limits. 
  577.  
  578.    procedure Set_Break 
  579.      (Plot         : access Gtk_Plot_Record; 
  580.       Orient       : Plot_Orientation; 
  581.       Min, Max     : Gdouble; 
  582.       Step_After   : Gdouble; 
  583.       Nminor_After : Gint; 
  584.       Scale_After  : Plot_Scale; 
  585.       Pos          : Gdouble); 
  586.    --  ??? 
  587.  
  588.    procedure Remove_Break 
  589.      (Plot : access Gtk_Plot_Record; Orient : Plot_Orientation); 
  590.    --  ??? 
  591.  
  592.    procedure Gtk_New 
  593.      (Axis        : out Gtk_Plot_Axis; 
  594.       Orientation : Plot_Orientation); 
  595.    --  Create a new axis 
  596.  
  597.    procedure Initialize 
  598.      (Axis        : access Gtk_Plot_Axis_Record'Class; 
  599.       Orientation : Plot_Orientation); 
  600.    --  Internal initialization function. 
  601.    --  See the section "Creating your own widgets" in the documentation. 
  602.  
  603.    function Axis_Get_Type return Gtk_Type; 
  604.    --  Return the internal value associated with a Gtk_Plot_Axis. 
  605.  
  606.    function Get_Axis 
  607.      (Plot   : access Gtk_Plot_Record; 
  608.       Axis   : Plot_Axis_Pos) return Gtk_Plot_Axis; 
  609.    --  Get a pointer to an axis. 
  610.  
  611.    function Gradient 
  612.      (Data : access Gtk_Plot_Data_Record'Class) return Gtk_Plot_Axis; 
  613.    --  Return the gradient associated with Data. 
  614.    -- 
  615.    --  This function cannot be defined in Gtk.Plot_Data, since Gtk_Plot_Axis 
  616.    --  must be defined in the same package as its primitive operations, ie 
  617.    --  Gtk.Plot 
  618.  
  619.    procedure Axis_Set_Visible 
  620.      (Axis    : access Gtk_Plot_Axis_Record; 
  621.       Visible : Boolean); 
  622.    --  Indicate whether the axis should be visible or not. 
  623.  
  624.    function Axis_Visible 
  625.      (Axis    : access Gtk_Plot_Axis_Record) return Boolean; 
  626.    --  Return the visibility state of the axis 
  627.  
  628.    procedure Axis_Set_Title 
  629.      (Axis  : access Gtk_Plot_Axis_Record; 
  630.       Title : String); 
  631.    --  Modify the title of the axis. 
  632.    --  Each axis has a title that is displayed along its line (vertically 
  633.    --  for the left and right sides). 
  634.  
  635.    procedure Axis_Show_Title 
  636.      (Axis : access Gtk_Plot_Axis_Record); 
  637.    --  Show the title associated with the axis. 
  638.  
  639.    procedure Axis_Hide_Title 
  640.      (Axis : access Gtk_Plot_Axis_Record); 
  641.    --  Hide the title associated with the axis. 
  642.  
  643.    procedure Axis_Move_Title 
  644.      (Axis  : access Gtk_Plot_Axis_Record; 
  645.       Angle : Plot_Angle; 
  646.       X     : Gdouble; 
  647.       Y     : Gdouble); 
  648.    --  Modify the position and orientation of the axis' title. 
  649.    --  X and Y indicate a position relative to the location of the axis (0.0 
  650.    --  to display it to the left (resp. top) of the axis, 1.0 to display it 
  651.    --  to the right (resp. bottom) of the axis. 
  652.  
  653.    procedure Axis_Justify_Title 
  654.      (Axis          : access Gtk_Plot_Axis_Record; 
  655.       Justification : Gtk.Enums.Gtk_Justification); 
  656.    --  Modify the justification for the axis. 
  657.  
  658.    procedure Axis_Set_Attributes 
  659.      (Axis  : access Gtk_Plot_Axis_Record; 
  660.       Width : Gfloat; 
  661.       Color : Gdk.Color.Gdk_Color); 
  662.    --  Modify the attributes of the lines of the axis. 
  663.  
  664.    procedure Axis_Get_Attributes 
  665.      (Axis  : access Gtk_Plot_Axis_Record; 
  666.       Width : out    Gfloat; 
  667.       Color : out    Gdk.Color.Gdk_Color); 
  668.    --  Get the attributes of the axis. 
  669.  
  670.    procedure Axis_Set_Ticks 
  671.      (Axis        : access Gtk_Plot_Axis_Record; 
  672.       Major_Step  : Gdouble; 
  673.       Num_Minor   : Gint); 
  674.    --  Set up ticks for a specific orientation. 
  675.    --  A horizontal orientation will match the left and right sides, whereas 
  676.    --  a vertical orientation will match the top and bottom sides. 
  677.    --  Major_Step is a value between 0.0 and 1.0 which indicates the 
  678.    --  proportion of the total axis length between successive big ticks. 
  679.    --  For instance, if Major_Step has a value of 0.2, there will be 5 big 
  680.    --  ticks drawn along the axis. 
  681.  
  682.    procedure Axis_Set_Major_Ticks 
  683.      (Axis        : access Gtk_Plot_Axis_Record; 
  684.       Major_Step  : Gdouble); 
  685.    --  Modify the step for major ticks. 
  686.    --  Major_Step is a value between 0.0 and 1.0 which indicates the 
  687.    --  proportion of the total axis length between successive big ticks. 
  688.    --  For instance, if Major_Step has a value of 0.2, there will be 5 big 
  689.    --  ticks drawn along the axis. 
  690.    --  See also Axis_Set_Ticks. 
  691.  
  692.    procedure Axis_Set_Minor_Ticks 
  693.      (Axis        : access Gtk_Plot_Axis_Record; 
  694.       Num_Minor   : Gint); 
  695.    --  Modify the number of minor ticks between each major one. 
  696.    --  See also Axis_Set_Ticks. 
  697.  
  698.    procedure Axis_Set_Ticks_Length 
  699.      (Axis   : access Gtk_Plot_Axis_Record; 
  700.       Length : Gint); 
  701.    --  Set the length (in pixels) of the big ticks. 
  702.    --  The small ticks will have half this length. 
  703.  
  704.    procedure Axis_Set_Ticks_Width 
  705.      (Axis  : access Gtk_Plot_Axis_Record; 
  706.       Width : Gfloat); 
  707.    --  Set the width (in pixels) of the ticks. 
  708.    --  This width is common to both the long and short ticks. 
  709.  
  710.    procedure Axis_Show_Ticks 
  711.      (Axis       : access Gtk_Plot_Axis_Record; 
  712.       Major_Mask : Plot_Ticks_Pos; 
  713.       Minor_Mask : Plot_Ticks_Pos); 
  714.    --  Set the style of the ticks. 
  715.  
  716.    procedure Axis_Set_Ticks_Limits 
  717.      (Axis        : access Gtk_Plot_Axis_Record; 
  718.       Ticks_Begin : Gdouble; 
  719.       Ticks_End   : Gdouble); 
  720.    --  Indicate the area of the axis that should have ticks. 
  721.    --  Ticks will be displayed only from Ticks_Beg to Ticks_End. 
  722.  
  723.    procedure Axis_Unset_Ticks_Limits 
  724.      (Axis        : access Gtk_Plot_Axis_Record); 
  725.    --  Cancel the ticks limits set by a previous call to 
  726.    --  Axis_Set_Ticks_Limits. 
  727.  
  728.    procedure Axis_Set_Break 
  729.      (Axis         : access Gtk_Plot_Axis_Record; 
  730.       Min, Max     : Gdouble; 
  731.       Step_After   : Gdouble; 
  732.       Nminor_After : Gint; 
  733.       Scale_After  : Plot_Scale; 
  734.       Pos          : Gdouble); 
  735.    --  ??? 
  736.  
  737.    procedure Axis_Remove_Break (Axis : access Gtk_Plot_Axis_Record); 
  738.    --  ??? 
  739.  
  740.    procedure Axis_Show_Labels 
  741.      (Axis        : access Gtk_Plot_Axis_Record; 
  742.       Labels_Mask : Plot_Label_Pos); 
  743.    --  Indicate whether a label should be drawn at each ticks to indicate 
  744.    --  its value. 
  745.    --  Not all values of Labels_Mask are relevant for all axis. For instance, 
  746.    --  for a vertical axis, the relevant values are Axis_Right and Axis_Left. 
  747.  
  748.    procedure Axis_Title_Set_Attributes 
  749.      (Axis          : access Gtk_Plot_Axis_Record; 
  750.       Font          : String; 
  751.       Height        : Gint; 
  752.       Angle         : Plot_Angle; 
  753.       Foreground    : Gdk.Color.Gdk_Color; 
  754.       Background    : Gdk.Color.Gdk_Color; 
  755.       Transparent   : Boolean; 
  756.       Justification : Gtk.Enums.Gtk_Justification); 
  757.    --  Set the attributes to be used for the title of the axis. 
  758.    --  Font is a postscript font name (as listed in the beginning of this 
  759.    --  package). 
  760.  
  761.    procedure Axis_Set_Labels_Attributes 
  762.      (Axis          : access Gtk_Plot_Axis_Record; 
  763.       Font          : String; 
  764.       Height        : Gint; 
  765.       Angle         : Plot_Angle; 
  766.       Foreground    : Gdk.Color.Gdk_Color; 
  767.       Background    : Gdk.Color.Gdk_Color; 
  768.       Transparent   : Boolean; 
  769.       Justification : Gtk.Enums.Gtk_Justification); 
  770.    --  Set the attributes to be used for the ticks labels. 
  771.  
  772.    procedure Axis_Set_Labels_Offset 
  773.      (Axis   : access Gtk_Plot_Axis_Record; 
  774.       Offset : Gint); 
  775.    --  Set the distance between the axis and its labels 
  776.  
  777.    function Axis_Get_Labels_Offset 
  778.      (Axis : access Gtk_Plot_Axis_Record) return Gint; 
  779.    --  Get the distance between the axis and its labels. 
  780.  
  781.    procedure Axis_Set_Labels_Style 
  782.      (Axis      : access Gtk_Plot_Axis_Record; 
  783.       Style     : Plot_Label_Style; 
  784.       Precision : Gint); 
  785.    --  Set the style of labels. 
  786.    --  This indicates whether the labels should be displayed as floating 
  787.    --  point values or in the scientific notation. 
  788.    --  Precision is the number of digits to be printed. 
  789.  
  790.    procedure Axis_Use_Custom_Tick_Labels 
  791.      (Axis   : access Gtk_Plot_Axis_Record; 
  792.       Custom : Boolean := True); 
  793.    --  Indicate which kind of labels should be used for major ticks. 
  794.    --  If Custom is True, then the labels set by Axis_Set_Tick_Labels will 
  795.    --  be used. 
  796.  
  797.    procedure Axis_Set_Labels_Suffix 
  798.      (Axis : access Gtk_Plot_Axis_Record; 
  799.       Text : String); 
  800.    --  Defines a suffix to add after each label on the axis 
  801.  
  802.    procedure Axis_Set_Labels_Prefix 
  803.      (Axis : access Gtk_Plot_Axis_Record; 
  804.       Text : String); 
  805.    --  Defines a prefix to add before each label on the axis 
  806.  
  807.    function Axis_Get_Labels_Suffix 
  808.      (Axis : access Gtk_Plot_Axis_Record) return String; 
  809.    --  Return the suffix added to each label. 
  810.  
  811.    function Axis_Get_Labels_Prefix 
  812.      (Axis : access Gtk_Plot_Axis_Record) return String; 
  813.    --  Return the prefix added to each label. 
  814.  
  815.    procedure Axis_Ticks_Recalc (Axis : access Gtk_Plot_Axis_Record); 
  816.  
  817.    function Axis_Ticks_Transform 
  818.      (Axis : access Gtk_Plot_Axis_Record; 
  819.       Y    : Gdouble) return Gdouble; 
  820.  
  821.    function Axis_Ticks_Inverse 
  822.      (Axis : access Gtk_Plot_Axis_Record; 
  823.       X    : Gdouble) return Gdouble; 
  824.  
  825.    procedure Axis_Parse_Label 
  826.      (Axis      : access Gtk_Plot_Axis_Record; 
  827.       Val       : Gdouble; 
  828.       Precision : Gint; 
  829.       Style     : Gint; 
  830.       Label     : String); 
  831.  
  832.    ----------- 
  833.    -- Grids -- 
  834.    ----------- 
  835.    --  A grid can be displayed in the graph. 
  836.    --  This makes it easier to understand a graphics in some situations. 
  837.    --  The grid has two simultaneous line styles, each with its own specific 
  838.    --  step (minor and major steps). 
  839.    -- 
  840.    --  There are two special lines in the grid, that you can display even if 
  841.    --  you don't display the rest of the line. These are the origin of the 
  842.    --  coordinates system, ie the lines at X=0 and Y=0. 
  843.  
  844.    procedure X0_Set_Visible 
  845.      (Plot    : access Gtk_Plot_Record; 
  846.       Visible : Boolean); 
  847.    --  Indicate whether the line at X=0 should be displayed. 
  848.  
  849.    function X0_Visible 
  850.      (Plot : access Gtk_Plot_Record) return Boolean; 
  851.    --  Return the visibility state of the line at X=0 
  852.  
  853.    procedure Y0_Set_Visible 
  854.      (Plot    : access Gtk_Plot_Record; 
  855.       Visible : Boolean); 
  856.    --  Indicate whether the line at Y=0 should be displayed. 
  857.  
  858.    function Y0_Visible 
  859.      (Plot   : access Gtk_Plot_Record) return Boolean; 
  860.    --  Return the visibility state of the line at Y=0 
  861.  
  862.    procedure X0line_Set_Attributes 
  863.      (Plot  : access Gtk_Plot_Record; 
  864.       Style : Plot_Line_Style; 
  865.       Width : Gfloat; 
  866.       Color : Gdk.Color.Gdk_Color); 
  867.    --  Set the attributes of the line at X=0 
  868.  
  869.    procedure Y0line_Set_Attributes 
  870.      (Plot  : access Gtk_Plot_Record; 
  871.       Style : Plot_Line_Style; 
  872.       Width : Gfloat; 
  873.       Color : Gdk.Color.Gdk_Color); 
  874.    --  Set the attributes of the line at Y=0 
  875.  
  876.    procedure Grids_Set_On_Top 
  877.      (Plot : access Gtk_Plot_Record; On_Top : Boolean); 
  878.    --  Whether the grid should be displayed on top of the plots 
  879.  
  880.    function Grids_On_Top (Plot : access Gtk_Plot_Record) return Boolean; 
  881.    --  Whether the gris is currently displayed on top of the plots 
  882.  
  883.    procedure Grids_Set_Visible 
  884.      (Plot   : access Gtk_Plot_Record; 
  885.       Vmajor : Boolean; 
  886.       Vminor : Boolean; 
  887.       Hmajor : Boolean; 
  888.       Hminor : Boolean); 
  889.    --  Indicate whether the lines of the grids should be displayed. 
  890.    --  You can decide separately whether the major and minor lines should 
  891.    --  be displayed. 
  892.  
  893.    procedure Grids_Visible 
  894.      (Plot   : access Gtk_Plot_Record; 
  895.       Vmajor : out Boolean; 
  896.       Vminor : out Boolean; 
  897.       Hmajor : out Boolean; 
  898.       Hminor : out Boolean); 
  899.    --  Return the visibility state of the grid. 
  900.  
  901.    procedure Major_Hgrid_Set_Attributes 
  902.      (Plot  : access Gtk_Plot_Record; 
  903.       Style : Plot_Line_Style; 
  904.       Width : Gfloat; 
  905.       Color : Gdk.Color.Gdk_Color); 
  906.    --  Set the attributes for the major horizontal lines in the grid. 
  907.  
  908.    procedure Major_Vgrid_Set_Attributes 
  909.      (Plot  : access Gtk_Plot_Record; 
  910.       Style : Plot_Line_Style; 
  911.       Width : Gfloat; 
  912.       Color : Gdk.Color.Gdk_Color); 
  913.    --  Set the attributes for the major vertical lines in the grid. 
  914.  
  915.    procedure Minor_Hgrid_Set_Attributes 
  916.      (Plot  : access Gtk_Plot_Record; 
  917.       Style : Plot_Line_Style; 
  918.       Width : Gfloat; 
  919.       Color : Gdk.Color.Gdk_Color); 
  920.    --  Set the attributes for the minor horizontal lines in the grid. 
  921.  
  922.    procedure Minor_Vgrid_Set_Attributes 
  923.      (Plot  : access Gtk_Plot_Record; 
  924.       Style : Plot_Line_Style; 
  925.       Width : Gfloat; 
  926.       Color : Gdk.Color.Gdk_Color); 
  927.    --  Set the attributes for the minor vertical lines in the grid. 
  928.  
  929.    ------------- 
  930.    -- Legends -- 
  931.    ------------- 
  932.    --  Each graph is associated with one legend, that is supposed to 
  933.    --  indicate what the plot represents. 
  934.  
  935.    procedure Show_Legends (Plot : access Gtk_Plot_Record); 
  936.    --  Indicate that the legend should be displayed. 
  937.  
  938.    procedure Hide_Legends (Plot : access Gtk_Plot_Record); 
  939.    --  Indicate that the legend should not be displayed. 
  940.  
  941.    procedure Set_Legends_Border 
  942.      (Plot         : access Gtk_Plot_Record; 
  943.       Border       : Plot_Border_Style; 
  944.       Shadow_Width : Gint); 
  945.    --  Modify the way the borders of the legend look like. 
  946.  
  947.    procedure Legends_Move 
  948.      (Plot : access Gtk_Plot_Record; 
  949.       X    : Gdouble; 
  950.       Y    : Gdouble); 
  951.    --  Move the legend relative to the widget's area. 
  952.    --  X and Y are percentage values. (0.0, 0.0) indicates the top-left 
  953.    --  corner of the plot, (1.0, 1.0) indicates the bottom-right corner. 
  954.  
  955.    procedure Legends_Get_Position 
  956.      (Plot : access Gtk_Plot_Record; 
  957.       X    : out Gdouble; 
  958.       Y    : out Gdouble); 
  959.    --  Return the current position of the legend. 
  960.  
  961.    function Legends_Get_Allocation 
  962.      (Plot   : access Gtk_Plot_Record) return Gtk.Widget.Gtk_Allocation; 
  963.    --  Return the exact coordinates and size in pixels of the legend. 
  964.    --  The coordinates are relative to the widget's parent container. 
  965.  
  966.    procedure Legends_Set_Attributes 
  967.      (Plot       : access Gtk_Plot_Record; 
  968.       Ps_Font    : String; 
  969.       Height     : Gint; 
  970.       Foreground : Gdk.Color.Gdk_Color; 
  971.       Background : Gdk.Color.Gdk_Color); 
  972.    --  Set the attributes to use when displaying the legend. 
  973.  
  974.    -------------- 
  975.    -- Datasets -- 
  976.    -------------- 
  977.    --  A dataset is a set of points, either given explicitly by your 
  978.    --  application or calculated with a specific function, and that can be 
  979.    --  plotted on the screen. 
  980.    --  In Gtk_Plot, such a set is represented with symbols (special points in 
  981.    --  the graph, that can be manipulated interactively if you so wish), linked 
  982.    --  by connectors, which are either straight lines, splines, sets, ... 
  983.    --  Multiple data sets can of course be printed on a single graph. 
  984.  
  985.    --  <doc_ignore> 
  986.    generic 
  987.       with function Func (Plot  : access Gtk_Plot_Record'Class; 
  988.                           Set   :        Gtk_Plot_Data; 
  989.                           X     :        Gdouble; 
  990.                           Error : access Boolean) 
  991.                          return Gdouble; 
  992.    function Generic_Plot_Function (Plot  : System.Address; 
  993.                                    Set   : Gtk_Plot_Data; 
  994.                                    X     : Gdouble; 
  995.                                    Error : access Gboolean) 
  996.                                   return Gdouble; 
  997.    --  Generic function that can be instantiated for Plot_Function below. 
  998.    --  </doc_ignore> 
  999.  
  1000.    --  <doc_ignore> 
  1001.    generic 
  1002.       with function Func (Plot  : access Gtk_Plot_Record'Class; 
  1003.                           Set   :        Gtk_Plot_Data; 
  1004.                           X     :        Gdouble; 
  1005.                           Y     :        Gdouble; 
  1006.                           Error : access Boolean) 
  1007.                          return Gdouble; 
  1008.    function Generic_Plot3D_Function (Plot  : System.Address; 
  1009.                                      Set   : Gtk_Plot_Data; 
  1010.                                      X     : Gdouble; 
  1011.                                      Y     : Gdouble; 
  1012.                                      Error : access Gboolean) 
  1013.                                     return Gdouble; 
  1014.    --  Generic function that can be instanciated for Plot3D_Function below. 
  1015.    --  </doc_ignore> 
  1016.  
  1017.    type Plot3D_Function is access function 
  1018.      (Plot  : System.Address; 
  1019.       Set   : Gtk_Plot_Data; 
  1020.       X     : Gdouble; 
  1021.       Y     : Gdouble; 
  1022.       Error : access Gboolean) return Gdouble; 
  1023.    --  Function used for plotting 3D graphs. 
  1024.    --  It should return the value associated with (X, Y) in its graph, and set 
  1025.    --  Error to True if there was an error while calculating the value. 
  1026.  
  1027.    pragma Convention (C, Generic_Plot_Function); 
  1028.    pragma Convention (C, Generic_Plot3D_Function); 
  1029.    pragma Convention (C, Plot3D_Function); 
  1030.  
  1031.    procedure Add_Data 
  1032.      (Plot : access Gtk_Plot_Record; 
  1033.       Data : access Gtk_Plot_Data_Record'Class); 
  1034.    --  Add an existing set of data to the plot. 
  1035.    --  This set will automatically be drawn the next time the Plot itself is 
  1036.    --  drawn. 
  1037.  
  1038.    function Remove_Data 
  1039.      (Plot : access Gtk_Plot_Record; 
  1040.       Data : access Gtk_Plot_Data_Record'Class) 
  1041.       return Boolean; 
  1042.    --  Remove the dataset from Plot. 
  1043.    --  This function returns True if the dataset was indeed found and could be 
  1044.    --  removed, False otherwise. 
  1045.  
  1046.    function Add_Function 
  1047.      (Plot   : access Gtk_Plot_Record; 
  1048.       Func   : Plot_Function) 
  1049.       return  Gtk_Plot_Data; 
  1050.    --  Allocate a new dataset, whose point are automatically calculated. 
  1051.    --  Func is a function that takes the X coordinate value, and should return 
  1052.    --  the Y coordinate value. 
  1053.    --  The newly allocated set should be freed by calling Free above. 
  1054.    --  The set is automatically added to the plot, so you don't need to 
  1055.    --  explicitly call Add_Dataset. 
  1056.  
  1057.    ------------- 
  1058.    -- Signals -- 
  1059.    ------------- 
  1060.  
  1061.    --  <signals> 
  1062.    --  The following new signals are defined for this widget: 
  1063.    -- 
  1064.    --  - "changed" 
  1065.    --    procedure Handler (Plot : access Gtk_Plot_Record'Class); 
  1066.    -- 
  1067.    --    Called every time some property of the widget is changed, or the 
  1068.    --    widget is moved or resized. 
  1069.    -- 
  1070.    --  - "moved" 
  1071.    --    function Handler (Plot : access Gtk_Plot_Record'Class; 
  1072.    --                      X    : Gdouble; 
  1073.    --                      Y    : Gdouble) 
  1074.    --                     return Boolean; 
  1075.    -- 
  1076.    --    Called when the widget has been moved relative to its drawable. 
  1077.    --    Its new position is given in parameters. 
  1078.    -- 
  1079.    --  - "resized" 
  1080.    --    function Handler (Plot   : access Gtk_Plot_Record'Class; 
  1081.    --                      Width  : Gdouble; 
  1082.    --                      Height : Gdouble) 
  1083.    --                     return Boolean; 
  1084.    -- 
  1085.    --    Called when the widget has been resized relative to its drawable. 
  1086.    --    Its new size is given in parameters. 
  1087.    -- 
  1088.    --  - "tick_label" 
  1089.    --    function Handler (Axis  : access Gtk_Plot_Axis_Record'Class; 
  1090.    --                      Tick  : Gdouble_Access; 
  1091.    --                      Label : Interfaces.C.Strings.chars_ptr) 
  1092.    --                     return Boolean; 
  1093.    -- 
  1094.    --     Called when a label should be drawn. You can modify the contents 
  1095.    --     of Label (up to 100 characters) a 
  1096.    -- 
  1097.    --  </signals> 
  1098.  
  1099. private 
  1100.    type Gtk_Plot_Record is new Gtk.Widget.Gtk_Widget_Record with null record; 
  1101.    type Gtk_Plot_Axis_Record is new Glib.Object.GObject_Record with 
  1102.      null record; 
  1103.  
  1104.    Label_None   : constant Plot_Label_Pos := 0; 
  1105.    Label_In     : constant Plot_Label_Pos := 1; 
  1106.    Label_Out    : constant Plot_Label_Pos := 2; 
  1107.  
  1108.    Ticks_None  : constant Plot_Ticks_Pos := 0; 
  1109.    Ticks_In    : constant Plot_Ticks_Pos := 1; 
  1110.    Ticks_Out   : constant Plot_Ticks_Pos := 2; 
  1111.  
  1112.    pragma Import (C, Get_Type, "gtk_plot_get_type"); 
  1113.    pragma Import (C, Axis_Get_Type, "gtk_plot_axis_get_type"); 
  1114.    pragma Import (C, Text_Set_Border, "gtk_plot_text_set_border"); 
  1115. end Gtk.Extra.Plot; 
  1116.  
  1117. --  Unbound: 
  1118. --    gtk_plot_set_pc 
  1119. --    gtk_plot_axis_set_tick_labels 
  1120. --    gtk_plot_axis_ticks_autoscale