1/* gtktreeselection.h
2 * Copyright (C) 2000 Red Hat, Inc., Jonathan Blandford <[email protected]>
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Library General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Library General Public License for more details.
13 *
14 * You should have received a copy of the GNU Library General Public
15 * License along with this library. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#ifndef __GTK_TREE_SELECTION_H__
19#define __GTK_TREE_SELECTION_H__
20
21#if !defined (__GTK_H_INSIDE__) && !defined (GTK_COMPILATION)
22#error "Only <gtk/gtk.h> can be included directly."
23#endif
24
25#include <gtk/gtktreeview.h>
26
27G_BEGIN_DECLS
28
29
30#define GTK_TYPE_TREE_SELECTION (gtk_tree_selection_get_type ())
31#define GTK_TREE_SELECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_TREE_SELECTION, GtkTreeSelection))
32#define GTK_TREE_SELECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_TREE_SELECTION, GtkTreeSelectionClass))
33#define GTK_IS_TREE_SELECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_TREE_SELECTION))
34#define GTK_IS_TREE_SELECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_TREE_SELECTION))
35#define GTK_TREE_SELECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_TREE_SELECTION, GtkTreeSelectionClass))
36
37typedef struct _GtkTreeSelectionPrivate GtkTreeSelectionPrivate;
38
39/**
40 * GtkTreeSelectionFunc:
41 * @selection: A #GtkTreeSelection
42 * @model: A #GtkTreeModel being viewed
43 * @path: The #GtkTreePath of the row in question
44 * @path_currently_selected: %TRUE, if the path is currently selected
45 * @data: (closure): user data
46 *
47 * A function used by gtk_tree_selection_set_select_function() to filter
48 * whether or not a row may be selected. It is called whenever a row's
49 * state might change. A return value of %TRUE indicates to @selection
50 * that it is okay to change the selection.
51 *
52 * Returns: %TRUE, if the selection state of the row can be toggled
53 */
54typedef gboolean (* GtkTreeSelectionFunc) (GtkTreeSelection *selection,
55 GtkTreeModel *model,
56 GtkTreePath *path,
57 gboolean path_currently_selected,
58 gpointer data);
59
60/**
61 * GtkTreeSelectionForeachFunc:
62 * @model: The #GtkTreeModel being viewed
63 * @path: The #GtkTreePath of a selected row
64 * @iter: A #GtkTreeIter pointing to a selected row
65 * @data: (closure): user data
66 *
67 * A function used by gtk_tree_selection_selected_foreach() to map all
68 * selected rows. It will be called on every selected row in the view.
69 */
70typedef void (* GtkTreeSelectionForeachFunc) (GtkTreeModel *model,
71 GtkTreePath *path,
72 GtkTreeIter *iter,
73 gpointer data);
74
75struct _GtkTreeSelection
76{
77 /*< private >*/
78 GObject parent;
79
80 GtkTreeSelectionPrivate *priv;
81};
82
83/**
84 * GtkTreeSelectionClass:
85 * @parent_class: The parent class.
86 * @changed: Signal emitted whenever the selection has (possibly) changed.
87 */
88struct _GtkTreeSelectionClass
89{
90 GObjectClass parent_class;
91
92 /*< public >*/
93
94 void (* changed) (GtkTreeSelection *selection);
95
96 /*< private >*/
97
98 /* Padding for future expansion */
99 void (*_gtk_reserved1) (void);
100 void (*_gtk_reserved2) (void);
101 void (*_gtk_reserved3) (void);
102 void (*_gtk_reserved4) (void);
103};
104
105
106GDK_AVAILABLE_IN_ALL
107GType gtk_tree_selection_get_type (void) G_GNUC_CONST;
108
109GDK_AVAILABLE_IN_ALL
110void gtk_tree_selection_set_mode (GtkTreeSelection *selection,
111 GtkSelectionMode type);
112GDK_AVAILABLE_IN_ALL
113GtkSelectionMode gtk_tree_selection_get_mode (GtkTreeSelection *selection);
114GDK_AVAILABLE_IN_ALL
115void gtk_tree_selection_set_select_function (GtkTreeSelection *selection,
116 GtkTreeSelectionFunc func,
117 gpointer data,
118 GDestroyNotify destroy);
119GDK_AVAILABLE_IN_ALL
120gpointer gtk_tree_selection_get_user_data (GtkTreeSelection *selection);
121GDK_AVAILABLE_IN_ALL
122GtkTreeView* gtk_tree_selection_get_tree_view (GtkTreeSelection *selection);
123
124GDK_AVAILABLE_IN_ALL
125GtkTreeSelectionFunc gtk_tree_selection_get_select_function (GtkTreeSelection *selection);
126
127/* Only meaningful if GTK_SELECTION_SINGLE or GTK_SELECTION_BROWSE is set */
128/* Use selected_foreach or get_selected_rows for GTK_SELECTION_MULTIPLE */
129GDK_AVAILABLE_IN_ALL
130gboolean gtk_tree_selection_get_selected (GtkTreeSelection *selection,
131 GtkTreeModel **model,
132 GtkTreeIter *iter);
133GDK_AVAILABLE_IN_ALL
134GList * gtk_tree_selection_get_selected_rows (GtkTreeSelection *selection,
135 GtkTreeModel **model);
136GDK_AVAILABLE_IN_ALL
137gint gtk_tree_selection_count_selected_rows (GtkTreeSelection *selection);
138GDK_AVAILABLE_IN_ALL
139void gtk_tree_selection_selected_foreach (GtkTreeSelection *selection,
140 GtkTreeSelectionForeachFunc func,
141 gpointer data);
142GDK_AVAILABLE_IN_ALL
143void gtk_tree_selection_select_path (GtkTreeSelection *selection,
144 GtkTreePath *path);
145GDK_AVAILABLE_IN_ALL
146void gtk_tree_selection_unselect_path (GtkTreeSelection *selection,
147 GtkTreePath *path);
148GDK_AVAILABLE_IN_ALL
149void gtk_tree_selection_select_iter (GtkTreeSelection *selection,
150 GtkTreeIter *iter);
151GDK_AVAILABLE_IN_ALL
152void gtk_tree_selection_unselect_iter (GtkTreeSelection *selection,
153 GtkTreeIter *iter);
154GDK_AVAILABLE_IN_ALL
155gboolean gtk_tree_selection_path_is_selected (GtkTreeSelection *selection,
156 GtkTreePath *path);
157GDK_AVAILABLE_IN_ALL
158gboolean gtk_tree_selection_iter_is_selected (GtkTreeSelection *selection,
159 GtkTreeIter *iter);
160GDK_AVAILABLE_IN_ALL
161void gtk_tree_selection_select_all (GtkTreeSelection *selection);
162GDK_AVAILABLE_IN_ALL
163void gtk_tree_selection_unselect_all (GtkTreeSelection *selection);
164GDK_AVAILABLE_IN_ALL
165void gtk_tree_selection_select_range (GtkTreeSelection *selection,
166 GtkTreePath *start_path,
167 GtkTreePath *end_path);
168GDK_AVAILABLE_IN_ALL
169void gtk_tree_selection_unselect_range (GtkTreeSelection *selection,
170 GtkTreePath *start_path,
171 GtkTreePath *end_path);
172
173
174G_END_DECLS
175
176#endif /* __GTK_TREE_SELECTION_H__ */
177