------------------------------------------------------------------------------ -- -- -- Copyright (C) 1998-2000 E. Briot, J. Brobecker and A. Charlet -- -- Copyright (C) 2000-2014, AdaCore -- -- -- -- This library is free software; you can redistribute it and/or modify it -- -- under terms of the GNU General Public License as published by the Free -- -- Software Foundation; either version 3, or (at your option) any later -- -- version. This library is distributed in the hope that it will be useful, -- -- but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHAN- -- -- TABILITY or FITNESS FOR A PARTICULAR PURPOSE. -- -- -- -- As a special exception under Section 7 of GPL version 3, you are granted -- -- additional permissions described in the GCC Runtime Library Exception, -- -- version 3.1, as published by the Free Software Foundation. -- -- -- -- You should have received a copy of the GNU General Public License and -- -- a copy of the GCC Runtime Library Exception along with this program; -- -- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -- -- <http://www.gnu.org/licenses/>. -- -- -- ------------------------------------------------------------------------------ -- <description> -- The Gtk.Tree_Selection.Gtk_Tree_Selection object is a helper object to -- manage the selection for a Gtk.Tree_View.Gtk_Tree_View widget. The -- Gtk.Tree_Selection.Gtk_Tree_Selection object is automatically created when -- a new Gtk.Tree_View.Gtk_Tree_View widget is created, and cannot exist -- independentally of this widget. The primary reason the -- Gtk.Tree_Selection.Gtk_Tree_Selection objects exists is for cleanliness of -- code and API. That is, there is no conceptual reason all these functions -- could not be methods on the Gtk.Tree_View.Gtk_Tree_View widget instead of a -- separate function. -- -- The Gtk.Tree_Selection.Gtk_Tree_Selection object is gotten from a -- Gtk.Tree_View.Gtk_Tree_View by calling Gtk.Tree_View.Get_Selection. It can -- be manipulated to check the selection status of the tree, as well as select -- and deselect individual rows. Selection is done completely view side. As a -- result, multiple views of the same model can have completely different -- selections. Additionally, you cannot change the selection of a row on the -- model that is not currently displayed by the view without expanding its -- parents first. -- -- One of the important things to remember when monitoring the selection of a -- view is that the Gtk.Tree_Selection.Gtk_Tree_Selection::changed signal is -- mostly a hint. That is, it may only emit one signal when a range of rows is -- selected. Additionally, it may on occasion emit a -- Gtk.Tree_Selection.Gtk_Tree_Selection::changed signal when nothing has -- happened (mostly as a result of programmers calling select_row on an -- already selected row). -- -- </description> pragma Ada_2005; pragma Warnings (Off, "*is already use-visible*");
with Glib; use Glib;
with Glib.Object; use Glib.Object;
with Gtk.Enums; use Gtk.Enums;
with Gtk.Tree_Model; use Gtk.Tree_Model;
with Gtk.Widget; use Gtk.Widget;
package Gtk.Tree_Selection is
type Gtk_Tree_Selection_Record is new GObject_Record with null record;
type Gtk_Tree_Selection is access all Gtk_Tree_Selection_Record'Class;
--------------- -- Callbacks -- --------------- type Gtk_Tree_Selection_Foreach_Func is access procedure
(Model : Gtk.Tree_Model.Gtk_Tree_Model; Path : Gtk.Tree_Model.Gtk_Tree_Path; Iter : Gtk.Tree_Model.Gtk_Tree_Iter); -- A function used by Gtk.Tree_Selection.Selected_Foreach to map all -- selected rows. It will be called on every selected row in the view. -- "model": The Gtk.Tree_Model.Gtk_Tree_Model being viewed -- "path": The Gtk.Tree_Model.Gtk_Tree_Path of a selected row -- "iter": A Gtk.Tree_Model.Gtk_Tree_Iter pointing to a selected row type Gtk_Tree_Selection_Func is access function
(Selection : not null access Gtk_Tree_Selection_Record'Class;
Model : Gtk.Tree_Model.Gtk_Tree_Model; Path : Gtk.Tree_Model.Gtk_Tree_Path; Path_Currently_Selected : Boolean) return Boolean; -- A function used by Gtk.Tree_Selection.Set_Select_Function to filter -- whether or not a row may be selected. It is called whenever a row's -- state might change. A return value of True indicates to Selection that -- it is okay to change the selection. -- "selection": A Gtk.Tree_Selection.Gtk_Tree_Selection -- "model": A Gtk.Tree_Model.Gtk_Tree_Model being viewed -- "path": The Gtk.Tree_Model.Gtk_Tree_Path of the row in question -- "path_currently_selected": True, if the path is currently selected ------------------ -- Constructors -- ------------------ function Get_Type return Glib.GType;
pragma Import (C, Get_Type, "gtk_tree_selection_get_type");
------------- -- Methods -- ------------- function Count_Selected_Rows
(Selection : not null access Gtk_Tree_Selection_Record) return Gint;
-- Returns the number of rows that have been selected in Tree. -- Since: gtk+ 2.2 function Get_Mode
(Selection : not null access Gtk_Tree_Selection_Record)
return Gtk.Enums.Gtk_Selection_Mode;
-- Gets the selection mode for Selection. See Gtk.Tree_Selection.Set_Mode. procedure Set_Mode
(Selection : not null access Gtk_Tree_Selection_Record;
The_Type : Gtk.Enums.Gtk_Selection_Mode);
-- Sets the selection mode of the Selection. If the previous type was -- GTK_SELECTION_MULTIPLE, then the anchor is kept selected, if it was -- previously selected. -- "type": The selection mode procedure Get_Select_Function
(Selection : not null access Gtk_Tree_Selection_Record);
-- Returns the current selection function. -- Since: gtk+ 2.14 procedure Set_Select_Function
(Selection : not null access Gtk_Tree_Selection_Record;
Func : Gtk_Tree_Selection_Func);
-- Sets the selection function. -- If set, this function is called before any node is selected or -- unselected, giving some control over which nodes are selected. The -- select function should return True if the state of the node may be -- toggled, and False if the state of the node should be left unchanged. -- "func": The selection function. May be null procedure Get_Selected
(Selection : not null access Gtk_Tree_Selection_Record;
Model : out Gtk.Tree_Model.Gtk_Tree_Model;
Iter : out Gtk.Tree_Model.Gtk_Tree_Iter);
-- Sets Iter to the currently selected node if Selection is set to -- GTK_SELECTION_SINGLE or GTK_SELECTION_BROWSE. Iter may be NULL if you -- just want to test if Selection has any selected nodes. Model is filled -- with the current model as a convenience. This function will not work if -- you use Selection is GTK_SELECTION_MULTIPLE. -- "model": A pointer to set to the Gtk.Tree_Model.Gtk_Tree_Model, or -- NULL. -- "iter": The Gtk.Tree_Model.Gtk_Tree_Iter, or NULL. function Get_Tree_View
(Selection : not null access Gtk_Tree_Selection_Record)
return Gtk.Widget.Gtk_Widget;
-- Returns the tree view associated with Selection. function Get_User_Data
(Selection : not null access Gtk_Tree_Selection_Record)
return System.Address; -- Returns the user data for the selection function. function Iter_Is_Selected
(Selection : not null access Gtk_Tree_Selection_Record;
Iter : Gtk.Tree_Model.Gtk_Tree_Iter) return Boolean;
-- Returns True if the row at Iter is currently selected. -- "iter": A valid Gtk.Tree_Model.Gtk_Tree_Iter function Path_Is_Selected
(Selection : not null access Gtk_Tree_Selection_Record;
Path : Gtk.Tree_Model.Gtk_Tree_Path) return Boolean;
-- Returns True if the row pointed to by Path is currently selected. If -- Path does not point to a valid location, False is returned -- "path": A Gtk.Tree_Model.Gtk_Tree_Path to check selection on. procedure Select_All
(Selection : not null access Gtk_Tree_Selection_Record);
-- Selects all the nodes. Selection must be set to GTK_SELECTION_MULTIPLE -- mode. procedure Select_Iter
(Selection : not null access Gtk_Tree_Selection_Record;
Iter : Gtk.Tree_Model.Gtk_Tree_Iter);
-- Selects the specified iterator. -- "iter": The Gtk.Tree_Model.Gtk_Tree_Iter to be selected. procedure Select_Path
(Selection : not null access Gtk_Tree_Selection_Record;
Path : Gtk.Tree_Model.Gtk_Tree_Path);
-- Select the row at Path. -- "path": The Gtk.Tree_Model.Gtk_Tree_Path to be selected. procedure Select_Range
(Selection : not null access Gtk_Tree_Selection_Record;
Start_Path : Gtk.Tree_Model.Gtk_Tree_Path;
End_Path : Gtk.Tree_Model.Gtk_Tree_Path);
-- Selects a range of nodes, determined by Start_Path and End_Path -- inclusive. Selection must be set to GTK_SELECTION_MULTIPLE mode. -- "start_path": The initial node of the range. -- "end_path": The final node of the range. procedure Selected_Foreach
(Selection : not null access Gtk_Tree_Selection_Record;
Func : Gtk_Tree_Selection_Foreach_Func);
-- Calls a function for each selected node. Note that you cannot modify -- the tree or selection from within this function. As a result, -- gtk_tree_selection_get_selected_rows might be more useful. -- "func": The function to call for each selected node. generic type User_Data_Type (<>) is private;
with procedure Destroy (Data : in out User_Data_Type) is null;
package Selected_Foreach_User_Data is
type Gtk_Tree_Selection_Foreach_Func is access procedure
(Model : Gtk.Tree_Model.Gtk_Tree_Model; Path : Gtk.Tree_Model.Gtk_Tree_Path; Iter : Gtk.Tree_Model.Gtk_Tree_Iter; Data : User_Data_Type); -- A function used by Gtk.Tree_Selection.Selected_Foreach to map all -- selected rows. It will be called on every selected row in the view. -- "model": The Gtk.Tree_Model.Gtk_Tree_Model being viewed -- "path": The Gtk.Tree_Model.Gtk_Tree_Path of a selected row -- "iter": A Gtk.Tree_Model.Gtk_Tree_Iter pointing to a selected row -- "data": user data procedure Selected_Foreach
(Selection : not null access Gtk.Tree_Selection.Gtk_Tree_Selection_Record'Class;
Func : Gtk_Tree_Selection_Foreach_Func;
Data : User_Data_Type);
-- Calls a function for each selected node. Note that you cannot modify -- the tree or selection from within this function. As a result, -- gtk_tree_selection_get_selected_rows might be more useful. -- "func": The function to call for each selected node. -- "data": user data to pass to the function. end Selected_Foreach_User_Data;
generic type User_Data_Type (<>) is private;
with procedure Destroy (Data : in out User_Data_Type) is null;
package Set_Select_Function_User_Data is
type Gtk_Tree_Selection_Func is access function
(Selection : not null access Gtk.Tree_Selection.Gtk_Tree_Selection_Record'Class;
Model : Gtk.Tree_Model.Gtk_Tree_Model; Path : Gtk.Tree_Model.Gtk_Tree_Path; Path_Currently_Selected : Boolean;
Data : User_Data_Type) return Boolean;
-- A function used by Gtk.Tree_Selection.Set_Select_Function to filter -- whether or not a row may be selected. It is called whenever a row's -- state might change. A return value of True indicates to Selection that -- it is okay to change the selection. -- "selection": A Gtk.Tree_Selection.Gtk_Tree_Selection -- "model": A Gtk.Tree_Model.Gtk_Tree_Model being viewed -- "path": The Gtk.Tree_Model.Gtk_Tree_Path of the row in question -- "path_currently_selected": True, if the path is currently selected -- "data": user data procedure Set_Select_Function
(Selection : not null access Gtk.Tree_Selection.Gtk_Tree_Selection_Record'Class;
Func : Gtk_Tree_Selection_Func;
Data : User_Data_Type);
-- Sets the selection function. -- If set, this function is called before any node is selected or -- unselected, giving some control over which nodes are selected. The -- select function should return True if the state of the node may be -- toggled, and False if the state of the node should be left unchanged. -- "func": The selection function. May be null -- "data": The selection function's data. May be null end Set_Select_Function_User_Data;
procedure Unselect_All
(Selection : not null access Gtk_Tree_Selection_Record);
-- Unselects all the nodes. procedure Unselect_Iter
(Selection : not null access Gtk_Tree_Selection_Record;
Iter : Gtk.Tree_Model.Gtk_Tree_Iter);
-- Unselects the specified iterator. -- "iter": The Gtk.Tree_Model.Gtk_Tree_Iter to be unselected. procedure Unselect_Path
(Selection : not null access Gtk_Tree_Selection_Record;
Path : Gtk.Tree_Model.Gtk_Tree_Path);
-- Unselects the row at Path. -- "path": The Gtk.Tree_Model.Gtk_Tree_Path to be unselected. procedure Unselect_Range
(Selection : not null access Gtk_Tree_Selection_Record;
Start_Path : Gtk.Tree_Model.Gtk_Tree_Path;
End_Path : Gtk.Tree_Model.Gtk_Tree_Path);
-- Unselects a range of nodes, determined by Start_Path and End_Path -- inclusive. -- Since: gtk+ 2.2 -- "start_path": The initial node of the range. -- "end_path": The initial node of the range. ---------------------- -- GtkAda additions -- ---------------------- procedure Get_Selected_Rows
(Selection : access Gtk_Tree_Selection_Record;
Model : out Gtk.Tree_Model.Gtk_Tree_Model;
Path_List : out Gtk.Tree_Model.Gtk_Tree_Path_List.Glist);
-- Creates a list of path of all selected rows. Additionally, if you are -- planning on modifying the model after calling this function, you may -- want to convert the returned list into a list of Gtk_Tree_Row_Reference. -- -- You must free the resulting list by calling Path_Free on each item, and -- then freeing the list itself. ---------------- -- Properties -- ---------------- -- The following properties are defined for this widget. See -- Glib.Properties for more information on properties) Mode_Property : constant Gtk.Enums.Property_Gtk_Selection_Mode;
-- Selection mode. See Gtk.Tree_Selection.Set_Mode for more information on -- this property. ------------- -- Signals -- ------------- type Cb_Gtk_Tree_Selection_Void is not null access procedure
(Self : access Gtk_Tree_Selection_Record'Class);
type Cb_GObject_Void is not null access procedure
(Self : access Glib.Object.GObject_Record'Class);
Signal_Changed : constant Glib.Signal_Name := "changed";
procedure On_Changed
(Self : not null access Gtk_Tree_Selection_Record;
Call : Cb_Gtk_Tree_Selection_Void;
After : Boolean := False);
procedure On_Changed
(Self : not null access Gtk_Tree_Selection_Record;
Call : Cb_GObject_Void;
Slot : not null access Glib.Object.GObject_Record'Class;
After : Boolean := False);
-- Emitted whenever the selection has (possibly) changed. Please note that -- this signal is mostly a hint. It may only be emitted once when a range -- of rows are selected, and it may occasionally be emitted when nothing -- has happened. private Mode_Property : constant Gtk.Enums.Property_Gtk_Selection_Mode :=
Gtk.Enums.Build ("mode");
end Gtk.Tree_Selection;