-----------------------------------------------------------------------
-- 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. --
-- --
-- --
-- --
-- --
-- --
-- --
-- --
-----------------------------------------------------------------------
--
-- This widget is deprecated. Use Gtk.Tree_View instead.
--
-- This widget is similar to Gtk_Clist but it displays a tree with expandable
-- nodes instead of a simple list. Gtk_Tree is a more flexible tree widget
-- (it can have arbitrary widgets in the tree cells), but it is less efficient
-- and is limited to 32768 pixels.
--
-- If you need horizontal or vertical scrolling, you mustn't put this widget
-- in a Gtk_Viewport, and then in a Gtk_Scrolled_Window. Put it directly into
-- a Gtk_Scrolled_Window, or horizontal scrolling will be disabled, and the
-- column headers will disappear when scrolling vertically.
--
--
-- 2.8.17
-- Obsolescent widgets
-- create_ctree.adb
with Interfaces.C.Strings;
with Unchecked_Conversion;
with Gdk.Bitmap;
with Gdk.Color;
with Gdk.Pixmap;
with Glib.Glist;
pragma Elaborate_All (Glib.Glist);
with Glib.Gnodes;
pragma Warnings (Off); -- Gtk.Clist is obsolescent
with Gtk.Clist;
pragma Warnings (On);
with Gtk.Enums; use Gtk.Enums;
with Gtk.Style;
with Gtkada.Types; use Gtkada.Types;
package Gtk.Ctree is
pragma Obsolescent ("use Gtk.Tree_View instead");
pragma Elaborate_Body;
pragma Warnings (Off); -- Gtk.Clist is obsolescent;
type Gtk_Ctree_Record is new Gtk.Clist.Gtk_Clist_Record with private;
type Gtk_Ctree is access all Gtk_Ctree_Record'Class;
type Gtk_Ctree_Row is new Gtk.Clist.Gtk_Clist_Row;
pragma Warnings (On);
-- Similar to Clist_Row, but for a Ctree.
type Gtk_Ctree_Node is new Gdk.C_Proxy;
-- This type represents a node inside a Ctree.
--
Null_Ctree_Node : constant Gtk_Ctree_Node := null;
type Gtk_Ctree_Line_Style is
(Ctree_Lines_None,
-- No line will be drawn in the Ctree
Ctree_Lines_Solid,
-- Solid lines will be drawn
Ctree_Lines_Dotted,
-- Dotted lines will be drawn
Ctree_Lines_Tabbed
-- The tree won't be highlighted by lines but by tabs surrounding nodes
);
pragma Convention (C, Gtk_Ctree_Line_Style);
-- See Gtk.Ctree.Set_Line_Style for more details.
type Gtk_Ctree_Expander_Style is
(Ctree_Expander_None,
-- No pixmap will be drawn, you will have to double-click on the node to
-- expand it.
Ctree_Expander_Square,
-- The pixmap will be a square
Ctree_Expander_Triangle,
-- The pixmap will be a triangle
Ctree_Expander_Circular
-- The pixmap will be a circle
);
-- See Gtk.Ctree.Set_Expander_Style for more details.
pragma Convention (C, Gtk_Ctree_Expander_Style);
package Row_List is new Glib.Glist.Generic_List (Gtk_Ctree_Row);
function Convert is new Unchecked_Conversion
(Gtk_Ctree_Node, System.Address);
function Convert is new Unchecked_Conversion
(System.Address, Gtk_Ctree_Node);
package Node_List is new Glib.Glist.Generic_List (Gtk_Ctree_Node);
--
-----------------------------------
-- Creation, insertion, deletion --
-----------------------------------
-- Elements inside a Gtk_Ctree are not ordered from the top to the bottom
-- as is the case for Gtk_Clist. Instead, they are put in the ctree by
-- indicating where in the tree they should be placed. The position of an
-- element (called a node) is defined by a parent node and a sibling node.
-- The node will be attached in the parent subtree, on top of the sibling
-- node.
procedure Gtk_New (Widget : out Gtk_Ctree;
Columns : in Gint;
Tree_Column : in Gint := 0);
-- Create a ctree with Columns columns.
-- Tree_Column indicates in which column the tree will be displayed.
procedure Initialize (Widget : access Gtk_Ctree_Record'Class;
Columns : in Gint;
Tree_Column : in Gint := 0);
-- Internal initialization function.
-- See the section "Creating your own widgets" in the documentation.
procedure Gtk_New (Widget : out Gtk_Ctree;
Titles : in Chars_Ptr_Array;
Tree_Column : in Gint := 0);
-- Create a ctree with Titles'Length columns.
-- Titles gives the title of each column.
-- Tree_Column indicates in which column the tree will be displayed.
procedure Initialize (Widget : access Gtk_Ctree_Record'Class;
Titles : in Chars_Ptr_Array;
Tree_Column : in Gint := 0);
-- Internal initialization function.
-- See the section "Creating your own widgets" in the documentation.
function Get_Type return Gtk.Gtk_Type;
-- Return the internal value associated with a Gtk_Ctree.
function Insert_Node (Ctree : access Gtk_Ctree_Record;
Parent : in Gtk_Ctree_Node;
Sibling : in Gtk_Ctree_Node;
Text : in Chars_Ptr_Array;
Spacing : in Guint8;
Pixmap_Closed : in Gdk.Pixmap.Gdk_Pixmap;
Mask_Closed : in Gdk.Bitmap.Gdk_Bitmap;
Pixmap_Opened : in Gdk.Pixmap.Gdk_Pixmap;
Mask_Opened : in Gdk.Bitmap.Gdk_Bitmap;
Is_Leaf : in Boolean;
Expanded : in Boolean)
return Gtk_Ctree_Node;
-- Insert a new node in the Ctree.
-- Parent is the parent node. If null, the new node is part of the root.
-- The new node will be inserted right on top of Sibling. If Sibling is
-- null, then it will be the first node in the subtree.
-- Text contains the text for each cell of the node. Note that Insert_Node
-- expects the length of the Text parameter to be equal to the number of
-- columns of the Ctree.
-- Spacing is the number of pixels between the lines of the tree and the
-- text in the same column.
-- If Is_Leaf is True, then the node won't contain any subtree. If False,
-- the newly created node can be used as the Parent for further node
-- creation. In this case, Expanded indicates whether the subtree
-- associated with this node should be initially visible.
-- In addition to the "+" or "-" sign indicating whether the subtree is
-- expanded or not, it is possible to put a pixmap giving this information.
-- Pixmap_Closed and Mask_Closed represent the image and the mask used when
-- the subtree is closed; similarly, Pixmap_Opened and Mask_Opened
-- represent the image and the mask used when the subtree is opened.
procedure Remove_Node (Ctree : access Gtk_Ctree_Record;
Node : in Gtk_Ctree_Node);
-- Remove Node from Ctree.
-------------------------------------------
-- Tree, Node and Row basic manipulation --
-------------------------------------------
function Get_Tree_Column
(Widget : access Gtk.Ctree.Gtk_Ctree_Record'Class) return Gint;
-- Return the Tree_Column attribute of a given Node.
-- Tree_Column indicates in which column the tree will be displayed.
function Get_Node_List
(Ctree : access Gtk_Ctree_Record) return Node_List.Glist;
-- Return the list of nodes associated with a given Ctree.
-- Note: you need to extract the nodes with Node_List.Get_Gpointer.
function Get_Row_List
(Ctree : access Gtk_Ctree_Record) return Row_List.Glist;
-- Return the list of rows associated with a given Ctree.
function Get_Selection
(Ctree : access Gtk_Ctree_Record) return Node_List.Glist;
-- Return the list of nodes currently selected.
-- Extract the nodes with Node_List.Get_Data
function Node_Get_Row (Node : in Gtk_Ctree_Node) return Gtk_Ctree_Row;
-- Return the row of a given Node.
function Row_Get_Children (Row : in Gtk_Ctree_Row) return Gtk_Ctree_Node;
-- Return the children node of a given Row.
function Row_Get_Expanded (Row : in Gtk_Ctree_Row) return Boolean;
-- Return the expanded attribute of a given Row.
-- Note that Expanded can also be retrieved via Get_Node_Info,
-- this function is just a quick accessor.
function Row_Get_Is_Leaf (Row : in Gtk_Ctree_Row) return Boolean;
-- Return the leaf attribute of a given Row.
-- Note that Is_Leaf can also be retrieved via Get_Node_Info,
-- this function is just a quick accessor.
function Row_Get_Parent (Row : in Gtk_Ctree_Row) return Gtk_Ctree_Node;
-- Return the parent node of a given Row.
function Row_Get_Sibling (Row : in Gtk_Ctree_Row) return Gtk_Ctree_Node;
-- Return the sibling node of a given Row.
function Is_Created (Node : in Gtk_Ctree_Node) return Boolean;
-- Return True if Node is different from Null_Ctree_Node
-----------------------------------------
-- Querying / finding tree information --
-----------------------------------------
function Is_Viewable
(Ctree : access Gtk_Ctree_Record;
Node : in Gtk_Ctree_Node)
return Boolean;
-- Return True if Node is viewable.
-- A Node is viewable if all the trees and subtrees containing it are
-- expanded.
function Last
(Ctree : access Gtk_Ctree_Record;
Node : in Gtk_Ctree_Node)
return Gtk_Ctree_Node;
-- Return the last node of a given subtree.
-- Starting at Node, this function will recursively look for the last
-- sibling of the last child.
-- Return an empty node is Node is empty.
function Find_Node_Ptr
(Ctree : access Gtk_Ctree_Record;
Ctree_Row : in Gtk_Ctree_Row)
return Gtk_Ctree_Node;
-- Return the node corresponding to a given row.
function Node_Nth (Ctree : access Gtk_Ctree_Record;
Row : in Guint)
return Gtk_Ctree_Node;
-- Return the Node corresponding to the nth row of a given Ctree.
-- This can be used to retrieve the root node of the tree, by passing 0 for
-- Row.
function Find (Ctree : access Gtk_Ctree_Record;
Node : in Gtk_Ctree_Node;
Child : in Gtk_Ctree_Node) return Boolean;
-- Recursively search for a given Child in a given subtree.
-- the subtree is determined by Node. If Node is empty, the search will
-- occur on the whole tree.
-- Return True if Child is found, False otherwise.
function Is_Ancestor
(Ctree : access Gtk_Ctree_Record;
Node : in Gtk_Ctree_Node;
Child : in Gtk_Ctree_Node) return Boolean;
-- Indicate whether Node is an ancestor of Child.
-- It is assumed that Node is not empty.
function Is_Hot_Spot
(Ctree : access Gtk_Ctree_Record;
X : in Gint;
Y : in Gint) return Boolean;
-- Return True if the Ctree is centered on (x,y)
------------------------------------------------------
-- Tree signals: move, expand, collapse, (un)select --
------------------------------------------------------
procedure Move (Ctree : access Gtk_Ctree_Record;
Node : in Gtk_Ctree_Node;
New_Parent : in Gtk_Ctree_Node;
New_Sibling : in Gtk_Ctree_Node);
-- Move a node in a Ctree.
-- After its creation, a node can be moved.
-- New_Parent points to the new parent node that will contain Node.
-- If null, Node will be attached to the root.
-- New_Sibling indicates under which node Node will be inserted.
-- If New_Sibling is null, the new node will be the lowest in its branch.
procedure Expand (Ctree : access Gtk_Ctree_Record;
Node : in Gtk_Ctree_Node);
-- Expand the first level of the subtree associated with Node.
procedure Expand_Recursive
(Ctree : access Gtk_Ctree_Record;
Node : in Gtk_Ctree_Node := null);
-- Expand the whole subtree associated with Node.
procedure Expand_To_Depth
(Ctree : access Gtk_Ctree_Record;
Node : in Gtk_Ctree_Node := null;
Depth : in Gint);
-- Expand the subtree associated with Node and its descendants until Depth
-- levels of subtrees have been reached.
procedure Collapse (Ctree : access Gtk_Ctree_Record;
Node : in Gtk_Ctree_Node);
-- Collapse the first level of the subtree associated with Node.
procedure Collapse_Recursive
(Ctree : access Gtk_Ctree_Record;
Node : in Gtk_Ctree_Node := null);
-- Collapse the whole subtree associated with Node.
procedure Collapse_To_Depth
(Ctree : access Gtk_Ctree_Record;
Node : in Gtk_Ctree_Node := null;
Depth : in Gint);
-- Collapse the subtree associated with Node and its descendants until
-- Depth levels of subtrees have been reached.
procedure Toggle_Expansion (Ctree : access Gtk_Ctree_Record;
Node : in Gtk_Ctree_Node);
-- Change the state of the Ctree from expanded to collapsed and the other
-- way around on one level.
procedure Toggle_Expansion_Recursive (Ctree : access Gtk_Ctree_Record;
Node : in Gtk_Ctree_Node);
-- Change the state of the Ctree from expanded to collapsed and the other
-- way around for the whole subtree.
procedure Gtk_Select (Ctree : access Gtk_Ctree_Record;
Node : in Gtk_Ctree_Node);
-- Select a specified Node, and only this one.
procedure Select_Recursive
(Ctree : access Gtk_Ctree_Record;
Node : in Gtk_Ctree_Node := null);
-- Select a specified Node, and its whole subtree.
procedure Unselect (Ctree : access Gtk_Ctree_Record;
Node : in Gtk_Ctree_Node);
-- Unselect a specified Node, and only this one.
procedure Unselect_Recursive
(Ctree : access Gtk_Ctree_Record;
Node : in Gtk_Ctree_Node := null);
-- Unselect a specified Node, and its whole subtree.
procedure Real_Select_Recursive (Ctree : access Gtk_Ctree_Record;
Node : in Gtk_Ctree_Node := null;
Do_Select : in Boolean);
-- Similar to Select_Recursive or Unselect_Recursive.
-- If Do_Select is True, equivalent to Select_Recursive.
-- If Do_Select is False, equivalent to Unselect_Recursive.
------------------------------------
-- Analogs of Gtk_Clist functions --
------------------------------------
procedure Node_Set_Text (Ctree : access Gtk_Ctree_Record;
Node : in Gtk_Ctree_Node;
Column : in Gint;
Text : in UTF8_String);
-- Set the cell's text, replacing its current contents.
-- This changes the type of the cell to Cell_Text. The pixmap (if any)
-- will no longer be displayed.
function Node_Get_Text (Ctree : access Gtk_Ctree_Record;
Node : in Gtk_Ctree_Node;
Column : in Gint) return UTF8_String;
-- Return the text contained in cell.
-- An empty string is returned if Column is invalid or if the Cell did not
-- contain any text (only a pixmap)
procedure Node_Set_Pixmap (Ctree : access Gtk_Ctree_Record;
Node : in Gtk_Ctree_Node;
Column : in Gint;
Pixmap : in Gdk.Pixmap.Gdk_Pixmap;
Mask : in Gdk.Bitmap.Gdk_Bitmap);
-- Set the cell's pixmap, replacing its current contents.
-- The type of the cell becomes Cell_Pixmap, and the text is no longer
-- displayed.
procedure Node_Get_Pixmap (Ctree : access Gtk_Ctree_Record;
Node : in Gtk_Ctree_Node;
Column : in Gint;
Pixmap : out Gdk.Pixmap.Gdk_Pixmap;
Mask : out Gdk.Bitmap.Gdk_Bitmap;
Success : out Boolean);
-- Return the Pixmap contained in a cell.
-- The type of the cell should be Cell_Pixmap.
-- The result is meaningful only if Success is True. If the Cell did not
-- contain a pixmap, Success is set to False.
procedure Node_Set_Pixtext (Ctree : access Gtk_Ctree_Record;
Node : in Gtk_Ctree_Node;
Column : in Gint;
Text : in UTF8_String;
Spacing : in Guint8;
Pixmap : in Gdk.Pixmap.Gdk_Pixmap;
Mask : in Gdk.Bitmap.Gdk_Bitmap);
-- Set both the Text and the Pixmap for the cell.
-- Replace its current contents. The type of the cell becomes Cell_Pixtext,
-- and both the text and the pixmap are displayed.
procedure Node_Get_Pixtext (Ctree : access Gtk_Ctree_Record;
Node : in Gtk_Ctree_Node;
Column : in Gint;
Text : out Interfaces.C.Strings.chars_ptr;
Spacing : out Guint8;
Pixmap : out Gdk.Pixmap.Gdk_Pixmap;
Mask : out Gdk.Bitmap.Gdk_Bitmap;
Success : out Boolean);
-- Return the Text and the Pixmap for the cell.
-- The result is not meaningful if Success is False.
procedure Node_Set_Shift (Ctree : access Gtk_Ctree_Record;
Node : in Gtk_Ctree_Node;
Column : in Gint;
Vertical : in Gint;
Horizontal : in Gint);
-- Set a horizontal and vertical shift for drawing the content of the cell.
-- Both shifts can be either positive or negative.
-- This is particularly useful for indenting items in a columns.
procedure Set_Node_Info (Ctree : access Gtk_Ctree_Record;
Node : in Gtk_Ctree_Node;
Text : in UTF8_String;
Spacing : in Guint8;
Pixmap_Closed : in Gdk.Pixmap.Gdk_Pixmap;
Mask_Closed : in Gdk.Bitmap.Gdk_Bitmap;
Pixmap_Opened : in Gdk.Pixmap.Gdk_Pixmap;
Mask_Opened : in Gdk.Bitmap.Gdk_Bitmap;
Is_Leaf : in Boolean;
Expanded : in Boolean);
-- Set all the info related to a specific Node.
procedure Get_Node_Info
(Ctree : access Gtk_Ctree_Record;
Node : in Gtk_Ctree_Node;
Text : out Interfaces.C.Strings.chars_ptr;
Spacing : out Guint8;
Pixmap_Closed : out Gdk.Pixmap.Gdk_Pixmap;
Mask_Closed : out Gdk.Bitmap.Gdk_Bitmap;
Pixmap_Opened : out Gdk.Pixmap.Gdk_Pixmap;
Mask_Opened : out Gdk.Bitmap.Gdk_Bitmap;
Is_Leaf : out Boolean;
Expanded : out Boolean;
Success : out Boolean);
-- Return all the info related to a specific Node.
procedure Node_Set_Selectable (Ctree : access Gtk_Ctree_Record;
Node : in Gtk_Ctree_Node;
Selectable : in Boolean := True);
-- Indicate whether the Node can be selected or not.
-- The default value is True.
function Node_Get_Selectable (Ctree : access Gtk_Ctree_Record;
Node : in Gtk_Ctree_Node)
return Boolean;
-- Return the selectable status of the Node.
procedure Node_Set_Row_Style (Ctree : access Gtk_Ctree_Record;
Node : in Gtk_Ctree_Node;
Style : in Gtk.Style.Gtk_Style);
-- Set the default style for the cells in the Node.
-- This can be overridden for each cell with Node_Set_Cell_Style.
function Node_Get_Row_Style (Ctree : access Gtk_Ctree_Record;
Node : in Gtk_Ctree_Node)
return Gtk.Style.Gtk_Style;
-- Return the default style used for the Node.
procedure Node_Set_Cell_Style (Ctree : access Gtk_Ctree_Record;
Node : in Gtk_Ctree_Node;
Column : in Gint;
Style : in Gtk.Style.Gtk_Style);
-- Set the style (font, color, ...) used for the cell.
-- This overrides the Node's style.
function Node_Get_Cell_Style (Ctree : access Gtk_Ctree_Record;
Node : in Gtk_Ctree_Node;
Column : in Gint)
return Gtk.Style.Gtk_Style;
-- Return the style of the cell.
procedure Node_Set_Foreground (Ctree : access Gtk_Ctree_Record;
Node : in Gtk_Ctree_Node;
Color : in Gdk.Color.Gdk_Color);
-- Set the foreground color for the Node.
-- The color must already be allocated.
-- If no such Node exists in the tree, nothing is done.
procedure Node_Set_Background (Ctree : access Gtk_Ctree_Record;
Node : in Gtk_Ctree_Node;
Color : in Gdk.Color.Gdk_Color);
-- Set the background color for the Node.
-- The color must already be allocated.
-- If no such Node exists in the tree, nothing is done.
pragma Warnings (Off); -- Gtk.Clist is obsolescent
function Node_Get_Cell_Type (Ctree : access Gtk_Ctree_Record;
Node : in Gtk_Ctree_Node;
Column : in Gint)
return Gtk.Clist.Gtk_Cell_Type;
pragma Warnings (On);
-- Return the type of the cell at Node/Column.
-- This indicates which of the functions Node_Get_Text. Node_Get_Pixmap,
-- etc. should be used with this cell.
procedure Node_Moveto (Ctree : access Gtk_Ctree_Record;
Node : in Gtk_Ctree_Node;
Column : in Gint;
Row_Align : in Gfloat := 0.5;
Col_Align : in Gfloat := 0.5);
-- Make a Node visible.
-- Column indicates which column of the Node should be visible, if not
-- all columns can be displayed.
-- Row_Align and Col_Align are parameters between 0.0 and 1.0, and
-- specify how the Node and the Column will be centered in the Ctree
-- window. 0.0 means a Node on the top, and a Column on the left.
function Node_Is_Visible
(Ctree : access Gtk_Ctree_Record;
Node : in Gtk_Ctree_Node)
return Gtk_Visibility;
-- Indicate the visibility of a Node.
-- Return Visibility_None if the Node is not visible in the Ctree window;
-- Visibility_Partial if the Node is partially visible; Visibility_Full
-- if the Node is entirely visible.
-- This function ignores the fact that Node is in an expanded or collapsed
-- subtree.
------------------------------
-- Ctree specific functions --
------------------------------
procedure Set_Indent (Ctree : access Gtk_Ctree_Record;
Indent : in Gint := 20);
-- Change the indentation of the Ctree.
-- Each different level of a subtree is indented by a number of pixels.
-- By default, the indentation is 20 pixels, and can be changed using this
-- procedure.
function Get_Indent
(Widget : access Gtk.Ctree.Gtk_Ctree_Record'Class) return Gint;
-- Return the indentation of a Ctree.
procedure Set_Spacing (Ctree : access Gtk_Ctree_Record;
Spacing : in Gint := 5);
-- Set the spacing between the tree's icon and the additional pixmap.
-- The additional pixmap indicates whether the subtree is opened or closed.
-- The default value is 5 pixels.
function Get_Spacing
(Widget : access Gtk.Ctree.Gtk_Ctree_Record'Class) return Gint;
-- Return the spacing between the tree's icon and the additional pixmap.
procedure Set_Show_Stub (Ctree : access Gtk_Ctree_Record;
Show_Stub : in Boolean);
-- Set the Show_Stub attribute of Ctree.
function Get_Show_Stub (Ctree : access Gtk_Ctree_Record) return Boolean;
-- Return the Show_Stub attribute of Ctree.
procedure Set_Line_Style
(Ctree : access Gtk_Ctree_Record;
Line_Style : in Gtk_Ctree_Line_Style := Ctree_Lines_Solid);
-- Change the style of the lines representing the tree of a given Ctree.
-- By default, solid lines are used.
-- See the description of Gtk_Ctree_Line_Style for more details of the
-- possible values.
function Get_Line_Style
(Ctree : access Gtk_Ctree_Record) return Gtk_Ctree_Line_Style;
-- return the style of the lines representing the tree of a given Ctree.
procedure Set_Expander_Style
(Ctree : access Gtk_Ctree_Record;
Expander_Style : in Gtk_Ctree_Expander_Style :=
Ctree_Expander_Square);
-- Set the way a given Ctree can be expanded.
-- To expand a subtree, you can either double-click on a node, or click on
-- the "+/-" icon. This icon is by default included in a square pixmap.
-- This procedure can change the form of this pixmap.
-- See the description of Gtk_Ctree_Expander_Style for more details.
function Get_Expander_Style
(Ctree : access Gtk_Ctree_Record) return Gtk_Ctree_Expander_Style;
-- Return the way a given Ctree can be expanded.
type Gtk_Ctree_Compare_Drag_Func is access
function (Ctree : in Gtk_Ctree;
Source_Node : in Gtk_Ctree_Node;
New_Parent : in Gtk_Ctree_Node;
New_Sibling : in Gtk_Ctree_Node) return Boolean;
-- Function type used in Set_Drag_Compare_Func.
procedure Set_Drag_Compare_Func
(Ctree : access Gtk_Ctree_Record;
Cmp_Func : in Gtk_Ctree_Compare_Drag_Func);
-- Set the drag compare function of a given Ctree.
-- This function is used when the Ctree receives a dragged data.
----------------------------
-- Tree sorting functions --
----------------------------
procedure Sort_Node (Ctree : access Gtk_Ctree_Record;
Node : in Gtk_Ctree_Node);
-- Sort the nodes of a given Ctree.
-- This procedure only sorts the first level of the tree.
procedure Sort_Recursive (Ctree : access Gtk_Ctree_Record;
Node : in Gtk_Ctree_Node := null);
-- Sort the nodes of a given Ctree recursively.
-- This procedure sorts the whole tree and subtrees associated with Ctree.
-- Set Node to null if you want to sort the whole tree starting from its
-- root.
--------------------------
-- Ctree_Gnode handling --
--------------------------
--
-- This package needs to be documented ???
generic
type Data_Type (<>) is private;
package Ctree_Gnode is
type Data_Type_Access is access all Data_Type;
type Gtk_Ctree_Gnode_Func is access
function (Ctree : access Gtk_Ctree_Record'Class;
Depth : in Guint;
Gnode : in Glib.Gnodes.Gnode;
Cnode : in Gtk_Ctree_Node;
Data : in Data_Type_Access) return Boolean;
function Export_To_Gnode (Ctree : access Gtk_Ctree_Record'Class;
Parent : in Glib.Gnodes.Gnode;
Sibling : in Glib.Gnodes.Gnode;
Node : in Gtk_Ctree_Node;
Func : in Gtk_Ctree_Gnode_Func;
Data : in Data_Type_Access)
return Glib.Gnodes.Gnode;
function Insert_Gnode (Ctree : access Gtk_Ctree_Record'Class;
Parent : in Glib.Gnodes.Gnode;
Sibling : in Glib.Gnodes.Gnode;
Node : in Gtk_Ctree_Node;
Func : in Gtk_Ctree_Gnode_Func;
Data : in Data_Type_Access)
return Gtk_Ctree_Node;
private
--
type Ctree_Gnode_Func_Record is record
Func : Gtk_Ctree_Gnode_Func;
Data : Data_Type_Access;
end record;
type Ctree_Gnode_Func_Record_Access is
access all Ctree_Gnode_Func_Record;
function C_Ctree_Gnode_Func
(C_Ctree : System.Address;
Depth : Guint;
C_Gnode : Glib.Gnodes.Gnode;
C_Cnode : Gtk_Ctree_Node;
C_Data : Ctree_Gnode_Func_Record_Access) return Gboolean;
pragma Convention (C, C_Ctree_Gnode_Func);
--
end Ctree_Gnode;
--
-----------------------
-- Row_Data handling --
-----------------------
--
generic
type Data_Type (<>) is private;
package Row_Data is
type Data_Type_Access is access all Data_Type;
--
procedure Node_Set_Row_Data (Ctree : access Gtk_Ctree_Record'Class;
Node : in Gtk_Ctree_Node;
Data : in Data_Type);
-- Associate a Data with a Node.
function Node_Get_Row_Data
(Ctree : access Gtk_Ctree_Record'Class;
Node : in Gtk_Ctree_Node)
return Data_Type;
-- Retrieve a data associated with a Node.
-- Error Handling:
-- Gtkada.Types.Data_Error is raised when trying to retrieve
-- the data from a Node for which no data has been set
-- (using Node_Set_Row_Data).
function Find_By_Row_Data
(Ctree : access Gtk_Ctree_Record'Class;
Node : in Gtk_Ctree_Node;
Data : in Data_Type)
return Gtk_Ctree_Node;
-- Find the first node containing a specified Data.
-- Node is the starting point of the search. If null, the search will
-- start from the root.
-- Return the first Node whose associated data is Data, null if none
-- can be found.
function Find_All_By_Row_Data
(Ctree : access Gtk_Ctree_Record'Class;
Node : in Gtk_Ctree_Node;
Data : in Data_Type)
return Node_List.Glist;
-- Find all nodes containing a specified Data.
-- Node is the starting point of the search. If null, the search will
-- start from the root.
type Gcompare_Func is access
function (A, B : in Data_Type) return Boolean;
-- Function used to compare data types in the functions
-- Find_[All] By_Row_Data_Custom.
function Find_By_Row_Data_Custom
(Ctree : access Gtk_Ctree_Record'Class;
Node : in Gtk_Ctree_Node;
Data : in Data_Type;
Func : in Gcompare_Func)
return Gtk_Ctree_Node;
-- Find the first node containing a specified Data.
-- Similar to Find_By_Row_Data but Func is used to allow a more flexible
-- (user defined) method to compare two nodes.
function Find_All_By_Row_Data_Custom
(Ctree : access Gtk_Ctree_Record'Class;
Node : in Gtk_Ctree_Node;
Data : in Data_Type;
Func : in Gcompare_Func) return Node_List.Glist;
-- Find all the nodes containing a specified Data.
-- Similar to Find_All_By_Row_Data but Func is used to allow a more
-- flexible (user defined) method to compare two nodes.
type Gtk_Ctree_Func is access
procedure (Ctree : access Gtk_Ctree_Record'Class;
Node : in Gtk_Ctree_Node;
Data : in Data_Type_Access);
-- Function used by Post/Pre_Recursive functions below.
procedure Post_Recursive (Ctree : access Gtk_Ctree_Record'Class;
Node : in Gtk_Ctree_Node;
Func : in Gtk_Ctree_Func;
Data : in Data_Type_Access);
-- Apply Func to each node of a subtree.
-- Node designates the root of the subtree.
-- Data will be passed as a parameter to Func.
-- This procedure will first apply Func to the children nodes.
procedure Post_Recursive_To_Depth (Ctree : access Gtk_Ctree_Record'Class;
Node : in Gtk_Ctree_Node;
Depth : in Gint;
Func : in Gtk_Ctree_Func;
Data : in Data_Type_Access);
-- Apply Func to each node of a subtree until a specified Depth.
-- Node designates the root of the subtree.
-- Data will be passed as a parameter to Func.
-- This function is similar to Post_Recursive except that it
-- stop at a specified subtree depth.
procedure Pre_Recursive (Ctree : access Gtk_Ctree_Record'Class;
Node : in Gtk_Ctree_Node;
Func : in Gtk_Ctree_Func;
Data : in Data_Type_Access);
-- Apply Func to each node of a subtree.
-- Similar to Post_Recursive but will apply Func to the parent before
-- applying it to its children.
procedure Pre_Recursive_To_Depth (Ctree : access Gtk_Ctree_Record'Class;
Node : in Gtk_Ctree_Node;
Depth : in Gint;
Func : in Gtk_Ctree_Func;
Data : in Data_Type_Access);
-- Apply Func to each node of a subtree until a specific Depth.
-- Similar to Post_Recursive_To_Depth but will apply Func to the parent
-- before applying it to its children.
private
--
function Default_Gcompare_Func (A, B : in Data_Type) return Boolean;
--
-- This function needs to be declared in the spec, although it is
-- only used in the body. Otherwise, the compiler does not allow
-- to apply the 'Access attribute to it.
type Ctree_Func_Record is record
Func : Gtk_Ctree_Func;
Data : Data_Type_Access;
end record;
type Ctree_Func_Record_Access is access all Ctree_Func_Record;
procedure Free_Data (Data : Data_Type_Access);
pragma Convention (C, Free_Data);
-- Note that Data is *not* an in out parameter here, since Free_Data
-- will be used as a callback, and when called, the original variable
-- holding the pointer no longer exists.
procedure C_Ctree_Func (C_Ctree : in System.Address;
C_Node : in Gtk_Ctree_Node;
C_Data : in Ctree_Func_Record_Access);
pragma Convention (C, C_Ctree_Func);
type Gcompare_Func_Record is record
Func : Gcompare_Func;
Data : Data_Type_Access;
end record;
type Gcompare_Func_Record_Access is access all Gcompare_Func_Record;
function C_Gcompare_Func
(Row_Data : in Data_Type_Access;
Gcompare_Func_Data : in Gcompare_Func_Record_Access) return Gint;
pragma Convention (C, C_Gcompare_Func);
--
end Row_Data;
--
-- The previous package implements the Row_Data stuff.
-- !! Warning !! No type verification is made to check if you are
-- using the appropriate function Get. This is your own responsability
----------------
-- Properties --
----------------
--
-- The following properties are defined for this widget. See
-- Glib.Properties for more information on properties.
--
-------------
-- Signals --
-------------
--
-- The following new signals are defined for this widget:
--
-- - "tree_select_row"
-- procedure Handler (Ctree : access Gtk_Ctree_Record'Class;
-- Node : Gtk_Ctree_Node;
-- Column : Gint);
--
-- Emitted to request the selection of a node.
-- Column is the column number where the user clicked.
--
-- - "tree_unselect_row"
-- procedure Handler (Ctree : access Gtk_Ctree_Record'Class;
-- Node : Gtk_Ctree_Node;
-- Column : Gint);
--
-- Emitted to request the unselection of a node.
--
-- - "tree_expand"
-- procedure Handler (Ctree : access Gtk_Clist_Record'Class;
-- Node : Gtk_Ctree_Node);
--
-- Emitted when the subtree associated with a Node is expanded.
--
-- - "tree_collapse"
-- procedure Handler (Ctree : access Gtk_Clist_Record'Class;
-- Node : Gtk_Ctree_Node);
--
-- Emitted when the subtree associated with a Node is collapsed.
--
-- - "tree_move"
-- procedure Handler (Ctree : access Gtk_Clist_Record'Class;
-- Node : Gtk_Ctree_Node);
-- New_Parent : Gtk_Ctree_Node);
-- New_Sibling : Gtk_Ctree_Node);
--
-- Emitted when a Node is moved (e.g its parent and/or its sibling
-- changed).
--
--
Signal_Change_Focus_Row_Expansion : constant Glib.Signal_Name :=
"change_focus_row_expansion";
Signal_Tree_Collapse : constant Glib.Signal_Name :=
"tree_collapse";
Signal_Tree_Expand : constant Glib.Signal_Name :=
"tree_expand";
Signal_Tree_Move : constant Glib.Signal_Name :=
"tree_move";
Signal_Tree_Select_Row : constant Glib.Signal_Name :=
"tree_select_row";
Signal_Tree_Unselect_Row : constant Glib.Signal_Name :=
"tree_unselect_row";
private
pragma Warnings (Off); -- Gtk.Clist is obsolescent
type Gtk_Ctree_Record is new Gtk.Clist.Gtk_Clist_Record with null record;
pragma Warnings (On);
pragma Import (C, Get_Type, "gtk_ctree_get_type");
pragma Import (C, Node_Get_Row, "ada_ctree_node_get_row");
pragma Import (C, Row_Get_Children, "ada_ctree_row_get_children");
pragma Import (C, Row_Get_Parent, "ada_ctree_row_get_parent");
pragma Import (C, Row_Get_Sibling, "ada_ctree_row_get_sibling");
end Gtk.Ctree;
-- These subprograms never had a binding, and are now obsolescent:
-- No binding: gtk_ctree_find_all_by_row_data
-- No binding: gtk_ctree_find_by_row_data
-- No binding: gtk_ctree_node_get_type
-- No binding: gtk_ctree_node_set_row_data