finch/libgnt/gnttree.h

changeset 39360
e7bed293aad5
parent 39302
64aabebb476b
child 39361
a1068caa3600
--- a/finch/libgnt/gnttree.h	Thu Nov 15 14:32:09 2018 -0600
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,715 +0,0 @@
-/*
- * GNT - The GLib Ncurses Toolkit
- *
- * GNT is the legal property of its developers, whose names are too numerous
- * to list here.  Please refer to the COPYRIGHT file distributed with this
- * source distribution.
- *
- * This library is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
- */
-
-#ifndef GNT_TREE_H
-#define GNT_TREE_H
-/**
- * SECTION:gnttree
- * @section_id: libgnt-gnttree
- * @short_description: <filename>gnttree.h</filename>
- * @title: Tree
- */
-
-#include "gntwidget.h"
-#include "gnt.h"
-#include "gntcolors.h"
-#include "gntkeys.h"
-#include "gnttextview.h"
-
-#define GNT_TYPE_TREE				(gnt_tree_get_type())
-#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_TYPE_TREE_ROW			(gnt_tree_row_get_type())
-
-typedef guint (*GntTreeHashFunc)(gconstpointer key);
-typedef gboolean (*GntTreeHashEqualityFunc)(gconstpointer a, gconstpointer b);
-
-typedef struct _GntTree			GntTree;
-typedef struct _GntTreePriv		GntTreePriv;
-typedef struct _GntTreeClass		GntTreeClass;
-
-typedef struct _GntTreeRow		GntTreeRow;
-typedef struct _GntTreeCol		GntTreeCol;
-typedef struct _GntTreeColInfo		GntTreeColInfo;
-
-typedef enum {
-	GNT_TREE_COLUMN_INVISIBLE    = 1 << 0,
-	GNT_TREE_COLUMN_FIXED_SIZE   = 1 << 1,
-	GNT_TREE_COLUMN_BINARY_DATA  = 1 << 2,
-	GNT_TREE_COLUMN_RIGHT_ALIGNED = 1 << 3,
-} GntTreeColumnFlag;
-
-struct _GntTreeColInfo
-{
-	int width;
-	char *title;
-	int width_ratio;
-	GntTreeColumnFlag flags;
-};
-
-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 */
-	GntTreeHashFunc hash_func;
-	GntTreeHashEqualityFunc hash_eq_func;
-	GDestroyNotify key_destroy;
-	GDestroyNotify value_destroy;
-
-	int ncol;               /* No. of columns */
-	GntTreeColInfo *columns; /* Would a GList be better? */
-	gboolean show_title;
-	gboolean show_separator; /* Whether to show column separators */
-
-	GntTreePriv *priv;
-};
-
-struct _GntTreeClass
-{
-	GntWidgetClass parent;
-
-	void (*selection_changed)(GntTreeRow *old, GntTreeRow * current);
-	void (*toggled)(GntTree *tree, gpointer key);
-
-	/*< private >*/
-	void (*gnt_reserved1)(void);
-	void (*gnt_reserved2)(void);
-	void (*gnt_reserved3)(void);
-	void (*gnt_reserved4)(void);
-};
-
-G_BEGIN_DECLS
-
-/**
- * gnt_tree_get_type:
- *
- * Returns: The GType for GntTree
- */
-GType gnt_tree_get_type(void);
-
-/**
- * gnt_tree_row_get_type:
- *
- * Returns: The #GType for the #GntTreeRow boxed structure.
- */
-GType gnt_tree_row_get_type(void);
-
-/**
- * gnt_tree_new:
- *
- * Create a tree with one column.
- *
- * See gnt_tree_new_with_columns().
- *
- * Returns: The newly created tree
- */
-GntWidget * gnt_tree_new(void);
-
-/**
- * gnt_tree_new_with_columns:
- * @columns:  Number of columns
- *
- * Create a tree with a specified number of columns.
- *
- * See gnt_tree_new().
- *
- * Returns:  The newly created tree
- */
-GntWidget * gnt_tree_new_with_columns(int columns);
-
-/**
- * gnt_tree_set_visible_rows:
- * @tree:  The tree
- * @rows:  The number of rows
- *
- * The number of rows the tree should display at a time.
- */
-void gnt_tree_set_visible_rows(GntTree *tree, int rows);
-
-/**
- * gnt_tree_get_visible_rows:
- * @tree:  The tree
- *
- * Get the number visible rows.
- *
- * Returns:  The number of visible rows
- */
-int gnt_tree_get_visible_rows(GntTree *tree);
-
-/**
- * gnt_tree_scroll:
- * @tree:   The tree
- * @count:  If positive, the tree will be scrolled down by count rows,
- *               otherwise, it will be scrolled up by count rows.
- *
- * Scroll the contents of the tree.
- */
-void gnt_tree_scroll(GntTree *tree, int count);
-
-/**
- * gnt_tree_add_row_after:
- * @tree:    The tree
- * @key:     The key for the row
- * @row:     The row to insert
- * @parent:  The key for the parent row
- * @bigbro:  The key for the row to insert the new row after.
- *
- * Insert a row in the tree.
- *
- * See gnt_tree_create_row(), gnt_tree_add_row_last(), gnt_tree_add_choice().
- *
- * Returns:  The inserted row
- */
-GntTreeRow * gnt_tree_add_row_after(GntTree *tree, void *key, GntTreeRow *row, void *parent, void *bigbro);
-
-/**
- * gnt_tree_add_row_last:
- * @tree:    The tree
- * @key:     The key for the row
- * @row:     The row to insert
- * @parent:  The key for the parent row
- *
- * Insert a row at the end of the tree.
- *
- * See gnt_tree_create_row(), gnt_tree_add_row_after(), gnt_tree_add_choice().
- *
- * Returns: The inserted row
- */
-GntTreeRow * gnt_tree_add_row_last(GntTree *tree, void *key, GntTreeRow *row, void *parent);
-
-/**
- * gnt_tree_get_selection_data:
- * @tree:  The tree
- *
- * Get the key for the selected row.
- *
- * Returns: (transfer none): The key for the selected row
- */
-gpointer gnt_tree_get_selection_data(GntTree *tree);
-
-/**
- * gnt_tree_get_selection_text:
- * @tree:  The tree
- *
- * Get the text displayed for the selected row.
- *
- * See gnt_tree_get_row_text_list(), gnt_tree_get_selection_text_list().
- *
- * Returns:  The text, which needs to be freed by the caller
- */
-char * gnt_tree_get_selection_text(GntTree *tree);
-
-/**
- * gnt_tree_get_row_text_list:
- * @tree:  The tree
- * @key:   A key corresponding to the row in question. If key
- *         is %NULL, the text list for the selected row will
- *         be returned.
- *
- * Get a list of text for a row.
- *
- * See gnt_tree_get_selection_text_list(), gnt_tree_get_selection_text().
- *
- * Returns: (transfer container) (element-type utf8): A list of texts of a row.
- *          The list and its data should be freed by the caller. The caller
- *          should make sure that if any column of the tree contains binary
- *          data, it's not freed.
- */
-/* TODO This leaks when used from introspection. The transfer mode for the
-        return type here should be 'full', but that would free binary data as
-        well. */
-GList * gnt_tree_get_row_text_list(GntTree *tree, gpointer key);
-
-/**
- * gnt_tree_row_get_key:
- * @tree:   The tree
- * @row:    The GntTreeRow object
- *
- * Get the key of a row.
- *
- * Returns: (transfer none): The key of the row.
- *
- * Since: 2.8.0 (gnt), 2.7.2 (pidgin)
- */
-gpointer gnt_tree_row_get_key(GntTree *tree, GntTreeRow *row);
-
-/**
- * gnt_tree_row_get_next:
- * @tree: The tree
- * @row:  The GntTreeRow object
- *
- * Get the next row.
- *
- * Returns: The next row.
- *
- * Since: 2.8.0 (gnt), 2.7.2 (pidgin)
- */
-GntTreeRow * gnt_tree_row_get_next(GntTree *tree, GntTreeRow *row);
-
-/**
- * gnt_tree_row_get_prev:
- * @tree: The tree
- * @row:  The GntTreeRow object
- *
- * Get the previous row.
- *
- * Returns: The previous row.
- *
- * Since: 2.8.0 (gnt), 2.7.2 (pidgin)
- */
-GntTreeRow * gnt_tree_row_get_prev(GntTree *tree, GntTreeRow *row);
-
-/**
- * gnt_tree_row_get_child:
- * @tree: The tree
- * @row:  The GntTreeRow object
- *
- * Get the child row.
- *
- * Returns: The child row.
- *
- * Since: 2.8.0 (gnt), 2.7.2 (pidgin)
- */
-GntTreeRow * gnt_tree_row_get_child(GntTree *tree, GntTreeRow *row);
-
-/**
- * gnt_tree_row_get_parent:
- * @tree: The tree
- * @row:  The GntTreeRow object
- *
- * Get the parent row.
- *
- * Returns: The parent row.
- *
- * Since: 2.8.0 (gnt), 2.7.2 (pidgin)
- */
-GntTreeRow * gnt_tree_row_get_parent(GntTree *tree, GntTreeRow *row);
-
-/**
- * gnt_tree_get_selection_text_list:
- * @tree:  The tree
- *
- * Get a list of text of the current row.
- *
- * See gnt_tree_get_row_text_list(), gnt_tree_get_selection_text().
- *
- * Returns: (transfer container) (element-type utf8): A list of texts of the
- *          currently selected row. The list and its data should be freed by
- *          the caller. The caller should make sure that if any column of the
- *          tree contains binary data, it's not freed.
- */
-/* TODO This leaks when used from introspection. The transfer mode for the
-        return type here should be 'full', but that would free binary data as
-        well. */
-GList * gnt_tree_get_selection_text_list(GntTree *tree);
-
-/**
- * gnt_tree_get_rows:
- * @tree:  The tree
- *
- * Returns the list of rows in the tree.
- *
- * Returns: (transfer none) (element-type Gnt.TreeRow): The list of the rows.
- *          The list should not be modified by the caller.
- */
-GList *gnt_tree_get_rows(GntTree *tree);
-
-/**
- * gnt_tree_remove:
- * @tree:  The tree
- * @key:   The key for the row to remove
- *
- * Remove a row from the tree.
- */
-void gnt_tree_remove(GntTree *tree, gpointer key);
-
-/**
- * gnt_tree_remove_all:
- * @tree:  The tree
- *
- * Remove all the item from the tree.
- */
-void gnt_tree_remove_all(GntTree *tree);
-
-/**
- * gnt_tree_get_selection_visible_line:
- * @tree:  The tree
- *
- * Get the visible line number of the selected row.
- *
- * Returns:  The line number of the currently selected row
- */
-int gnt_tree_get_selection_visible_line(GntTree *tree);
-
-/**
- * gnt_tree_change_text:
- * @tree:   The tree
- * @key:    The key for the row
- * @colno:  The index of the column
- * @text:   The new text
- *
- * Change the text of a column in a row.
- */
-void gnt_tree_change_text(GntTree *tree, gpointer key, int colno, const char *text);
-
-/**
- * gnt_tree_add_choice:
- * @tree:    The tree
- * @key:     The key for the row
- * @row:     The row to add
- * @parent:  The parent of the row, or %NULL
- * @bigbro:  The row to insert after, or %NULL
- *
- * Add a checkable item in the tree.
- *
- * See gnt_tree_create_row(), gnt_tree_create_row_from_list(),
- *     gnt_tree_add_row_last(), gnt_tree_add_row_after().
- *
- * Returns:  The row inserted.
- */
-GntTreeRow * gnt_tree_add_choice(GntTree *tree, void *key, GntTreeRow *row, void *parent, void *bigbro);
-
-/**
- * gnt_tree_set_choice:
- * @tree:   The tree
- * @key:    The key for the row
- * @set:    %TRUE if the item should be checked, %FALSE if not
- *
- * Set whether a checkable item is checked or not.
- */
-void gnt_tree_set_choice(GntTree *tree, void *key, gboolean set);
-
-/**
- * gnt_tree_get_choice:
- * @tree:  The tree
- * @key:   The key for the row
- *
- * Return whether a row is selected or not, where the row is a checkable item.
- *
- * Returns:    %TRUE if the row is checked, %FALSE otherwise.
- */
-gboolean gnt_tree_get_choice(GntTree *tree, void *key);
-
-/**
- * gnt_tree_set_row_flags:
- * @tree:   The tree
- * @key:    The key for the row
- * @flags:  The flags to set
- *
- * Set flags for the text in a row in the tree.
- */
-void gnt_tree_set_row_flags(GntTree *tree, void *key, GntTextFormatFlags flags);
-
-/**
- * gnt_tree_set_row_color:
- * @tree:   The tree
- * @key:    The key for the row
- * @color:  The color
- *
- * Set color for the text in a row in the tree.
- *
- * Since: 2.4.0
- */
-void gnt_tree_set_row_color(GntTree *tree, void *key, int color);
-
-/**
- * gnt_tree_set_selected:
- * @tree:  The tree
- * @key:   The key of the row to select
- *
- * Select a row.
- */
-void gnt_tree_set_selected(GntTree *tree , void *key);
-
-/**
- * gnt_tree_create_row:
- * @tree: The tree
- * @...:  A string for each column in the tree
- *
- * Create a row to insert in the tree.
- *
- * See gnt_tree_create_row_from_list(), gnt_tree_add_row_after(),
- *     gnt_tree_add_row_last(), gnt_tree_add_choice().
- *
- * Returns:   The row
- */
-GntTreeRow * gnt_tree_create_row(GntTree *tree, ...);
-
-/**
- * gnt_tree_create_row_from_list:
- * @tree: The tree
- * @list: (element-type utf8): The list containing the text for each column
- *
- * Create a row from a list of text.
- *
- * See gnt_tree_create_row(), gnt_tree_add_row_after(), gnt_tree_add_row_last(),
- *     gnt_tree_add_choice().
- *
- * Returns: (transfer full): The row
- */
-GntTreeRow * gnt_tree_create_row_from_list(GntTree *tree, GList *list);
-
-/**
- * gnt_tree_set_col_width:
- * @tree:   The tree
- * @col:    The index of the column
- * @width:  The width for the column
- *
- * Set the width of a column in the tree.
- *
- * See gnt_tree_set_column_width_ratio(), gnt_tree_set_column_resizable()
- */
-void gnt_tree_set_col_width(GntTree *tree, int col, int width);
-
-/**
- * gnt_tree_set_column_title:
- * @tree:   The tree
- * @index:  The index of the column
- * @title:  The title for the column
- *
- * Set the title for a column.
- *
- * See gnt_tree_set_column_titles(), gnt_tree_set_show_title().
- *
- * Since: 2.0.0 (gnt), 2.1.0 (pidgin)
- */
-void gnt_tree_set_column_title(GntTree *tree, int index, const char *title);
-
-/**
- * gnt_tree_set_column_titles:
- * @tree:  The tree
- * @...:   One title for each column in the tree
- *
- * Set the titles of the columns
- *
- * See gnt_tree_set_column_title(), gnt_tree_set_show_title().
- */
-void gnt_tree_set_column_titles(GntTree *tree, ...);
-
-/**
- * gnt_tree_set_show_title:
- * @tree:  The tree
- * @set:   If %TRUE, the column titles are displayed
- *
- * Set whether to display the title of the columns.
- *
- * See gnt_tree_set_column_title(), gnt_tree_set_column_titles().
- */
-void gnt_tree_set_show_title(GntTree *tree, gboolean set);
-
-/**
- * gnt_tree_set_compare_func:
- * @tree: The tree
- * @func: (scope call): The comparison function, which is used to compare
- *        the keys
- *
- * Set the compare function for sorting the data.
- *
- * See gnt_tree_sort_row().
- */
-void gnt_tree_set_compare_func(GntTree *tree, GCompareFunc func);
-
-/**
- * gnt_tree_set_expanded:
- * @tree:      The tree
- * @key:       The key of the row
- * @expanded:  Whether to expand the child rows
- *
- * Set whether a row, which has child rows, should be expanded.
- */
-void gnt_tree_set_expanded(GntTree *tree, void *key, gboolean expanded);
-
-/**
- * gnt_tree_set_show_separator:
- * @tree:  The tree
- * @set:   If %TRUE, the column separators are displayed
- *
- * Set whether to show column separators.
- */
-void gnt_tree_set_show_separator(GntTree *tree, gboolean set);
-
-/**
- * gnt_tree_sort_row:
- * @tree:  The tree
- * @row:   The row to sort
- *
- * Sort a row in the tree.
- *
- * See gnt_tree_set_compare_func().
- */
-void gnt_tree_sort_row(GntTree *tree, void *row);
-
-/**
- * gnt_tree_adjust_columns:
- * @tree:  The tree
- *
- * Automatically adjust the width of the columns in the tree.
- */
-void gnt_tree_adjust_columns(GntTree *tree);
-
-/**
- * gnt_tree_set_hash_fns:
- * @tree:  The tree
- * @hash:  The hashing function
- * @eq:    The function to compare keys
- * @kd:    The function to use to free the keys when a row is removed
- *              from the tree
- *
- * Set the hash functions to use to hash, compare and free the keys.
- */
-void gnt_tree_set_hash_fns(GntTree *tree, gpointer hash, gpointer eq, gpointer kd);
-
-/**
- * gnt_tree_set_column_visible:
- * @tree:  The tree
- * @col:   The index of the column
- * @vis:   If %FALSE, the column will not be displayed
- *
- * Set whether a column is visible or not.
- * 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);
-
-/**
- * gnt_tree_set_column_resizable:
- * @tree:  The tree
- * @col:   The index of the column
- * @res:   If %FALSE, the column will not be resized when the
- *              tree is resized
- *
- * Set whether a column can be resized to keep the same ratio when the
- * tree is resized.
- *
- * See gnt_tree_set_col_width(), gnt_tree_set_column_width_ratio().
- *
- * Since: 2.0.0 (gnt), 2.1.0 (pidgin)
- */
-void gnt_tree_set_column_resizable(GntTree *tree, int col, gboolean res);
-
-/**
- * gnt_tree_set_column_is_binary:
- * @tree:  The tree
- * @col:   The index of the column
- * @bin:   %TRUE if the data for the column is binary
- *
- * Set whether data in a column should be considered as binary data, and
- * not as strings. A column containing binary data will be display empty text.
- */
-void gnt_tree_set_column_is_binary(GntTree *tree, int col, gboolean bin);
-
-/**
- * gnt_tree_set_column_is_right_aligned:
- * @tree:  The tree
- * @col:   The index of the column
- * @right: %TRUE if the text in the column should be right aligned
- *
- * Set whether text in a column should be right-aligned.
- *
- * Since: 2.0.0 (gnt), 2.1.0 (pidgin)
- */
-void gnt_tree_set_column_is_right_aligned(GntTree *tree, int col, gboolean right);
-
-/**
- * gnt_tree_set_column_width_ratio:
- * @tree:   The tree
- * @cols:   Array of widths. The width must have the same number
- *               of entries as the number of columns in the tree, or
- *               end with a negative value for a column-width.
- *
- * Set column widths to use when calculating column widths after a tree
- * is resized.
- *
- * See gnt_tree_set_col_width(), gnt_tree_set_column_resizable().
- *
- * Since: 2.0.0 (gnt), 2.1.0 (pidgin)
- */
-void gnt_tree_set_column_width_ratio(GntTree *tree, int cols[]);
-
-/**
- * gnt_tree_set_search_column:
- * @tree:   The tree
- * @col:    The index of the column
- *
- * Set the column to use for typeahead searching.
- *
- * Since: 2.0.0 (gnt), 2.1.0 (pidgin)
- */
-void gnt_tree_set_search_column(GntTree *tree, int col);
-
-/**
- * gnt_tree_is_searching:
- * @tree:   The tree
- *
- * Check whether the user is currently in the middle of a search.
- *
- * Returns:  %TRUE if the user is searching, %FALSE otherwise.
- *
- * Since: 2.0.0 (gnt), 2.1.0 (pidgin)
- */
-gboolean gnt_tree_is_searching(GntTree *tree);
-
-/**
- * gnt_tree_set_search_function:
- * @tree:  The tree
- * @func:  The custom search function. The search function is
- *              sent the tree itself, the key of a row, the search
- *              string and the content of row in the search column.
- *              If the function returns %TRUE, the row is dislayed,
- *              otherwise it's not.
- *
- * Set a custom search function.
- *
- * Since: 2.0.0 (gnt), 2.1.0 (pidgin)
- */
-void gnt_tree_set_search_function(GntTree *tree,
-		gboolean (*func)(GntTree *tree, gpointer key, const char *search, const char *current));
-
-/**
- * gnt_tree_get_parent_key:
- * @tree:  The tree
- * @key:   The key for the row.
- *
- * Get the parent key for a row.
- *
- * Returns: (transfer none): The key of the parent row.
- *
- * Since: 2.4.0
- */
-gpointer gnt_tree_get_parent_key(GntTree *tree, gpointer key);
-
-G_END_DECLS
-
-#endif /* GNT_TREE_H */

mercurial