Mercurial > pidgin
diff finch/libgnt/gnttree.h @ 20398:61d6a3dfbb3c
propagate from branch 'im.pidgin.rlaager.merging.msnp13-and-sf-1621854-4-rlaager-whitespace' (head 51cec0ffea45c8589dcb7bf0f9e36e749ed43017)
to branch 'im.pidgin.rlaager.merging.msnp13-and-pidgin' (head d0d075250a037e5d0a268a39501bf169465061a4)
author | Richard Laager <rlaager@wiktel.com> |
---|---|
date | Sun, 15 Apr 2007 03:56:08 +0000 |
parents | 790d1d003825 |
children | 8410511f4dbb |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/finch/libgnt/gnttree.h Sun Apr 15 03:56:08 2007 +0000 @@ -0,0 +1,155 @@ +#ifndef GNT_TREE_H +#define GNT_TREE_H + +#include "gntwidget.h" +#include "gnt.h" +#include "gntcolors.h" +#include "gntkeys.h" +#include "gnttextview.h" + +#define GNT_TYPE_TREE (gnt_tree_get_gtype()) +#define GNT_TREE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GNT_TYPE_TREE, GntTree)) +#define GNT_TREE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), GNT_TYPE_TREE, GntTreeClass)) +#define GNT_IS_TREE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GNT_TYPE_TREE)) +#define GNT_IS_TREE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), GNT_TYPE_TREE)) +#define GNT_TREE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GNT_TYPE_TREE, GntTreeClass)) + +#define GNT_TREE_FLAGS(obj) (GNT_TREE(obj)->priv.flags) +#define GNT_TREE_SET_FLAGS(obj, flags) (GNT_TREE_FLAGS(obj) |= flags) +#define GNT_TREE_UNSET_FLAGS(obj, flags) (GNT_TREE_FLAGS(obj) &= ~(flags)) + +typedef struct _GntTree GntTree; +typedef struct _GntTreePriv GntTreePriv; +typedef struct _GntTreeClass GntTreeClass; + +typedef struct _GntTreeRow GntTreeRow; +typedef struct _GntTreeCol GntTreeCol; + +struct _GntTree +{ + GntWidget parent; + + GntTreeRow *current; /* current selection */ + + GntTreeRow *top; /* The topmost visible item */ + GntTreeRow *bottom; /* The bottommost visible item */ + + GntTreeRow *root; /* The root of all evil */ + + GList *list; /* List of GntTreeRow s */ + GHashTable *hash; /* We need this for quickly referencing the rows */ + guint (*hash_func)(gconstpointer); + gboolean (*hash_eq_func)(gconstpointer, gconstpointer); + GDestroyNotify key_destroy; + GDestroyNotify value_destroy; + + int ncol; /* No. of columns */ + struct _GntTreeColInfo + { + int width; + char *title; + gboolean invisible; + } *columns; /* Would a GList be better? */ + gboolean show_title; + gboolean show_separator; /* Whether to show column separators */ + + GString *search; + int search_timeout; + + GCompareFunc compare; +}; + +struct _GntTreeClass +{ + GntWidgetClass parent; + + void (*selection_changed)(GntTreeRow *old, GntTreeRow * current); + void (*toggled)(GntTree *tree, gpointer key); + + void (*gnt_reserved1)(void); + void (*gnt_reserved2)(void); + void (*gnt_reserved3)(void); + void (*gnt_reserved4)(void); +}; + +G_BEGIN_DECLS + +GType gnt_tree_get_gtype(void); + +GntWidget *gnt_tree_new(void); /* A tree with just one column */ + +GntWidget *gnt_tree_new_with_columns(int columns); + +void gnt_tree_set_visible_rows(GntTree *tree, int rows); + +int gnt_tree_get_visible_rows(GntTree *tree); + +void gnt_tree_scroll(GntTree *tree, int count); + +GntTreeRow *gnt_tree_add_row_after(GntTree *tree, void *key, GntTreeRow *row, void *parent, void *bigbro); + +GntTreeRow *gnt_tree_add_row_last(GntTree *tree, void *key, GntTreeRow *row, void *parent); + +gpointer gnt_tree_get_selection_data(GntTree *tree); + +/* Returned string needs to be freed */ +char *gnt_tree_get_selection_text(GntTree *tree); + +GList *gnt_tree_get_selection_text_list(GntTree *tree); + +const GList *gnt_tree_get_rows(GntTree *tree); + +void gnt_tree_remove(GntTree *tree, gpointer key); + +void gnt_tree_remove_all(GntTree *tree); + +/* Returns the visible line number of the selected row */ +int gnt_tree_get_selection_visible_line(GntTree *tree); + +void gnt_tree_change_text(GntTree *tree, gpointer key, int colno, const char *text); + +GntTreeRow *gnt_tree_add_choice(GntTree *tree, void *key, GntTreeRow *row, void *parent, void *bigbro); + +void gnt_tree_set_choice(GntTree *tree, void *key, gboolean set); + +gboolean gnt_tree_get_choice(GntTree *tree, void *key); + +void gnt_tree_set_row_flags(GntTree *tree, void *key, GntTextFormatFlags flags); + +void gnt_tree_set_selected(GntTree *tree , void *key); + +GntTreeRow *gnt_tree_create_row(GntTree *tree, ...); + +GntTreeRow *gnt_tree_create_row_from_list(GntTree *tree, GList *list); + +void gnt_tree_set_col_width(GntTree *tree, int col, int width); + +void gnt_tree_set_column_titles(GntTree *tree, ...); + +void gnt_tree_set_show_title(GntTree *tree, gboolean set); + +void gnt_tree_set_compare_func(GntTree *tree, GCompareFunc func); + +void gnt_tree_set_expanded(GntTree *tree, void *key, gboolean expanded); + +void gnt_tree_set_show_separator(GntTree *tree, gboolean set); + +void gnt_tree_sort_row(GntTree *tree, void *row); + +/* This will try to automatically adjust the width of the columns in the tree */ +void gnt_tree_adjust_columns(GntTree *tree); + +void gnt_tree_set_hash_fns(GntTree *tree, gpointer hash, gpointer eq, gpointer kd); + +/* This can be useful when, for example, we want to store some data + * which we don't want/need to display. */ +void gnt_tree_set_column_visible(GntTree *tree, int col, gboolean vis); + +G_END_DECLS + +/* The following functions should NOT be used by applications. */ + +/* This should be called by the subclasses of GntTree's in their _new function */ +void _gnt_tree_init_internals(GntTree *tree, int col); + +#endif /* GNT_TREE_H */