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)