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 31 G_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 40 typedef struct _GtkListItemManager GtkListItemManager; 41 typedef struct _GtkListItemManagerClass GtkListItemManagerClass; 42 typedef struct _GtkListItemManagerItem GtkListItemManagerItem; /* sorry */ 43 typedef struct _GtkListItemManagerItemAugment GtkListItemManagerItemAugment; 44 typedef struct _GtkListItemTracker GtkListItemTracker; 45 46 struct _GtkListItemManagerItem 47 { 48 GtkWidget *widget; 49 guint n_items; 50 }; 51 52 struct _GtkListItemManagerItemAugment 53 { 54 guint n_items; 55 }; 56 57 58 GType gtk_list_item_manager_get_type (void) G_GNUC_CONST; 59 60 GtkListItemManager * 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 69 void gtk_list_item_manager_augment_node (GtkRbTree *tree, 70 gpointer node_augment, 71 gpointer node, 72 gpointer left, 73 gpointer right); 74 gpointer gtk_list_item_manager_get_root (GtkListItemManager *self); 75 gpointer gtk_list_item_manager_get_first (GtkListItemManager *self); 76 gpointer gtk_list_item_manager_get_nth (GtkListItemManager *self, 77 guint position, 78 guint *offset); 79 guint gtk_list_item_manager_get_item_position (GtkListItemManager *self, 80 gpointer item); 81 gpointer gtk_list_item_manager_get_item_augment (GtkListItemManager *self, 82 gpointer item); 83 84 void gtk_list_item_manager_set_factory (GtkListItemManager *self, 85 GtkListItemFactory *factory); 86 GtkListItemFactory * gtk_list_item_manager_get_factory (GtkListItemManager *self); 87 void gtk_list_item_manager_set_model (GtkListItemManager *self, 88 GtkSelectionModel *model); 89 GtkSelectionModel * gtk_list_item_manager_get_model (GtkListItemManager *self); 90 91 guint gtk_list_item_manager_get_size (GtkListItemManager *self); 92 void gtk_list_item_manager_set_single_click_activate 93 (GtkListItemManager *self, 94 gboolean single_click_activate); 95 gboolean gtk_list_item_manager_get_single_click_activate 96 (GtkListItemManager *self); 97 98 GtkListItemTracker * gtk_list_item_tracker_new (GtkListItemManager *self); 99 void gtk_list_item_tracker_free (GtkListItemManager *self, 100 GtkListItemTracker *tracker); 101 void gtk_list_item_tracker_set_position (GtkListItemManager *self, 102 GtkListItemTracker *tracker, 103 guint position, 104 guint n_before, 105 guint n_after); 106 guint gtk_list_item_tracker_get_position (GtkListItemManager *self, 107 GtkListItemTracker *tracker); 108 109 110 G_END_DECLS 111 112 #endif /* __GTK_LIST_ITEM_MANAGER_H__ */ 113