| 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) |