diff options
-rw-r--r-- | widgets/table/e-table.c | 17 | ||||
-rw-r--r-- | widgets/table/e-tree.c | 32 | ||||
-rw-r--r-- | widgets/table/e-tree.h | 228 |
3 files changed, 159 insertions, 118 deletions
diff --git a/widgets/table/e-table.c b/widgets/table/e-table.c index cb725c9a1f..3998f468cd 100644 --- a/widgets/table/e-table.c +++ b/widgets/table/e-table.c @@ -1523,15 +1523,16 @@ e_table_get_cell_at (ETable *table, } /** - * e_table_get_cell_at: - * @table: An ETable widget - * @x: X coordinate for the pixel - * @y: Y coordinate for the pixel - * @row_return: Pointer to return the row value - * @col_return: Pointer to return the column value + * e_table_get_cell_geometry: + * @table: The table. + * @row: The row to get the geometry of. + * @col: The col to get the geometry of. + * @x_return: Returns the x coordinate of the upper right hand corner of the cell with respect to the widget. + * @y_return: Returns the y coordinate of the upper right hand corner of the cell with respect to the widget. + * @width_return: Returns the width of the cell. + * @height_return: Returns the height of the cell. * - * Return the row and column for the cell in which the pixel at (@x, @y) is - * contained. + * Computes the data about this cell. **/ void e_table_get_cell_geometry (ETable *table, diff --git a/widgets/table/e-tree.c b/widgets/table/e-tree.c index dc76561848..cd6e90e4f6 100644 --- a/widgets/table/e-tree.c +++ b/widgets/table/e-tree.c @@ -1781,6 +1781,38 @@ e_tree_get_cell_at (ETree *tree, e_table_item_compute_location(E_TABLE_ITEM(tree->priv->item), &x, &y, row_return, col_return); } +/** + * e_tree_get_cell_geometry: + * @tree: The tree. + * @row: The row to get the geometry of. + * @col: The col to get the geometry of. + * @x_return: Returns the x coordinate of the upper right hand corner of the cell with respect to the widget. + * @y_return: Returns the y coordinate of the upper right hand corner of the cell with respect to the widget. + * @width_return: Returns the width of the cell. + * @height_return: Returns the height of the cell. + * + * Computes the data about this cell. + **/ +void +e_tree_get_cell_geometry (ETree *tree, + int row, int col, + int *x_return, int *y_return, + int *width_return, int *height_return) +{ + g_return_if_fail (tree != NULL); + g_return_if_fail (E_IS_TREE (tree)); + + /* FIXME it would be nice if it could handle a NULL row_return or + * col_return gracefully. */ + + e_table_item_get_cell_geometry(E_TABLE_ITEM(tree->priv->item), &row, &col, x_return, y_return, width_return, height_return); + + if (x_return) + (*x_return) -= GTK_LAYOUT(tree->priv->table_canvas)->hadjustment->value; + if (y_return) + (*y_return) -= GTK_LAYOUT(tree->priv->table_canvas)->vadjustment->value; +} + static void et_drag_begin (GtkWidget *widget, GdkDragContext *context, diff --git a/widgets/table/e-tree.h b/widgets/table/e-tree.h index 5559908e97..7ad9873d8b 100644 --- a/widgets/table/e-tree.h +++ b/widgets/table/e-tree.h @@ -5,15 +5,10 @@ #include <gtk/gtktable.h> #include <gnome-xml/tree.h> #include <libgnomeui/gnome-canvas.h> -#include <gal/e-table/e-table-header.h> -#include <gal/e-table/e-table-group.h> -#include <gal/e-table/e-table-sort-info.h> -#include <gal/e-table/e-table-item.h> #include <gal/widgets/e-printable.h> #include <gal/e-table/e-table-extras.h> -#include <gal/e-table/e-table-specification.h> #include <gal/e-table/e-table-state.h> #include <gal/e-table/e-tree-model.h> @@ -115,140 +110,153 @@ typedef struct { guint time); } ETreeClass; -GtkType e_tree_get_type (void); - -ETree *e_tree_construct (ETree *e_tree, - ETreeModel *etm, - ETableExtras *ete, - const char *spec, - const char *state); -GtkWidget *e_tree_new (ETreeModel *etm, - ETableExtras *ete, - const char *spec, - const char *state); +GtkType e_tree_get_type (void); +ETree *e_tree_construct (ETree *e_tree, + ETreeModel *etm, + ETableExtras *ete, + const char *spec, + const char *state); +GtkWidget *e_tree_new (ETreeModel *etm, + ETableExtras *ete, + const char *spec, + const char *state); /* Create an ETree using files. */ -ETree *e_tree_construct_from_spec_file (ETree *e_tree, - ETreeModel *etm, - ETableExtras *ete, - const char *spec_fn, - const char *state_fn); -GtkWidget *e_tree_new_from_spec_file (ETreeModel *etm, - ETableExtras *ete, - const char *spec_fn, - const char *state_fn); +ETree *e_tree_construct_from_spec_file (ETree *e_tree, + ETreeModel *etm, + ETableExtras *ete, + const char *spec_fn, + const char *state_fn); +GtkWidget *e_tree_new_from_spec_file (ETreeModel *etm, + ETableExtras *ete, + const char *spec_fn, + const char *state_fn); /* To save the state */ -gchar *e_tree_get_state (ETree *e_tree); -void e_tree_save_state (ETree *e_tree, - const gchar *filename); -ETableState *e_tree_get_state_object (ETree *e_tree); +gchar *e_tree_get_state (ETree *e_tree); +void e_tree_save_state (ETree *e_tree, + const gchar *filename); +ETableState *e_tree_get_state_object (ETree *e_tree); /* note that it is more efficient to provide the state at creation time */ -void e_tree_set_state (ETree *e_tree, - const gchar *state); -void e_tree_set_state_object (ETree *e_tree, - ETableState *state); -void e_tree_load_state (ETree *e_tree, - const gchar *filename); - -void e_tree_set_cursor (ETree *e_tree, - ETreePath path); +void e_tree_set_state (ETree *e_tree, + const gchar *state); +void e_tree_set_state_object (ETree *e_tree, + ETableState *state); +void e_tree_load_state (ETree *e_tree, + const gchar *filename); +void e_tree_set_cursor (ETree *e_tree, + ETreePath path); /* NULL means we don't have the cursor. */ -ETreePath e_tree_get_cursor (ETree *e_tree); -void e_tree_selected_row_foreach (ETree *e_tree, - EForeachFunc callback, - gpointer closure); +ETreePath e_tree_get_cursor (ETree *e_tree); +void e_tree_selected_row_foreach (ETree *e_tree, + EForeachFunc callback, + gpointer closure); #ifdef E_TREE_USE_TREE_SELECTION -void e_tree_selected_path_foreach (ETree *e_tree, - ETreeForeachFunc callback, - gpointer closure); +void e_tree_selected_path_foreach (ETree *e_tree, + ETreeForeachFunc callback, + gpointer closure); #endif -gint e_tree_selected_count (ETree *e_tree); -EPrintable *e_tree_get_printable (ETree *e_tree); +gint e_tree_selected_count (ETree *e_tree); +EPrintable *e_tree_get_printable (ETree *e_tree); +gint e_tree_get_next_row (ETree *e_tree, + gint model_row); +gint e_tree_get_prev_row (ETree *e_tree, + gint model_row); +gint e_tree_model_to_view_row (ETree *e_tree, + gint model_row); +gint e_tree_view_to_model_row (ETree *e_tree, + gint view_row); +void e_tree_get_cell_at (ETree *tree, + int x, + int y, + int *row_return, + int *col_return); +void e_tree_get_cell_geometry (ETree *tree, + int row, + int col, + int *x_return, + int *y_return, + int *width_return, + int *height_return); -gint e_tree_get_next_row (ETree *e_tree, - gint model_row); -gint e_tree_get_prev_row (ETree *e_tree, - gint model_row); - -gint e_tree_model_to_view_row (ETree *e_tree, - gint model_row); -gint e_tree_view_to_model_row (ETree *e_tree, - gint view_row); -void e_tree_get_cell_at (ETree *tree, - int x, int y, - int *row_return, int *col_return); /* Drag & drop stuff. */ /* Target */ -void e_tree_drag_get_data (ETree *tree, - int row, - int col, - GdkDragContext *context, - GdkAtom target, - guint32 time); -void e_tree_drag_highlight (ETree *tree, - int row, - int col); /* col == -1 to highlight entire row. */ -void e_tree_drag_unhighlight (ETree *tree); -void e_tree_drag_dest_set (ETree *tree, - GtkDestDefaults flags, - const GtkTargetEntry *targets, - gint n_targets, - GdkDragAction actions); -void e_tree_drag_dest_set_proxy (ETree *tree, - GdkWindow *proxy_window, - GdkDragProtocol protocol, - gboolean use_coordinates); +void e_tree_drag_get_data (ETree *tree, + int row, + int col, + GdkDragContext *context, + GdkAtom target, + guint32 time); +void e_tree_drag_highlight (ETree *tree, + int row, + int col); /* col == -1 to highlight entire row. */ +void e_tree_drag_unhighlight (ETree *tree); +void e_tree_drag_dest_set (ETree *tree, + GtkDestDefaults flags, + const GtkTargetEntry *targets, + gint n_targets, + GdkDragAction actions); +void e_tree_drag_dest_set_proxy (ETree *tree, + GdkWindow *proxy_window, + GdkDragProtocol protocol, + gboolean use_coordinates); /* There probably should be functions for setting the targets * as a GtkTargetList */ -void e_tree_drag_dest_unset (GtkWidget *widget); +void e_tree_drag_dest_unset (GtkWidget *widget); /* Source side */ -void e_tree_drag_source_set (ETree *tree, - GdkModifierType start_button_mask, - const GtkTargetEntry *targets, - gint n_targets, - GdkDragAction actions); -void e_tree_drag_source_unset (ETree *tree); +void e_tree_drag_source_set (ETree *tree, + GdkModifierType start_button_mask, + const GtkTargetEntry *targets, + gint n_targets, + GdkDragAction actions); +void e_tree_drag_source_unset (ETree *tree); /* There probably should be functions for setting the targets * as a GtkTargetList */ -GdkDragContext *e_tree_drag_begin (ETree *tree, - int row, - int col, - GtkTargetList *targets, - GdkDragAction actions, - gint button, - GdkEvent *event); +GdkDragContext *e_tree_drag_begin (ETree *tree, + int row, + int col, + GtkTargetList *targets, + GdkDragAction actions, + gint button, + GdkEvent *event); /* selection stuff */ -void e_tree_select_all (ETree *tree); -void e_tree_invert_selection (ETree *tree); +void e_tree_select_all (ETree *tree); +void e_tree_invert_selection (ETree *tree); /* Adapter functions */ - -gboolean e_tree_node_is_expanded (ETree *et, ETreePath path); -void e_tree_node_set_expanded (ETree *et, ETreePath path, gboolean expanded); -void e_tree_node_set_expanded_recurse (ETree *et, ETreePath path, gboolean expanded); -void e_tree_root_node_set_visible (ETree *et, gboolean visible); -ETreePath e_tree_node_at_row (ETree *et, int row); -int e_tree_row_of_node (ETree *et, ETreePath path); -gboolean e_tree_root_node_is_visible(ETree *et); - -void e_tree_show_node (ETree *et, ETreePath path); - -void e_tree_save_expanded_state (ETree *et, char *filename); -void e_tree_load_expanded_state (ETree *et, char *filename); - -int e_tree_row_count (ETree *et); -GtkWidget *e_tree_get_tooltip (ETree *et); +gboolean e_tree_node_is_expanded (ETree *et, + ETreePath path); +void e_tree_node_set_expanded (ETree *et, + ETreePath path, + gboolean expanded); +void e_tree_node_set_expanded_recurse (ETree *et, + ETreePath path, + gboolean expanded); +void e_tree_root_node_set_visible (ETree *et, + gboolean visible); +ETreePath e_tree_node_at_row (ETree *et, + int row); +int e_tree_row_of_node (ETree *et, + ETreePath path); +gboolean e_tree_root_node_is_visible (ETree *et); +void e_tree_show_node (ETree *et, + ETreePath path); +void e_tree_save_expanded_state (ETree *et, + char *filename); +void e_tree_load_expanded_state (ETree *et, + char *filename); +int e_tree_row_count (ETree *et); +GtkWidget *e_tree_get_tooltip (ETree *et); END_GNOME_DECLS |