aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--widgets/table/e-table.c17
-rw-r--r--widgets/table/e-tree.c32
-rw-r--r--widgets/table/e-tree.h228
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