ttreeview.h - vaccinewars - be a doctor and try to vaccinate the world
HTML git clone git://src.adamsgaard.dk/vaccinewars
DIR Log
DIR Files
DIR Refs
DIR README
DIR LICENSE
---
ttreeview.h (9590B)
---
1 /************************************************************************
2 * treeview.h GtkTreeView (and friends) implementation for gtkport *
3 * Copyright (C) 1998-2021 Ben Webb *
4 * Email: benwebb@users.sf.net *
5 * WWW: https://dopewars.sourceforge.io/ *
6 * *
7 * This program is free software; you can redistribute it and/or *
8 * modify it under the terms of the GNU General Public License *
9 * as published by the Free Software Foundation; either version 2 *
10 * of the License, or (at your option) any later version. *
11 * *
12 * This program is distributed in the hope that it will be useful, *
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
15 * GNU General Public License for more details. *
16 * *
17 * You should have received a copy of the GNU General Public License *
18 * along with this program; if not, write to the Free Software *
19 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, *
20 * MA 02111-1307, USA. *
21 ************************************************************************/
22
23 #ifndef __TREEVIEW_H__
24 #define __TREEVIEW_H__
25
26 #ifdef HAVE_CONFIG_H
27 #include <config.h>
28 #endif
29
30 #ifdef CYGWIN
31
32 #include <glib.h>
33 #include "gtkenums.h"
34
35 typedef struct _GtkTreeView GtkTreeView;
36 typedef struct _GtkTreeViewColumn GtkTreeViewColumn;
37 typedef struct _GtkListStore GtkListStore;
38 /* ListStore is the only model we provide here, so they can be synonyms */
39 typedef struct _GtkListStore GtkTreeModel;
40 typedef struct _GtkCellRenderer GtkCellRenderer;
41
42 /* Our TreeModel is sortable, so this can be a synonym */
43 typedef struct _GtkListStore GtkTreeSortable;
44
45 /* We only support one selection per tree view, so make them synonyms */
46 typedef struct _GtkTreeView GtkTreeSelection;
47
48 /* A list row is just a list of pointers to column data */
49 typedef struct _GtkListStoreRow GtkListStoreRow;
50
51 /* Tree iterators and paths are each just a row index */
52 typedef guint GtkTreeIter;
53 typedef guint GtkTreePath;
54
55 typedef gint (*GtkTreeIterCompareFunc) (GtkTreeModel *model,
56 GtkTreeIter *a, GtkTreeIter *b,
57 gpointer user_data);
58
59 struct _GtkTreeView {
60 GtkContainer container;
61 HWND header, scrollwin;
62 GtkTreeModel *model;
63 int scrollpos;
64 gint16 header_size;
65 GtkSelectionMode mode;
66 GSList *columns; /* List of GtkTreeViewColumn objects */
67 GList *selection;
68 gint headers_clickable:1;
69 };
70
71 struct _GtkTreeViewColumn {
72 gchar *title; /* header title */
73 int model_column; /* the index of the column in the GtkTreeModel */
74 gint sort_column_id; /* what to sort by when this column is selected */
75 gint width;
76 gint optimal_width;
77 gfloat xalign; /* 0.0 for left, 0.5 for center, 1.0 for right align */
78 guint visible:1;
79 guint resizeable:1;
80 guint auto_resize:1;
81 guint expand:1; /* should the column take up available space? */
82 };
83
84 struct _GtkListStoreRow {
85 gpointer *data; /* Data for each column */
86 };
87
88 struct _GtkListStore {
89 GObject object;
90 int ncols; /* Number of columns */
91 int *coltype; /* Type of each column (e.g. G_TYPE_STRING) */
92 GArray *rows; /* All rows in the list as GtkListStoreRow */
93 GtkTreeView *view; /* The currently connected view (only one supported) */
94 gint sort_column_id; /* what to sort by, if >= 0 */
95 GtkSortType sort_order;
96 GArray *sort_func; /* callback functions for sorting, by sort_column_id */
97 gint need_sort:1; /* set once data is added/changed */
98 };
99
100 /* Empty struct; we don't support customizing the renderer */
101 struct _GtkCellRenderer {
102 };
103
104 typedef void (*GtkTreeSelectionForeachFunc) (GtkTreeModel *model,
105 GtkTreePath *path, GtkTreeIter *iter, gpointer data);
106
107 #define GTK_TREE_VIEW(obj) ((GtkTreeView *)(obj))
108 #define GTK_TREE_MODEL(obj) ((GtkTreeModel *)(obj))
109 #define GTK_TREE_SORTABLE(obj) ((GtkTreeSortable *)(obj))
110 #define GTK_LIST_STORE(obj) ((GtkListStore *)(obj))
111
112 #define GTK_TREE_SORTABLE_DEFAULT_SORT_COLUMN_ID (-1)
113 #define GTK_TREE_SORTABLE_UNSORTED_SORT_COLUMN_ID (-2)
114
115 GtkListStore *gtk_list_store_new(gint n_columns, ...);
116 void gtk_list_store_clear(GtkListStore *list_store);
117 void gtk_list_store_insert(GtkListStore *list_store, GtkTreeIter *iter,
118 gint position);
119 void gtk_list_store_append(GtkListStore *list_store, GtkTreeIter *iter);
120 gboolean gtk_list_store_remove(GtkListStore *list_store, GtkTreeIter *iter);
121 void gtk_list_store_set(GtkListStore *list_store, GtkTreeIter *iter, ...);
122 void gtk_list_store_swap(GtkListStore *store, GtkTreeIter *a, GtkTreeIter *b);
123
124 void gtk_tree_model_get(GtkTreeModel *tree_model, GtkTreeIter *iter, ...);
125 gboolean gtk_tree_model_iter_nth_child(GtkTreeModel *tree_model,
126 GtkTreeIter *iter,
127 GtkTreeIter *parent, gint n);
128 gint gtk_tree_model_iter_n_children(GtkTreeModel *tree_model,
129 GtkTreeIter *iter);
130
131 GtkWidget *gtk_tree_view_new(void);
132 GtkTreeSelection *gtk_tree_view_get_selection(GtkTreeView *tree_view);
133 void gtk_tree_view_set_model(GtkTreeView *tree_view, GtkTreeModel *model);
134 GtkTreeModel *gtk_tree_view_get_model(GtkTreeView *tree_view);
135 void gtk_tree_view_set_headers_clickable(GtkTreeView *tree_view,
136 gboolean setting);
137 gint gtk_tree_view_insert_column_with_attributes
138 (GtkTreeView *tree_view, gint position, const gchar *title,
139 GtkCellRenderer *cell, ...);
140 void gtk_tree_view_scroll_to_cell(GtkTreeView *tree_view,
141 GtkTreePath *path,
142 GtkTreeViewColumn *column,
143 gboolean use_align, gfloat row_align,
144 gfloat col_align);
145 void gtk_tree_selection_selected_foreach(GtkTreeSelection *selection,
146 GtkTreeSelectionForeachFunc func,
147 gpointer data);
148 void gtk_tree_selection_set_mode(GtkTreeSelection *selection,
149 GtkSelectionMode type);
150 gboolean gtk_tree_selection_get_selected(GtkTreeSelection *selection,
151 GtkTreeModel **model,
152 GtkTreeIter *iter);
153 gint gtk_tree_selection_count_selected_rows(GtkTreeSelection *selection);
154 void gtk_tree_selection_select_path(GtkTreeSelection *selection,
155 GtkTreePath *path);
156 void gtk_tree_selection_unselect_path(GtkTreeSelection *selection,
157 GtkTreePath *path);
158 void gtk_tree_selection_unselect_all(GtkTreeSelection *selection);
159 #define gtk_tree_selection_select_iter(sel, iter) gtk_tree_selection_select_path(sel, iter)
160 #define gtk_tree_selection_unselect_iter(sel, iter) gtk_tree_selection_unselect_path(sel, iter)
161 GList *gtk_tree_selection_get_selected_rows(GtkTreeSelection *selection,
162 GtkTreeModel **model);
163 #define gtk_tree_path_free g_free
164 gint *gtk_tree_path_get_indices_with_depth(GtkTreePath *path, gint *depth);
165 GtkTreeViewColumn *gtk_tree_view_column_new_with_attributes
166 (const gchar *title, GtkCellRenderer *cell, ...);
167 void gtk_tree_view_column_set_resizable(GtkTreeViewColumn *tree_column,
168 gboolean resizable);
169 void gtk_tree_view_column_set_expand(GtkTreeViewColumn *tree_column,
170 gboolean expand);
171 void gtk_tree_view_column_set_sort_column_id(GtkTreeViewColumn *tree_column,
172 gint sort_column_id);
173 /* We treat this as the alignment of all cells in this column, not just the
174 alignment of the header */
175 void gtk_tree_view_column_set_alignment(GtkTreeViewColumn *tree_column,
176 gfloat xalign);
177 /* This is only used to set the xalign property, so make it a noop */
178 #define g_object_set(object, name, value, end) {}
179 gint gtk_tree_view_insert_column(GtkTreeView *tree_view,
180 GtkTreeViewColumn *column,
181 gint position);
182 GtkTreeViewColumn *gtk_tree_view_get_column(GtkTreeView *tree_view, gint n);
183
184 /* Force a sort of the view */
185 void gtk_tree_view_sort(GtkTreeView *tv);
186
187 void gtk_tree_sortable_set_sort_func(GtkTreeSortable *sortable,
188 gint sort_column_id,
189 GtkTreeIterCompareFunc sort_func,
190 gpointer user_data,
191 GDestroyNotify destroy);
192 void gtk_tree_sortable_set_sort_column_id(GtkTreeSortable *sortable,
193 gint sort_column_id,
194 GtkSortType order);
195 GtkCellRenderer *gtk_cell_renderer_text_new(void);
196
197 void g_object_unref(gpointer object);
198 gpointer g_object_ref(gpointer object);
199
200 /* Private functions */
201 void InitTreeViewClass(HINSTANCE hInstance);
202 void gtk_tree_model_free(GtkTreeModel *model);
203 #endif /* CYGWIN */
204
205 #endif