1/*
2 * Copyright © 2018 Benjamin Otte
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 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 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library. If not, see <http://www.gnu.org/licenses/>.
16 *
17 * Authors: Benjamin Otte <otte@gnome.org>
18 */
19
20
21#ifndef __GTK_LIST_ITEM_MANAGER_H__
22#define __GTK_LIST_ITEM_MANAGER_H__
23
24#include "gtk/gtktypes.h"
25#include "gtk/gtkenums.h"
26
27#include "gtk/gtklistitemfactory.h"
28#include "gtk/gtkrbtreeprivate.h"
29#include "gtk/gtkselectionmodel.h"
30
31G_BEGIN_DECLS
32
33#define GTK_TYPE_LIST_ITEM_MANAGER (gtk_list_item_manager_get_type ())
34#define GTK_LIST_ITEM_MANAGER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GTK_TYPE_LIST_ITEM_MANAGER, GtkListItemManager))
35#define GTK_LIST_ITEM_MANAGER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), GTK_TYPE_LIST_ITEM_MANAGER, GtkListItemManagerClass))
36#define GTK_IS_LIST_ITEM_MANAGER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GTK_TYPE_LIST_ITEM_MANAGER))
37#define GTK_IS_LIST_ITEM_MANAGER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GTK_TYPE_LIST_ITEM_MANAGER))
38#define GTK_LIST_ITEM_MANAGER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GTK_TYPE_LIST_ITEM_MANAGER, GtkListItemManagerClass))
39
40typedef struct _GtkListItemManager GtkListItemManager;
41typedef struct _GtkListItemManagerClass GtkListItemManagerClass;
42typedef struct _GtkListItemManagerItem GtkListItemManagerItem; /* sorry */
43typedef struct _GtkListItemManagerItemAugment GtkListItemManagerItemAugment;
44typedef struct _GtkListItemTracker GtkListItemTracker;
45
46struct _GtkListItemManagerItem
47{
48 GtkWidget *widget;
49 guint n_items;
50};
51
52struct _GtkListItemManagerItemAugment
53{
54 guint n_items;
55};
56
57
58GType gtk_list_item_manager_get_type (void) G_GNUC_CONST;
59
60GtkListItemManager * gtk_list_item_manager_new_for_size (GtkWidget *widget,
61 const char *item_css_name,
62 GtkAccessibleRole item_role,
63 gsize element_size,
64 gsize augment_size,
65 GtkRbTreeAugmentFunc augment_func);
66#define gtk_list_item_manager_new(widget, item_css_name, type, augment_type, augment_func) \
67 gtk_list_item_manager_new_for_size (widget, item_css_name, sizeof (type), sizeof (augment_type), (augment_func))
68
69void gtk_list_item_manager_augment_node (GtkRbTree *tree,
70 gpointer node_augment,
71 gpointer node,
72 gpointer left,
73 gpointer right);
74gpointer gtk_list_item_manager_get_root (GtkListItemManager *self);
75gpointer gtk_list_item_manager_get_first (GtkListItemManager *self);
76gpointer gtk_list_item_manager_get_nth (GtkListItemManager *self,
77 guint position,
78 guint *offset);
79guint gtk_list_item_manager_get_item_position (GtkListItemManager *self,
80 gpointer item);
81gpointer gtk_list_item_manager_get_item_augment (GtkListItemManager *self,
82 gpointer item);
83
84void gtk_list_item_manager_set_factory (GtkListItemManager *self,
85 GtkListItemFactory *factory);
86GtkListItemFactory * gtk_list_item_manager_get_factory (GtkListItemManager *self);
87void gtk_list_item_manager_set_model (GtkListItemManager *self,
88 GtkSelectionModel *model);
89GtkSelectionModel * gtk_list_item_manager_get_model (GtkListItemManager *self);
90
91guint gtk_list_item_manager_get_size (GtkListItemManager *self);
92void gtk_list_item_manager_set_single_click_activate
93 (GtkListItemManager *self,
94 gboolean single_click_activate);
95gboolean gtk_list_item_manager_get_single_click_activate
96 (GtkListItemManager *self);
97
98GtkListItemTracker * gtk_list_item_tracker_new (GtkListItemManager *self);
99void gtk_list_item_tracker_free (GtkListItemManager *self,
100 GtkListItemTracker *tracker);
101void gtk_list_item_tracker_set_position (GtkListItemManager *self,
102 GtkListItemTracker *tracker,
103 guint position,
104 guint n_before,
105 guint n_after);
106guint gtk_list_item_tracker_get_position (GtkListItemManager *self,
107 GtkListItemTracker *tracker);
108
109
110G_END_DECLS
111
112#endif /* __GTK_LIST_ITEM_MANAGER_H__ */
113

source code of gtk/gtk/gtklistitemmanagerprivate.h