Mercurial > pidgin
comparison console/libgnt/gnttree.c @ 13858:aa1c97f5e6eb
[gaim-migrate @ 16317]
Do the indentation in GntTree properly.
committer: Tailor Script <tailor@pidgin.im>
author | Sadrul Habib Chowdhury <imadil@gmail.com> |
---|---|
date | Fri, 23 Jun 2006 10:25:47 +0000 |
parents | d341b5ac1a78 |
children | c1e3f7c75c3f |
comparison
equal
deleted
inserted
replaced
13857:d341b5ac1a78 | 13858:aa1c97f5e6eb |
---|---|
2 | 2 |
3 enum | 3 enum |
4 { | 4 { |
5 SIGS = 1, | 5 SIGS = 1, |
6 }; | 6 }; |
7 | |
8 #define TAB_SIZE 3 | |
7 | 9 |
8 /* XXX: Make this one into a GObject? | 10 /* XXX: Make this one into a GObject? |
9 * ... Probably not */ | 11 * ... Probably not */ |
10 struct _GnTreeRow | 12 struct _GnTreeRow |
11 { | 13 { |
200 } | 202 } |
201 | 203 |
202 return type; | 204 return type; |
203 } | 205 } |
204 | 206 |
207 static void | |
208 free_tree_row(gpointer data) | |
209 { | |
210 GntTreeRow *row = data; | |
211 | |
212 g_free(row->text); | |
213 g_free(row); | |
214 } | |
215 | |
205 GntWidget *gnt_tree_new() | 216 GntWidget *gnt_tree_new() |
206 { | 217 { |
207 GntWidget *widget = g_object_new(GNT_TYPE_TREE, NULL); | 218 GntWidget *widget = g_object_new(GNT_TYPE_TREE, NULL); |
208 GntTree *tree = GNT_TREE(widget); | 219 GntTree *tree = GNT_TREE(widget); |
209 | 220 |
210 tree->hash = g_hash_table_new(g_direct_hash, g_direct_equal); | 221 tree->hash = g_hash_table_new_full(g_direct_hash, g_direct_equal, NULL, free_tree_row); |
211 GNT_WIDGET_SET_FLAGS(widget, GNT_WIDGET_NO_SHADOW); | 222 GNT_WIDGET_SET_FLAGS(widget, GNT_WIDGET_NO_SHADOW); |
212 gnt_widget_set_take_focus(widget, TRUE); | 223 gnt_widget_set_take_focus(widget, TRUE); |
213 | 224 |
214 return widget; | 225 return widget; |
215 } | 226 } |
244 tree->bottom += count; | 255 tree->bottom += count; |
245 | 256 |
246 redraw_tree(tree); | 257 redraw_tree(tree); |
247 } | 258 } |
248 | 259 |
260 static int | |
261 find_depth(GntTreeRow *row) | |
262 { | |
263 int dep = -1; | |
264 | |
265 while (row) | |
266 { | |
267 dep++; | |
268 row = row->parent; | |
269 } | |
270 | |
271 return dep; | |
272 } | |
273 | |
249 void gnt_tree_add_row_after(GntTree *tree, void *key, const char *text, void *parent, void *bigbro) | 274 void gnt_tree_add_row_after(GntTree *tree, void *key, const char *text, void *parent, void *bigbro) |
250 { | 275 { |
251 GntTreeRow *row = g_new0(GntTreeRow, 1), *pr = NULL; | 276 GntTreeRow *row = g_new0(GntTreeRow, 1), *pr = NULL; |
252 | |
253 row->key = key; | |
254 row->text = g_strdup(text); | |
255 row->data = NULL; | |
256 | 277 |
257 g_hash_table_insert(tree->hash, key, row); | 278 g_hash_table_insert(tree->hash, key, row); |
258 | 279 |
259 if (tree->root == NULL) | 280 if (tree->root == NULL) |
260 { | 281 { |
306 { | 327 { |
307 tree->list = g_list_insert(tree->list, key, position + 1); | 328 tree->list = g_list_insert(tree->list, key, position + 1); |
308 } | 329 } |
309 } | 330 } |
310 | 331 |
332 row->key = key; | |
333 row->text = g_strdup_printf("%*s%s", TAB_SIZE * find_depth(row), "", text); | |
334 row->data = NULL; | |
335 | |
311 if (GNT_WIDGET_IS_FLAG_SET(GNT_WIDGET(tree), GNT_WIDGET_MAPPED)) | 336 if (GNT_WIDGET_IS_FLAG_SET(GNT_WIDGET(tree), GNT_WIDGET_MAPPED)) |
312 redraw_tree(tree); | 337 redraw_tree(tree); |
313 } | 338 } |
314 | 339 |
315 gpointer gnt_tree_get_selection_data(GntTree *tree) | 340 gpointer gnt_tree_get_selection_data(GntTree *tree) |