From 660a75cc995f416ecc018b6ee278582651240631 Mon Sep 17 00:00:00 2001 From: Christopher James Lahey Date: Fri, 4 Aug 2000 14:14:44 +0000 Subject: Made drag events calculate a row and column and signal that information. 2000-08-04 Christopher James Lahey * e-table-group-container.c, e-table-group-leaf.c, e-table-group.c, e-table-group.h, e-table-item.c, e-table-item.h: Made drag events calculate a row and column and signal that information. * e-table-selection-model.c, e-table-selection-model.h: Changed do_something to take a GdkModifierType. svn path=/trunk/; revision=4529 --- widgets/table/e-table-group-container.c | 26 ++++++++++++++++++++++ widgets/table/e-table-group-leaf.c | 8 +++++++ widgets/table/e-table-group.c | 11 ++++++++++ widgets/table/e-table-group.h | 6 ++++++ widgets/table/e-table-item.c | 30 +++++++++++++++++--------- widgets/table/e-table-item.h | 38 +++++++++++++++++++-------------- widgets/table/e-table-selection-model.c | 9 ++++---- widgets/table/e-table-selection-model.h | 3 +-- 8 files changed, 99 insertions(+), 32 deletions(-) (limited to 'widgets/table') diff --git a/widgets/table/e-table-group-container.c b/widgets/table/e-table-group-container.c index f3788f154f..dbf492d091 100644 --- a/widgets/table/e-table-group-container.c +++ b/widgets/table/e-table-group-container.c @@ -542,6 +542,31 @@ etgc_get_focus_column (ETableGroup *etg) return 0; } +static void +etgc_compute_location (ETableGroup *etg, int *x, int *y, int *row, int *col) +{ + ETableGroupContainer *etgc = E_TABLE_GROUP_CONTAINER(etg); + + if (row) + *row = -1; + if (col) + *col = -1; + + *x -= GROUP_INDENT; + *y -= TITLE_HEIGHT; + + if (*x >= 0 && *y >= 0 && etgc->children) { + GList *list; + for (list = etgc->children; list; list = list->next) { + ETableGroupContainerChildNode *child_node = (ETableGroupContainerChildNode *)list->data; + ETableGroup *child = child_node->child; + + e_table_group_compute_location (child, x, y, row, col); + if ((*row != -1) && (*col != -1)) + return; + } + } +} static void etgc_thaw (ETableGroup *etg) { @@ -684,6 +709,7 @@ etgc_class_init (GtkObjectClass *object_class) e_group_class->get_cursor_row = etgc_get_cursor_row; e_group_class->get_focus_column = etgc_get_focus_column; e_group_class->get_printable = etgc_get_printable; + e_group_class->compute_location = etgc_compute_location; gtk_object_add_arg_type ("ETableGroupContainer::drawgrid", GTK_TYPE_BOOL, GTK_ARG_WRITABLE, ARG_TABLE_DRAW_GRID); diff --git a/widgets/table/e-table-group-leaf.c b/widgets/table/e-table-group-leaf.c index f6b540cdae..fa52e91d9d 100644 --- a/widgets/table/e-table-group-leaf.c +++ b/widgets/table/e-table-group-leaf.c @@ -239,6 +239,13 @@ etgl_get_printable (ETableGroup *etg) return e_table_item_get_printable (etgl->item); } +static void +etgl_compute_location (ETableGroup *etg, int *x, int *y, int *row, int *col) +{ + ETableGroupLeaf *etgl = E_TABLE_GROUP_LEAF (etg); + e_table_item_compute_location (etgl->item, x, y, row, col); +} + static void etgl_set_arg (GtkObject *object, GtkArg *arg, guint arg_id) { @@ -362,6 +369,7 @@ etgl_class_init (GtkObjectClass *object_class) e_group_class->get_cursor_row = etgl_get_cursor_row; e_group_class->get_focus_column = etgl_get_focus_column; e_group_class->get_printable = etgl_get_printable; + e_group_class->compute_location = etgl_compute_location; gtk_object_add_arg_type ("ETableGroupLeaf::drawgrid", GTK_TYPE_BOOL, GTK_ARG_WRITABLE, ARG_TABLE_DRAW_GRID); diff --git a/widgets/table/e-table-group.c b/widgets/table/e-table-group.c index d3c6e2e08d..b47d01e151 100644 --- a/widgets/table/e-table-group.c +++ b/widgets/table/e-table-group.c @@ -238,6 +238,16 @@ e_table_group_get_printable (ETableGroup *etg) return NULL; } +void +e_table_group_compute_location (ETableGroup *etg, int *x, int *y, int *row, int *col) +{ + g_return_if_fail (etg != NULL); + g_return_if_fail (E_IS_TABLE_GROUP (etg)); + + if (ETG_CLASS (etg)->compute_location) + ETG_CLASS (etg)->compute_location (etg, x, y, row, col); +} + void e_table_group_cursor_change (ETableGroup *e_table_group, gint row) { @@ -355,6 +365,7 @@ etg_class_init (GtkObjectClass *object_class) klass->get_focus = etg_get_focus; klass->get_ecol = NULL; klass->get_printable = NULL; + klass->compute_location = NULL; etg_parent_class = gtk_type_class (PARENT_TYPE); diff --git a/widgets/table/e-table-group.h b/widgets/table/e-table-group.h index f4fd25a779..7714e18e9a 100644 --- a/widgets/table/e-table-group.h +++ b/widgets/table/e-table-group.h @@ -64,6 +64,7 @@ typedef struct { gint (*get_focus_column) (ETableGroup *etg); ETableCol *(*get_ecol) (ETableGroup *etg); EPrintable *(*get_printable) (ETableGroup *etg); + void (*compute_location) (ETableGroup *etg, int *x, int *y, int *row, int *col); } ETableGroupClass; @@ -89,6 +90,11 @@ gint e_table_group_get_focus_column (ETableGroup *etg); ETableHeader *e_table_group_get_header (ETableGroup *etg); ETableCol *e_table_group_get_ecol (ETableGroup *etg); EPrintable *e_table_group_get_printable (ETableGroup *etg); +void e_table_group_compute_location (ETableGroup *etg, + int *x, + int *y, + int *row, + int *col); ETableGroup *e_table_group_new (GnomeCanvasGroup *parent, ETableHeader *full_header, diff --git a/widgets/table/e-table-item.c b/widgets/table/e-table-item.c index 1ecd119133..baee6586f7 100644 --- a/widgets/table/e-table-item.c +++ b/widgets/table/e-table-item.c @@ -58,7 +58,7 @@ enum { static int eti_get_height (ETableItem *eti); static int eti_get_minimum_width (ETableItem *eti); static int eti_row_height (ETableItem *eti, int row); -static void e_table_item_focus (ETableItem *eti, int col, int row, gboolean shift_p, gboolean ctrl_p); +static void e_table_item_focus (ETableItem *eti, int col, int row, GdkModifierType state); static void eti_cursor_change (ETableSelectionModel *selection, int row, int col, ETableItem *eti); static void eti_selection_change (ETableSelectionModel *selection, ETableItem *eti); #if 0 @@ -924,7 +924,7 @@ eti_set_arg (GtkObject *o, GtkArg *arg, guint arg_id) "cursor_col", &cursor_col, NULL); - e_table_item_focus (eti, cursor_col != -1 ? cursor_col : 0, view_to_model_row(eti, GTK_VALUE_INT (*arg)), FALSE, FALSE); + e_table_item_focus (eti, cursor_col != -1 ? cursor_col : 0, view_to_model_row(eti, GTK_VALUE_INT (*arg)), 0); break; } eti->needs_redraw = 1; @@ -1314,7 +1314,7 @@ static void eti_cursor_move (ETableItem *eti, gint row, gint column) { e_table_item_leave_edit (eti); - e_table_item_focus (eti, view_to_model_col(eti, column), view_to_model_row(eti, row), FALSE, FALSE); + e_table_item_focus (eti, view_to_model_col(eti, column), view_to_model_row(eti, row), 0); } static void @@ -1377,8 +1377,6 @@ eti_event (GnomeCanvasItem *item, GdkEvent *e) case GDK_BUTTON_PRESS: { double x1, y1; int col, row; - gint shifted = e->button.state & GDK_SHIFT_MASK; - gint ctrled = e->button.state & GDK_CONTROL_MASK; gint cursor_row, cursor_col; e_canvas_item_grab_focus(GNOME_CANVAS_ITEM(eti)); @@ -1391,7 +1389,7 @@ eti_event (GnomeCanvasItem *item, GdkEvent *e) if (!find_cell (eti, e->button.x, e->button.y, &col, &row, &x1, &y1)) return TRUE; - e_table_selection_model_do_something(eti->selection, view_to_model_row(eti, row), view_to_model_col(eti, col), shifted, ctrled); + e_table_selection_model_do_something(eti->selection, view_to_model_row(eti, row), view_to_model_col(eti, col), e->button.state); gtk_object_get(GTK_OBJECT(eti->selection), "cursor_row", &cursor_row, @@ -1769,11 +1767,11 @@ e_table_item_get_type (void) void e_table_item_set_cursor (ETableItem *eti, int col, int row) { - e_table_item_focus(eti, col, view_to_model_row(eti, row), FALSE, FALSE); + e_table_item_focus(eti, col, view_to_model_row(eti, row), 0); } static void -e_table_item_focus (ETableItem *eti, int col, int row, gboolean shift_p, gboolean ctrl_p) +e_table_item_focus (ETableItem *eti, int col, int row, GdkModifierType state) { g_return_if_fail (eti != NULL); g_return_if_fail (E_IS_TABLE_ITEM (eti)); @@ -1789,8 +1787,7 @@ e_table_item_focus (ETableItem *eti, int col, int row, gboolean shift_p, gboolea if (row != -1) { e_table_selection_model_do_something(eti->selection, row, col, - shift_p, - ctrl_p); + state); } } @@ -1886,6 +1883,19 @@ e_table_item_leave_edit (ETableItem *eti) col, row, edit_ctx); } +void +e_table_item_compute_location (ETableItem *eti, + int *x, + int *y, + int *row, + int *col) +{ + if (!find_cell (eti, *x, *y, col, row, NULL, NULL)) { + *y -= eti_get_height(eti); + } + +} + typedef struct { ETableItem *item; int rows_printed; diff --git a/widgets/table/e-table-item.h b/widgets/table/e-table-item.h index b6b441c9d4..2d81bca758 100644 --- a/widgets/table/e-table-item.h +++ b/widgets/table/e-table-item.h @@ -108,30 +108,36 @@ GtkType e_table_item_get_type (void); /* * Focus */ -void e_table_item_set_cursor (ETableItem *eti, int col, int row); +void e_table_item_set_cursor (ETableItem *eti, int col, int row); -gint e_table_item_get_focused_column (ETableItem *eti); +gint e_table_item_get_focused_column (ETableItem *eti); /* * Handling the selection */ -gboolean e_table_item_is_row_selected (ETableItem *e_table_Item, - int row); +gboolean e_table_item_is_row_selected (ETableItem *e_table_Item, + int row); void e_table_item_selected_row_foreach (ETableItem *eti, ETableForeachFunc func, gpointer closure); - -void e_table_item_leave_edit (ETableItem *eti); -void e_table_item_enter_edit (ETableItem *eti, int col, int row); - -void e_table_item_redraw_range (ETableItem *eti, - int start_col, int start_row, - int end_col, int end_row); - -EPrintable *e_table_item_get_printable (ETableItem *eti); -void e_table_item_print_height (ETableItem *eti, - GnomePrintContext *context, - gdouble width); + +void e_table_item_leave_edit (ETableItem *eti); +void e_table_item_enter_edit (ETableItem *eti, int col, int row); + +void e_table_item_redraw_range (ETableItem *eti, + int start_col, int start_row, + int end_col, int end_row); + +EPrintable *e_table_item_get_printable (ETableItem *eti); +void e_table_item_print_height (ETableItem *eti, + GnomePrintContext *context, + gdouble width); +void e_table_item_compute_location (ETableItem *eti, + int *x, + int *y, + int *row, + int *col); + #endif /* _E_TABLE_ITEM_H_ */ diff --git a/widgets/table/e-table-selection-model.c b/widgets/table/e-table-selection-model.c index 6dbba501a1..9bd3cb38ac 100644 --- a/widgets/table/e-table-selection-model.c +++ b/widgets/table/e-table-selection-model.c @@ -195,11 +195,11 @@ etsm_set_arg (GtkObject *o, GtkArg *arg, guint arg_id) break; case ARG_CURSOR_ROW: - e_table_selection_model_do_something(etsm, GTK_VALUE_INT(*arg), etsm->cursor_col, FALSE, FALSE); + e_table_selection_model_do_something(etsm, GTK_VALUE_INT(*arg), etsm->cursor_col, 0); break; case ARG_CURSOR_COL: - e_table_selection_model_do_something(etsm, etsm->cursor_row, GTK_VALUE_INT(*arg), FALSE, FALSE); + e_table_selection_model_do_something(etsm, etsm->cursor_row, GTK_VALUE_INT(*arg), 0); break; } } @@ -321,9 +321,10 @@ change_selection(ETableSelectionModel *selection, int start, int end, gboolean g void e_table_selection_model_do_something (ETableSelectionModel *selection, guint row, guint col, - gboolean shift_p, - gboolean ctrl_p) + GdkModifierType state) { + gint shift_p = state & GDK_SHIFT_MASK; + gint ctrl_p = state & GDK_CONTROL_MASK; if (selection->row_count < 0) { if (selection->model) { selection->row_count = e_table_model_row_count(selection->model); diff --git a/widgets/table/e-table-selection-model.h b/widgets/table/e-table-selection-model.h index a0493c6c02..a1ccb41353 100644 --- a/widgets/table/e-table-selection-model.h +++ b/widgets/table/e-table-selection-model.h @@ -55,8 +55,7 @@ void e_table_selection_model_foreach (ETableSelectionModel * void e_table_selection_model_do_something (ETableSelectionModel *selection, guint row, guint col, - gboolean shift_p, - gboolean ctrl_p); + GdkModifierType state); void e_table_selection_model_clear (ETableSelectionModel *selection); ETableSelectionModel *e_table_selection_model_new (void); -- cgit