----------------------------------------------------------------------- -- GtkAda - Ada95 binding for Gtk+/Gnome -- -- -- -- Copyright (C) 2001-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. -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- ----------------------------------------------------------------------- -- -- The Gtk_Tree_Selection object is a helper object to manage the selection -- for a Gtk_Tree_View widget. The Gtk_Tree_Selection object is automatically -- created when a new Gtk_Tree_View widget is created, and cannot exist -- independentally of this widget. The primary reason the 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 widget instead of separate function. -- -- The Gtk_Tree_Selection object is gotten from a 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 "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 "changed" signal when nothing has happened (mostly as a -- result of programmers calling select_row on an already selected row). -- -- 2.8.17 -- Trees and Lists with Glib.Object; with Gtk; with Gtk.Enums; use Gtk.Enums; with Gtk.Tree_Model; with Gtk.Widget; use Gtk.Widget; package Gtk.Tree_Selection is type Gtk_Tree_Selection_Record is new Glib.Object.GObject_Record with private; type Gtk_Tree_Selection is access all Gtk_Tree_Selection_Record'Class; function Get_Type return Glib.GType; -- Return the internal type associated with Gtk_Tree_Selection. procedure Set_Mode (Selection : access Gtk_Tree_Selection_Record'Class; The_Type : Gtk_Selection_Mode); function Get_Mode (Selection : access Gtk_Tree_Selection_Record'Class) return Gtk_Selection_Mode; -- Set 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. function Get_Tree_View (Selection : access Gtk_Tree_Selection_Record'Class) return Gtk.Widget.Gtk_Widget; -- Return the tree view associated with Selection. function Count_Selected_Rows (Selection : access Gtk_Tree_Selection_Record) return Gint; -- Returns the number of rows that have been selected. procedure Get_Selected (Selection : access Gtk_Tree_Selection_Record'Class; Model : out Gtk.Tree_Model.Gtk_Tree_Model; Iter : out Gtk.Tree_Model.Gtk_Tree_Iter); -- Set Iter to the currently selected node if Selection -- is set to Gtk_Selection_Single or Gtk_Selection_Browse. -- Iter is set to Null_Iter if no node is currently selected. -- Model is filled with the current model as a convenience. This function -- will not work if Selection is set to Gtk_Selection_Multiple. 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. generic type Data_Type is private; package Selection_Foreach is type Data_Type_Access is access all Data_Type; type 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 : Data_Type_Access); procedure Selected_Foreach (Selection : access Gtk_Tree_Selection_Record'Class; Func : Foreach_Func; Data : Data_Type_Access); -- Call Func for each selected node. end Selection_Foreach; procedure Select_Path (Selection : access Gtk_Tree_Selection_Record'Class; Path : Gtk.Tree_Model.Gtk_Tree_Path); procedure Unselect_Path (Selection : access Gtk_Tree_Selection_Record'Class; Path : Gtk.Tree_Model.Gtk_Tree_Path); -- Selects or unselects the row at path. function Path_Is_Selected (Selection : access Gtk_Tree_Selection_Record'Class; Path : Gtk.Tree_Model.Gtk_Tree_Path) return Boolean; -- Return True if the row pointed to by path is currently selected. -- If path does not point to a valid location, False is returned procedure Select_Iter (Selection : access Gtk_Tree_Selection_Record'Class; Iter : Gtk.Tree_Model.Gtk_Tree_Iter); procedure Unselect_Iter (Selection : access Gtk_Tree_Selection_Record'Class; Iter : Gtk.Tree_Model.Gtk_Tree_Iter); -- Selects or unselects the row pointed to by the specified iterator. function Iter_Is_Selected (Selection : access Gtk_Tree_Selection_Record'Class; Iter : Gtk.Tree_Model.Gtk_Tree_Iter) return Boolean; -- Return True if the row pointed to by path is currently selected. procedure Select_All (Selection : access Gtk_Tree_Selection_Record'Class); procedure Unselect_All (Selection : access Gtk_Tree_Selection_Record'Class); -- Selects or unselects all the nodes. -- Selection must be set to Gtk_Selection_Multiple mode. procedure Select_Range (Selection : access Gtk_Tree_Selection_Record'Class; Start_Path : Gtk.Tree_Model.Gtk_Tree_Path; End_Path : Gtk.Tree_Model.Gtk_Tree_Path); procedure Unselect_Range (Selection : access Gtk_Tree_Selection_Record; Start_Path : Gtk.Tree_Model.Gtk_Tree_Path; End_Path : Gtk.Tree_Model.Gtk_Tree_Path); -- Selects or unselects a range of nodes, determined by Start_Path and -- End_Path inclusive ------------- -- Signals -- ------------- -- -- The following new signals are defined for this widget: -- -- - "changed" -- procedure Handler -- (Widget : access Gtk_Tree_Selection_Record'Class'Class); -- 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. -- -- Signal_Changed : constant Glib.Signal_Name := "changed"; private type Gtk_Tree_Selection_Record is new Glib.Object.GObject_Record with null record; pragma Import (C, Get_Type, "gtk_tree_selection_get_type"); end Gtk.Tree_Selection; -- missing: -- -- procedure Set_Select_Function -- (Selection : access Gtk_Tree_Selection_Record'Class; -- Func : Gtk_Tree_Selection_Func; -- Data : gpointer; -- Destroy : Gtk_Destroy_Notify); -- -- function Get_User_Data -- (Selection : access Gtk_Tree_Selection_Record'Class) return gpointer;