diff options
Diffstat (limited to 'widgets/table')
-rw-r--r-- | widgets/table/e-table-group-container.c | 17 | ||||
-rw-r--r-- | widgets/table/e-table-group-leaf.c | 12 | ||||
-rw-r--r-- | widgets/table/e-table-group.c | 21 | ||||
-rw-r--r-- | widgets/table/e-table-group.h | 2 | ||||
-rw-r--r-- | widgets/table/e-table-item.c | 6 | ||||
-rw-r--r-- | widgets/table/e-table.c | 6 | ||||
-rw-r--r-- | widgets/table/e-table.h | 2 |
7 files changed, 62 insertions, 4 deletions
diff --git a/widgets/table/e-table-group-container.c b/widgets/table/e-table-group-container.c index 900edb023f..04ddb011c1 100644 --- a/widgets/table/e-table-group-container.c +++ b/widgets/table/e-table-group-container.c @@ -469,6 +469,22 @@ etgc_select_row (ETableGroup *etg, gint row) } } +static int +etgc_get_selected_view_row (ETableGroup *etg) +{ + ETableGroupContainer *etgc = E_TABLE_GROUP_CONTAINER(etg); + GList *list; + int count = 0; + for (list = etgc->children; list; list = g_list_next(list)) { + ETableGroup *group = ((ETableGroupContainerChildNode *)list->data)->child; + int row = e_table_group_get_selected_view_row(group); + if (row != -1) + return count + row; + count += e_table_group_row_count(group); + } + return -1; +} + static void etgc_set_focus (ETableGroup *etg, EFocus direction, gint view_col) { @@ -633,6 +649,7 @@ etgc_class_init (GtkObjectClass *object_class) e_group_class->row_count = etgc_row_count; e_group_class->set_focus = etgc_set_focus; e_group_class->select_row = etgc_select_row; + e_group_class->get_selected_view_row = etgc_get_selected_view_row; e_group_class->unfocus = etgc_unfocus; e_group_class->get_focus_column = etgc_get_focus_column; diff --git a/widgets/table/e-table-group-leaf.c b/widgets/table/e-table-group-leaf.c index 50241f9990..29273c4f73 100644 --- a/widgets/table/e-table-group-leaf.c +++ b/widgets/table/e-table-group-leaf.c @@ -198,6 +198,17 @@ etgl_select_row (ETableGroup *etg, gint row) e_table_item_focus(etgl->item, 0, row); } +static int +etgl_get_selected_view_row (ETableGroup *etg) +{ + ETableGroupLeaf *etgl = E_TABLE_GROUP_LEAF (etg); + int row; + gtk_object_get(GTK_OBJECT(etgl->item), + "cursor_row", &row, + NULL); + return row; +} + static void etgl_unfocus (ETableGroup *etg) { @@ -321,6 +332,7 @@ etgl_class_init (GtkObjectClass *object_class) e_group_class->set_focus = etgl_set_focus; e_group_class->select_row = etgl_select_row; e_group_class->unfocus = etgl_unfocus; + e_group_class->get_selected_view_row = etgl_get_selected_view_row; e_group_class->get_focus_column = etgl_get_focus_column; gtk_object_add_arg_type ("ETableGroupLeaf::drawgrid", GTK_TYPE_BOOL, diff --git a/widgets/table/e-table-group.c b/widgets/table/e-table-group.c index 4258640a97..2e7f94bb1f 100644 --- a/widgets/table/e-table-group.c +++ b/widgets/table/e-table-group.c @@ -180,6 +180,18 @@ e_table_group_select_row (ETableGroup *etg, ETG_CLASS (etg)->select_row (etg, row); } +int +e_table_group_get_selected_view_row (ETableGroup *etg) +{ + g_return_val_if_fail (etg != NULL, -1); + g_return_val_if_fail (E_IS_TABLE_GROUP (etg), -1); + + if (ETG_CLASS (etg)->get_selected_view_row) + return ETG_CLASS (etg)->get_selected_view_row (etg); + else + return -1; +} + void e_table_group_unfocus (ETableGroup *etg) { @@ -314,11 +326,12 @@ etg_class_init (GtkObjectClass *object_class) klass->add = NULL; klass->add_all = NULL; klass->remove = NULL; - klass->get_count = NULL; - klass->row_count = NULL; - klass->increment = NULL; - klass->set_focus = NULL; + klass->get_count = NULL; + klass->row_count = NULL; + klass->increment = NULL; + klass->set_focus = NULL; klass->select_row = NULL; + klass->get_selected_view_row = NULL; klass->unfocus = NULL; klass->get_focus = etg_get_focus; klass->get_ecol = NULL; diff --git a/widgets/table/e-table-group.h b/widgets/table/e-table-group.h index 3389cee984..22e2a3dc8e 100644 --- a/widgets/table/e-table-group.h +++ b/widgets/table/e-table-group.h @@ -56,6 +56,7 @@ typedef struct { void (*increment) (ETableGroup *etg, gint position, gint amount); void (*set_focus) (ETableGroup *etg, EFocus direction, gint view_col); void (*select_row) (ETableGroup *etg, gint row); + int (*get_selected_view_row) (ETableGroup *etg); void (*unfocus) (ETableGroup *etg); gboolean (*get_focus) (ETableGroup *etg); gint (*get_focus_column) (ETableGroup *etg); @@ -78,6 +79,7 @@ void e_table_group_set_focus (ETableGroup *etg, gint view_col); void e_table_group_select_row (ETableGroup *etg, gint row); +int e_table_group_get_selected_view_row (ETableGroup *etg); void e_table_group_unfocus (ETableGroup *etg); gboolean e_table_group_get_focus (ETableGroup *etg); gint e_table_group_get_focus_column (ETableGroup *etg); diff --git a/widgets/table/e-table-item.c b/widgets/table/e-table-item.c index 42a91ee2c3..1a10363fcc 100644 --- a/widgets/table/e-table-item.c +++ b/widgets/table/e-table-item.c @@ -45,6 +45,7 @@ enum { ARG_CURSOR_MODE, ARG_LENGTH_THRESHOLD, ARG_HAS_CURSOR, + ARG_CURSOR_ROW, ARG_MINIMUM_WIDTH, ARG_WIDTH, @@ -793,6 +794,9 @@ eti_get_arg (GtkObject *o, GtkArg *arg, guint arg_id) case ARG_HAS_CURSOR: GTK_VALUE_BOOL (*arg) = (eti->cursor_row != -1); break; + case ARG_CURSOR_ROW: + GTK_VALUE_INT (*arg) = eti->cursor_row; + break; default: arg->type = GTK_TYPE_INVALID; } @@ -1406,6 +1410,8 @@ eti_class_init (GtkObjectClass *object_class) GTK_ARG_READABLE, ARG_HEIGHT); gtk_object_add_arg_type ("ETableItem::has_cursor", GTK_TYPE_BOOL, GTK_ARG_READWRITE, ARG_HAS_CURSOR); + gtk_object_add_arg_type ("ETableItem::has_cursor", GTK_TYPE_INT, + GTK_ARG_READABLE, ARG_CURSOR_ROW); eti_signals [ROW_SELECTION] = gtk_signal_new ("row_selection", diff --git a/widgets/table/e-table.c b/widgets/table/e-table.c index 25095db72d..bf3aaa71cb 100644 --- a/widgets/table/e-table.c +++ b/widgets/table/e-table.c @@ -645,6 +645,12 @@ e_table_select_row (ETable *e_table, int row) e_table_group_select_row(e_table->group, row); } +int +e_table_get_selected_view_row (ETable *e_table) +{ + return e_table_group_get_selected_view_row(e_table->group); +} + static void et_get_arg (GtkObject *o, GtkArg *arg, guint arg_id) { diff --git a/widgets/table/e-table.h b/widgets/table/e-table.h index 52ba005dc2..cba2919669 100644 --- a/widgets/table/e-table.h +++ b/widgets/table/e-table.h @@ -84,6 +84,8 @@ void e_table_save_specification (ETable *e_table, gchar *filename); void e_table_select_row (ETable *e_table, int row); +/* -1 means no selection. */ +int e_table_get_selected_view_row (ETable *e_table); END_GNOME_DECLS |