diff options
Diffstat (limited to 'widgets/table')
-rw-r--r-- | widgets/table/e-table-selection-model.c | 26 | ||||
-rw-r--r-- | widgets/table/e-table-selection-model.h | 1 |
2 files changed, 27 insertions, 0 deletions
diff --git a/widgets/table/e-table-selection-model.c b/widgets/table/e-table-selection-model.c index 09b1d6bf93..9079ce8623 100644 --- a/widgets/table/e-table-selection-model.c +++ b/widgets/table/e-table-selection-model.c @@ -472,3 +472,29 @@ e_table_selection_model_clear(ETableSelectionModel *selection) gtk_signal_emit(GTK_OBJECT(selection), e_table_selection_model_signals [SELECTION_CHANGED]); } + +#define PART(x,n) (((x) & (0x01010101 << n)) >> n) +#define SECTION(x, n) (((x) >> (n * 8)) & 0xff) + +gint +e_table_selection_model_selected_count (ETableSelectionModel *selection) +{ + gint count; + int i; + int last; + + count = 0; + + last = BOX(selection->row_count - 1); + + for (i = 0; i <= last; i++) { + int j; + guint32 thiscount = 0; + for (j = 0; j < 8; j++) + thiscount += PART(selection->selection[i], j); + for (j = 0; j < 4; j++) + count += SECTION(thiscount, j); + } + + return count; +} diff --git a/widgets/table/e-table-selection-model.h b/widgets/table/e-table-selection-model.h index 6b57ab56f0..6d7b25ed3d 100644 --- a/widgets/table/e-table-selection-model.h +++ b/widgets/table/e-table-selection-model.h @@ -63,6 +63,7 @@ void e_table_selection_model_maybe_do_something (ETableSelectionM guint col, GdkModifierType state); void e_table_selection_model_clear (ETableSelectionModel *selection); +gint e_table_selection_model_selected_count (ETableSelectionModel *selection); ETableSelectionModel *e_table_selection_model_new (void); |