diff options
author | Matthew Barnes <mbarnes@redhat.com> | 2013-06-18 21:25:40 +0800 |
---|---|---|
committer | Matthew Barnes <mbarnes@redhat.com> | 2013-06-19 08:31:50 +0800 |
commit | c6ccd45a0ef07b12a0313deb3abee032d89eec0a (patch) | |
tree | 41f67ea66ada4bf9a1b109236194386dc1292f7e /e-util/e-table-subset.c | |
parent | 96acf4fa41260e7917ae1a794bb4b636e6c398cc (diff) | |
download | gsoc2013-evolution-c6ccd45a0ef07b12a0313deb3abee032d89eec0a.tar gsoc2013-evolution-c6ccd45a0ef07b12a0313deb3abee032d89eec0a.tar.gz gsoc2013-evolution-c6ccd45a0ef07b12a0313deb3abee032d89eec0a.tar.bz2 gsoc2013-evolution-c6ccd45a0ef07b12a0313deb3abee032d89eec0a.tar.lz gsoc2013-evolution-c6ccd45a0ef07b12a0313deb3abee032d89eec0a.tar.xz gsoc2013-evolution-c6ccd45a0ef07b12a0313deb3abee032d89eec0a.tar.zst gsoc2013-evolution-c6ccd45a0ef07b12a0313deb3abee032d89eec0a.zip |
ETable-related cleanups.
Diffstat (limited to 'e-util/e-table-subset.c')
-rw-r--r-- | e-util/e-table-subset.c | 748 |
1 files changed, 423 insertions, 325 deletions
diff --git a/e-util/e-table-subset.c b/e-util/e-table-subset.c index 88532d03bd..92f71cedde 100644 --- a/e-util/e-table-subset.c +++ b/e-util/e-table-subset.c @@ -30,76 +30,63 @@ #include "e-table-subset.h" -static void etss_proxy_model_pre_change_real - (ETableSubset *etss, - ETableModel *etm); -static void etss_proxy_model_no_change_real (ETableSubset *etss, - ETableModel *etm); -static void etss_proxy_model_changed_real (ETableSubset *etss, - ETableModel *etm); -static void etss_proxy_model_row_changed_real - (ETableSubset *etss, - ETableModel *etm, - gint row); -static void etss_proxy_model_cell_changed_real - (ETableSubset *etss, - ETableModel *etm, - gint col, - gint row); -static void etss_proxy_model_rows_inserted_real - (ETableSubset *etss, - ETableModel *etm, - gint row, - gint count); -static void etss_proxy_model_rows_deleted_real - (ETableSubset *etss, - ETableModel *etm, - gint row, - gint count); +#define E_TABLE_SUBSET_GET_PRIVATE(obj) \ + (G_TYPE_INSTANCE_GET_PRIVATE \ + ((obj), E_TYPE_TABLE_SUBSET, ETableSubsetPrivate)) + +#define VALID_ROW(table_subset, row) \ + (row >= -1 && row < table_subset->n_map) +#define MAP_ROW(table_subset, row) \ + (row == -1 ? -1 : table_subset->map_table[row]) #define d(x) -/* workaround for avoding API breakage */ -#define etss_get_type e_table_subset_get_type -G_DEFINE_TYPE (ETableSubset, etss, E_TYPE_TABLE_MODEL) +struct _ETableSubsetPrivate { + ETableModel *source_model; + gulong table_model_pre_change_handler_id; + gulong table_model_no_change_handler_id; + gulong table_model_changed_handler_id; + gulong table_model_row_changed_handler_id; + gulong table_model_cell_changed_handler_id; + gulong table_model_rows_inserted_handler_id; + gulong table_model_rows_deleted_handler_id; -#define ETSS_CLASS(object) (E_TABLE_SUBSET_GET_CLASS(object)) + gint last_access; +}; -#define VALID_ROW(etss, row) (row >= -1 && row < etss->n_map) -#define MAP_ROW(etss, row) (row == -1 ? -1 : etss->map_table[row]) +G_DEFINE_TYPE (ETableSubset, e_table_subset, E_TYPE_TABLE_MODEL) static gint -etss_get_view_row (ETableSubset *etss, - gint row) +table_subset_get_view_row (ETableSubset *table_subset, + gint row) { - const gint n = etss->n_map; - const gint * const map_table = etss->map_table; + const gint n = table_subset->n_map; + const gint * const map_table = table_subset->map_table; gint i; - gint end = MIN (etss->n_map, etss->last_access + 10); - gint start = MAX (0, etss->last_access - 10); - gint initial = MAX (MIN (etss->last_access, end), start); + gint end = MIN ( + table_subset->n_map, + table_subset->priv->last_access + 10); + gint start = MAX (0, table_subset->priv->last_access - 10); + gint initial = MAX (MIN (table_subset->priv->last_access, end), start); for (i = initial; i < end; i++) { if (map_table[i] == row) { - d (g_print ("a) Found %d from %d\n", i, etss->last_access)); - etss->last_access = i; + table_subset->priv->last_access = i; return i; } } for (i = initial - 1; i >= start; i--) { if (map_table[i] == row) { - d (g_print ("b) Found %d from %d\n", i, etss->last_access)); - etss->last_access = i; + table_subset->priv->last_access = i; return i; } } for (i = 0; i < n; i++) { if (map_table[i] == row) { - d (g_print ("c) Found %d from %d\n", i, etss->last_access)); - etss->last_access = i; + table_subset->priv->last_access = i; return i; } } @@ -107,461 +94,572 @@ etss_get_view_row (ETableSubset *etss, } static void -etss_dispose (GObject *object) +table_subset_dispose (GObject *object) { - ETableSubset *etss = E_TABLE_SUBSET (object); + ETableSubsetPrivate *priv; + + priv = E_TABLE_SUBSET_GET_PRIVATE (object); - if (etss->source) { + if (priv->table_model_pre_change_handler_id > 0) { g_signal_handler_disconnect ( - etss->source, - etss->table_model_pre_change_id); + priv->source_model, + priv->table_model_pre_change_handler_id); + priv->table_model_pre_change_handler_id = 0; + } + + if (priv->table_model_no_change_handler_id > 0) { g_signal_handler_disconnect ( - etss->source, - etss->table_model_no_change_id); + priv->source_model, + priv->table_model_no_change_handler_id); + priv->table_model_no_change_handler_id = 0; + } + + if (priv->table_model_changed_handler_id > 0) { g_signal_handler_disconnect ( - etss->source, - etss->table_model_changed_id); + priv->source_model, + priv->table_model_changed_handler_id); + priv->table_model_changed_handler_id = 0; + } + + if (priv->table_model_row_changed_handler_id > 0) { g_signal_handler_disconnect ( - etss->source, - etss->table_model_row_changed_id); + priv->source_model, + priv->table_model_row_changed_handler_id); + priv->table_model_row_changed_handler_id = 0; + } + + if (priv->table_model_cell_changed_handler_id > 0) { g_signal_handler_disconnect ( - etss->source, - etss->table_model_cell_changed_id); + priv->source_model, + priv->table_model_cell_changed_handler_id); + priv->table_model_cell_changed_handler_id = 0; + } + + if (priv->table_model_rows_inserted_handler_id > 0) { g_signal_handler_disconnect ( - etss->source, - etss->table_model_rows_inserted_id); + priv->source_model, + priv->table_model_rows_inserted_handler_id); + priv->table_model_rows_inserted_handler_id = 0; + } + + if (priv->table_model_rows_deleted_handler_id > 0) { g_signal_handler_disconnect ( - etss->source, - etss->table_model_rows_deleted_id); + priv->source_model, + priv->table_model_rows_deleted_handler_id); + priv->table_model_rows_deleted_handler_id = 0; + } - g_object_unref (etss->source); - etss->source = NULL; + g_clear_object (&priv->source_model); - etss->table_model_changed_id = 0; - etss->table_model_row_changed_id = 0; - etss->table_model_cell_changed_id = 0; - etss->table_model_rows_inserted_id = 0; - etss->table_model_rows_deleted_id = 0; - } + /* Chain up to parent's dispose() method. */ + G_OBJECT_CLASS (e_table_subset_parent_class)->dispose (object); +} + +static void +table_subset_finalize (GObject *object) +{ + ETableSubset *table_subset; + + table_subset = E_TABLE_SUBSET (object); + + g_free (table_subset->map_table); + + /* Chain up to parent's finalize() method. */ + G_OBJECT_CLASS (e_table_subset_parent_class)->finalize (object); +} + +static void +table_subset_proxy_model_pre_change_real (ETableSubset *table_subset, + ETableModel *source_model) +{ + e_table_model_pre_change (E_TABLE_MODEL (table_subset)); +} - G_OBJECT_CLASS (etss_parent_class)->dispose (object); +static void +table_subset_proxy_model_no_change_real (ETableSubset *table_subset, + ETableModel *source_model) +{ + e_table_model_no_change (E_TABLE_MODEL (table_subset)); +} + +static void +table_subset_proxy_model_changed_real (ETableSubset *table_subset, + ETableModel *source_model) +{ + e_table_model_changed (E_TABLE_MODEL (table_subset)); +} + +static void +table_subset_proxy_model_row_changed_real (ETableSubset *table_subset, + ETableModel *source_model, + gint row) +{ + gint view_row = table_subset_get_view_row (table_subset, row); + + if (view_row != -1) + e_table_model_row_changed ( + E_TABLE_MODEL (table_subset), view_row); + else + e_table_model_no_change (E_TABLE_MODEL (table_subset)); } static void -etss_finalize (GObject *object) +table_subset_proxy_model_cell_changed_real (ETableSubset *table_subset, + ETableModel *source_model, + gint col, + gint row) { - ETableSubset *etss = E_TABLE_SUBSET (object); + gint view_row = table_subset_get_view_row (table_subset, row); + + if (view_row != -1) + e_table_model_cell_changed ( + E_TABLE_MODEL (table_subset), col, view_row); + else + e_table_model_no_change (E_TABLE_MODEL (table_subset)); +} - g_free (etss->map_table); - etss->map_table = NULL; +static void +table_subset_proxy_model_rows_inserted_real (ETableSubset *table_subset, + ETableModel *source_model, + gint row, + gint count) +{ + e_table_model_no_change (E_TABLE_MODEL (table_subset)); +} - G_OBJECT_CLASS (etss_parent_class)->finalize (object); +static void +table_subset_proxy_model_rows_deleted_real (ETableSubset *table_subset, + ETableModel *source_model, + gint row, + gint count) +{ + e_table_model_no_change (E_TABLE_MODEL (table_subset)); } static gint -etss_column_count (ETableModel *etm) +table_subset_column_count (ETableModel *table_model) { - ETableSubset *etss = (ETableSubset *) etm; + ETableSubset *table_subset = (ETableSubset *) table_model; - return e_table_model_column_count (etss->source); + return e_table_model_column_count (table_subset->priv->source_model); } static gint -etss_row_count (ETableModel *etm) +table_subset_row_count (ETableModel *table_model) { - ETableSubset *etss = (ETableSubset *) etm; + ETableSubset *table_subset = (ETableSubset *) table_model; - return etss->n_map; + return table_subset->n_map; } static gpointer -etss_value_at (ETableModel *etm, - gint col, - gint row) +table_subset_value_at (ETableModel *table_model, + gint col, + gint row) { - ETableSubset *etss = (ETableSubset *) etm; + ETableSubset *table_subset = (ETableSubset *) table_model; + + g_return_val_if_fail (VALID_ROW (table_subset, row), NULL); - g_return_val_if_fail (VALID_ROW (etss, row), NULL); + table_subset->priv->last_access = row; - etss->last_access = row; - d (g_print ("g) Setting last_access to %d\n", row)); - return e_table_model_value_at (etss->source, col, MAP_ROW (etss, row)); + return e_table_model_value_at ( + table_subset->priv->source_model, + col, MAP_ROW (table_subset, row)); } static void -etss_set_value_at (ETableModel *etm, - gint col, - gint row, - gconstpointer val) +table_subset_set_value_at (ETableModel *table_model, + gint col, + gint row, + gconstpointer val) { - ETableSubset *etss = (ETableSubset *) etm; + ETableSubset *table_subset = (ETableSubset *) table_model; - g_return_if_fail (VALID_ROW (etss, row)); + g_return_if_fail (VALID_ROW (table_subset, row)); - etss->last_access = row; - d (g_print ("h) Setting last_access to %d\n", row)); - e_table_model_set_value_at (etss->source, col, MAP_ROW (etss, row), val); + table_subset->priv->last_access = row; + + e_table_model_set_value_at ( + table_subset->priv->source_model, + col, MAP_ROW (table_subset, row), val); } static gboolean -etss_is_cell_editable (ETableModel *etm, - gint col, - gint row) +table_subset_is_cell_editable (ETableModel *table_model, + gint col, + gint row) { - ETableSubset *etss = (ETableSubset *) etm; + ETableSubset *table_subset = (ETableSubset *) table_model; - g_return_val_if_fail (VALID_ROW (etss, row), FALSE); + g_return_val_if_fail (VALID_ROW (table_subset, row), FALSE); - return e_table_model_is_cell_editable (etss->source, col, MAP_ROW (etss, row)); + return e_table_model_is_cell_editable ( + table_subset->priv->source_model, + col, MAP_ROW (table_subset, row)); } static gboolean -etss_has_save_id (ETableModel *etm) +table_subset_has_save_id (ETableModel *table_model) { return TRUE; } static gchar * -etss_get_save_id (ETableModel *etm, - gint row) +table_subset_get_save_id (ETableModel *table_model, + gint row) { - ETableSubset *etss = (ETableSubset *) etm; + ETableSubset *table_subset = (ETableSubset *) table_model; - g_return_val_if_fail (VALID_ROW (etss, row), NULL); + g_return_val_if_fail (VALID_ROW (table_subset, row), NULL); - if (e_table_model_has_save_id (etss->source)) - return e_table_model_get_save_id (etss->source, MAP_ROW (etss, row)); + if (e_table_model_has_save_id (table_subset->priv->source_model)) + return e_table_model_get_save_id ( + table_subset->priv->source_model, + MAP_ROW (table_subset, row)); else - return g_strdup_printf ("%d", MAP_ROW (etss, row)); + return g_strdup_printf ("%d", MAP_ROW (table_subset, row)); } static void -etss_append_row (ETableModel *etm, - ETableModel *source, - gint row) +table_subset_append_row (ETableModel *table_model, + ETableModel *source, + gint row) { - ETableSubset *etss = (ETableSubset *) etm; - e_table_model_append_row (etss->source, source, row); + ETableSubset *table_subset = (ETableSubset *) table_model; + + e_table_model_append_row ( + table_subset->priv->source_model, source, row); } static gpointer -etss_duplicate_value (ETableModel *etm, - gint col, - gconstpointer value) +table_subset_duplicate_value (ETableModel *table_model, + gint col, + gconstpointer value) { - ETableSubset *etss = (ETableSubset *) etm; + ETableSubset *table_subset = (ETableSubset *) table_model; - return e_table_model_duplicate_value (etss->source, col, value); + return e_table_model_duplicate_value ( + table_subset->priv->source_model, col, value); } static void -etss_free_value (ETableModel *etm, - gint col, - gpointer value) +table_subset_free_value (ETableModel *table_model, + gint col, + gpointer value) { - ETableSubset *etss = (ETableSubset *) etm; + ETableSubset *table_subset = (ETableSubset *) table_model; - e_table_model_free_value (etss->source, col, value); + e_table_model_free_value ( + table_subset->priv->source_model, col, value); } static gpointer -etss_initialize_value (ETableModel *etm, - gint col) +table_subset_initialize_value (ETableModel *table_model, + gint col) { - ETableSubset *etss = (ETableSubset *) etm; + ETableSubset *table_subset = (ETableSubset *) table_model; - return e_table_model_initialize_value (etss->source, col); + return e_table_model_initialize_value ( + table_subset->priv->source_model, col); } static gboolean -etss_value_is_empty (ETableModel *etm, - gint col, - gconstpointer value) +table_subset_value_is_empty (ETableModel *table_model, + gint col, + gconstpointer value) { - ETableSubset *etss = (ETableSubset *) etm; + ETableSubset *table_subset = (ETableSubset *) table_model; - return e_table_model_value_is_empty (etss->source, col, value); + return e_table_model_value_is_empty ( + table_subset->priv->source_model, col, value); } static gchar * -etss_value_to_string (ETableModel *etm, - gint col, - gconstpointer value) +table_subset_value_to_string (ETableModel *table_model, + gint col, + gconstpointer value) { - ETableSubset *etss = (ETableSubset *) etm; + ETableSubset *table_subset = (ETableSubset *) table_model; - return e_table_model_value_to_string (etss->source, col, value); + return e_table_model_value_to_string ( + table_subset->priv->source_model, col, value); } static void -etss_class_init (ETableSubsetClass *class) -{ - ETableModelClass *table_class = E_TABLE_MODEL_CLASS (class); - GObjectClass *object_class = G_OBJECT_CLASS (class); - - object_class->dispose = etss_dispose; - object_class->finalize = etss_finalize; - - table_class->column_count = etss_column_count; - table_class->row_count = etss_row_count; - table_class->append_row = etss_append_row; - - table_class->value_at = etss_value_at; - table_class->set_value_at = etss_set_value_at; - table_class->is_cell_editable = etss_is_cell_editable; - - table_class->has_save_id = etss_has_save_id; - table_class->get_save_id = etss_get_save_id; - - table_class->duplicate_value = etss_duplicate_value; - table_class->free_value = etss_free_value; - table_class->initialize_value = etss_initialize_value; - table_class->value_is_empty = etss_value_is_empty; - table_class->value_to_string = etss_value_to_string; - - class->proxy_model_pre_change = etss_proxy_model_pre_change_real; - class->proxy_model_no_change = etss_proxy_model_no_change_real; - class->proxy_model_changed = etss_proxy_model_changed_real; - class->proxy_model_row_changed = etss_proxy_model_row_changed_real; - class->proxy_model_cell_changed = etss_proxy_model_cell_changed_real; - class->proxy_model_rows_inserted = etss_proxy_model_rows_inserted_real; - class->proxy_model_rows_deleted = etss_proxy_model_rows_deleted_real; +e_table_subset_class_init (ETableSubsetClass *class) +{ + GObjectClass *object_class; + ETableModelClass *table_class; + + g_type_class_add_private (class, sizeof (ETableSubsetPrivate)); + + object_class = G_OBJECT_CLASS (class); + object_class->dispose = table_subset_dispose; + object_class->finalize = table_subset_finalize; + + table_class = E_TABLE_MODEL_CLASS (class); + table_class->column_count = table_subset_column_count; + table_class->row_count = table_subset_row_count; + table_class->append_row = table_subset_append_row; + table_class->value_at = table_subset_value_at; + table_class->set_value_at = table_subset_set_value_at; + table_class->is_cell_editable = table_subset_is_cell_editable; + table_class->has_save_id = table_subset_has_save_id; + table_class->get_save_id = table_subset_get_save_id; + table_class->duplicate_value = table_subset_duplicate_value; + table_class->free_value = table_subset_free_value; + table_class->initialize_value = table_subset_initialize_value; + table_class->value_is_empty = table_subset_value_is_empty; + table_class->value_to_string = table_subset_value_to_string; + + class->proxy_model_pre_change = table_subset_proxy_model_pre_change_real; + class->proxy_model_no_change = table_subset_proxy_model_no_change_real; + class->proxy_model_changed = table_subset_proxy_model_changed_real; + class->proxy_model_row_changed = table_subset_proxy_model_row_changed_real; + class->proxy_model_cell_changed = table_subset_proxy_model_cell_changed_real; + class->proxy_model_rows_inserted = table_subset_proxy_model_rows_inserted_real; + class->proxy_model_rows_deleted = table_subset_proxy_model_rows_deleted_real; } static void -etss_init (ETableSubset *etss) +e_table_subset_init (ETableSubset *table_subset) { - etss->last_access = 0; + table_subset->priv = E_TABLE_SUBSET_GET_PRIVATE (table_subset); } static void -etss_proxy_model_pre_change_real (ETableSubset *etss, - ETableModel *etm) +table_subset_proxy_model_pre_change (ETableModel *source_model, + ETableSubset *table_subset) { - e_table_model_pre_change (E_TABLE_MODEL (etss)); -} + ETableSubsetClass *class; -static void -etss_proxy_model_no_change_real (ETableSubset *etss, - ETableModel *etm) -{ - e_table_model_no_change (E_TABLE_MODEL (etss)); -} + class = E_TABLE_SUBSET_GET_CLASS (table_subset); -static void -etss_proxy_model_changed_real (ETableSubset *etss, - ETableModel *etm) -{ - e_table_model_changed (E_TABLE_MODEL (etss)); + if (class->proxy_model_pre_change != NULL) + class->proxy_model_pre_change (table_subset, source_model); } static void -etss_proxy_model_row_changed_real (ETableSubset *etss, - ETableModel *etm, - gint row) +table_subset_proxy_model_no_change (ETableModel *source_model, + ETableSubset *table_subset) { - gint view_row = etss_get_view_row (etss, row); - if (view_row != -1) - e_table_model_row_changed (E_TABLE_MODEL (etss), view_row); - else - e_table_model_no_change (E_TABLE_MODEL (etss)); -} + ETableSubsetClass *class; -static void -etss_proxy_model_cell_changed_real (ETableSubset *etss, - ETableModel *etm, - gint col, - gint row) -{ - gint view_row = etss_get_view_row (etss, row); - if (view_row != -1) - e_table_model_cell_changed (E_TABLE_MODEL (etss), col, view_row); - else - e_table_model_no_change (E_TABLE_MODEL (etss)); -} + class = E_TABLE_SUBSET_GET_CLASS (table_subset); -static void -etss_proxy_model_rows_inserted_real (ETableSubset *etss, - ETableModel *etm, - gint row, - gint count) -{ - e_table_model_no_change (E_TABLE_MODEL (etss)); + if (class->proxy_model_no_change != NULL) + class->proxy_model_no_change (table_subset, source_model); } static void -etss_proxy_model_rows_deleted_real (ETableSubset *etss, - ETableModel *etm, - gint row, - gint count) +table_subset_proxy_model_changed (ETableModel *source_model, + ETableSubset *table_subset) { - e_table_model_no_change (E_TABLE_MODEL (etss)); -} + ETableSubsetClass *class; -static void -etss_proxy_model_pre_change (ETableModel *etm, - ETableSubset *etss) -{ - if (ETSS_CLASS (etss)->proxy_model_pre_change) - (ETSS_CLASS (etss)->proxy_model_pre_change) (etss, etm); -} + class = E_TABLE_SUBSET_GET_CLASS (table_subset); -static void -etss_proxy_model_no_change (ETableModel *etm, - ETableSubset *etss) -{ - if (ETSS_CLASS (etss)->proxy_model_no_change) - (ETSS_CLASS (etss)->proxy_model_no_change) (etss, etm); + if (class->proxy_model_changed != NULL) + class->proxy_model_changed (table_subset, source_model); } static void -etss_proxy_model_changed (ETableModel *etm, - ETableSubset *etss) +table_subset_proxy_model_row_changed (ETableModel *source_model, + gint row, + ETableSubset *table_subset) { - if (ETSS_CLASS (etss)->proxy_model_changed) - (ETSS_CLASS (etss)->proxy_model_changed) (etss, etm); -} + ETableSubsetClass *class; -static void -etss_proxy_model_row_changed (ETableModel *etm, - gint row, - ETableSubset *etss) -{ - if (ETSS_CLASS (etss)->proxy_model_row_changed) - (ETSS_CLASS (etss)->proxy_model_row_changed) (etss, etm, row); + class = E_TABLE_SUBSET_GET_CLASS (table_subset); + + if (class->proxy_model_row_changed != NULL) + class->proxy_model_row_changed ( + table_subset, source_model, row); } static void -etss_proxy_model_cell_changed (ETableModel *etm, - gint col, - gint row, - ETableSubset *etss) +table_subset_proxy_model_cell_changed (ETableModel *source_model, + gint col, + gint row, + ETableSubset *table_subset) { - if (ETSS_CLASS (etss)->proxy_model_cell_changed) - (ETSS_CLASS (etss)->proxy_model_cell_changed) (etss, etm, col, row); + ETableSubsetClass *class; + + class = E_TABLE_SUBSET_GET_CLASS (table_subset); + + if (class->proxy_model_cell_changed != NULL) + class->proxy_model_cell_changed ( + table_subset, source_model, col, row); } static void -etss_proxy_model_rows_inserted (ETableModel *etm, - gint row, - gint col, - ETableSubset *etss) +table_subset_proxy_model_rows_inserted (ETableModel *source_model, + gint row, + gint col, + ETableSubset *table_subset) { - if (ETSS_CLASS (etss)->proxy_model_rows_inserted) - (ETSS_CLASS (etss)->proxy_model_rows_inserted) (etss, etm, row, col); + ETableSubsetClass *class; + + class = E_TABLE_SUBSET_GET_CLASS (table_subset); + + if (class->proxy_model_rows_inserted != NULL) + class->proxy_model_rows_inserted ( + table_subset, source_model, row, col); } static void -etss_proxy_model_rows_deleted (ETableModel *etm, - gint row, - gint col, - ETableSubset *etss) +table_subset_proxy_model_rows_deleted (ETableModel *source_model, + gint row, + gint col, + ETableSubset *table_subset) { - if (ETSS_CLASS (etss)->proxy_model_rows_deleted) - (ETSS_CLASS (etss)->proxy_model_rows_deleted) (etss, etm, row, col); + ETableSubsetClass *class; + + class = E_TABLE_SUBSET_GET_CLASS (table_subset); + + if (class->proxy_model_rows_deleted != NULL) + class->proxy_model_rows_deleted ( + table_subset, source_model, row, col); } ETableModel * -e_table_subset_construct (ETableSubset *etss, - ETableModel *source, +e_table_subset_construct (ETableSubset *table_subset, + ETableModel *source_model, gint nvals) { - guint *buffer; + gulong handler_id; + guint *buffer = NULL; gint i; - if (nvals) { + if (nvals > 0) buffer = (guint *) g_malloc (sizeof (guint) * nvals); - if (buffer == NULL) - return NULL; - } else - buffer = NULL; - etss->map_table = (gint *) buffer; - etss->n_map = nvals; - etss->source = source; - g_object_ref (source); + table_subset->map_table = (gint *) buffer; + table_subset->n_map = nvals; + table_subset->priv->source_model = g_object_ref (source_model); /* Init */ for (i = 0; i < nvals; i++) - etss->map_table[i] = i; - - etss->table_model_pre_change_id = g_signal_connect ( - source, "model_pre_change", - G_CALLBACK (etss_proxy_model_pre_change), etss); - etss->table_model_no_change_id = g_signal_connect ( - source, "model_no_change", - G_CALLBACK (etss_proxy_model_no_change), etss); - etss->table_model_changed_id = g_signal_connect ( - source, "model_changed", - G_CALLBACK (etss_proxy_model_changed), etss); - etss->table_model_row_changed_id = g_signal_connect ( - source, "model_row_changed", - G_CALLBACK (etss_proxy_model_row_changed), etss); - etss->table_model_cell_changed_id = g_signal_connect ( - source, "model_cell_changed", - G_CALLBACK (etss_proxy_model_cell_changed), etss); - etss->table_model_rows_inserted_id = g_signal_connect ( - source, "model_rows_inserted", - G_CALLBACK (etss_proxy_model_rows_inserted), etss); - etss->table_model_rows_deleted_id = g_signal_connect ( - source, "model_rows_deleted", - G_CALLBACK (etss_proxy_model_rows_deleted), etss); - - return E_TABLE_MODEL (etss); + table_subset->map_table[i] = i; + + handler_id = g_signal_connect ( + source_model, "model_pre_change", + G_CALLBACK (table_subset_proxy_model_pre_change), + table_subset); + table_subset->priv->table_model_pre_change_handler_id = handler_id; + + handler_id = g_signal_connect ( + source_model, "model_no_change", + G_CALLBACK (table_subset_proxy_model_no_change), + table_subset); + table_subset->priv->table_model_no_change_handler_id = handler_id; + + handler_id = g_signal_connect ( + source_model, "model_changed", + G_CALLBACK (table_subset_proxy_model_changed), + table_subset); + table_subset->priv->table_model_changed_handler_id = handler_id; + + handler_id = g_signal_connect ( + source_model, "model_row_changed", + G_CALLBACK (table_subset_proxy_model_row_changed), + table_subset); + table_subset->priv->table_model_row_changed_handler_id = handler_id; + + handler_id = g_signal_connect ( + source_model, "model_cell_changed", + G_CALLBACK (table_subset_proxy_model_cell_changed), + table_subset); + table_subset->priv->table_model_cell_changed_handler_id = handler_id; + + handler_id = g_signal_connect ( + source_model, "model_rows_inserted", + G_CALLBACK (table_subset_proxy_model_rows_inserted), + table_subset); + table_subset->priv->table_model_rows_inserted_handler_id = handler_id; + + handler_id = g_signal_connect ( + source_model, "model_rows_deleted", + G_CALLBACK (table_subset_proxy_model_rows_deleted), + table_subset); + table_subset->priv->table_model_rows_deleted_handler_id = handler_id; + + return E_TABLE_MODEL (table_subset); } ETableModel * -e_table_subset_new (ETableModel *source, +e_table_subset_new (ETableModel *source_model, const gint nvals) { - ETableSubset *etss = g_object_new (E_TYPE_TABLE_SUBSET, NULL); + ETableSubset *table_subset; + + g_return_val_if_fail (E_IS_TABLE_MODEL (source_model), NULL); - if (e_table_subset_construct (etss, source, nvals) == NULL) { - g_object_unref (etss); + table_subset = g_object_new (E_TYPE_TABLE_SUBSET, NULL); + + if (e_table_subset_construct (table_subset, source_model, nvals) == NULL) { + g_object_unref (table_subset); return NULL; } - return (ETableModel *) etss; + return (ETableModel *) table_subset; +} + +ETableModel * +e_table_subset_get_source_model (ETableSubset *table_subset) +{ + g_return_val_if_fail (E_IS_TABLE_SUBSET (table_subset), NULL); + + return table_subset->priv->source_model; } gint -e_table_subset_model_to_view_row (ETableSubset *ets, +e_table_subset_model_to_view_row (ETableSubset *table_subset, gint model_row) { gint i; - for (i = 0; i < ets->n_map; i++) { - if (ets->map_table[i] == model_row) + + g_return_val_if_fail (E_IS_TABLE_SUBSET (table_subset), -1); + + for (i = 0; i < table_subset->n_map; i++) { + if (table_subset->map_table[i] == model_row) return i; } return -1; } gint -e_table_subset_view_to_model_row (ETableSubset *ets, +e_table_subset_view_to_model_row (ETableSubset *table_subset, gint view_row) { - if (view_row >= 0 && view_row < ets->n_map) - return ets->map_table[view_row]; + g_return_val_if_fail (E_IS_TABLE_SUBSET (table_subset), -1); + + if (view_row >= 0 && view_row < table_subset->n_map) + return table_subset->map_table[view_row]; else return -1; } ETableModel * -e_table_subset_get_toplevel (ETableSubset *table) +e_table_subset_get_toplevel (ETableSubset *table_subset) { - g_return_val_if_fail (table != NULL, NULL); - g_return_val_if_fail (E_IS_TABLE_SUBSET (table), NULL); + g_return_val_if_fail (E_IS_TABLE_SUBSET (table_subset), NULL); - if (E_IS_TABLE_SUBSET (table->source)) - return e_table_subset_get_toplevel (E_TABLE_SUBSET (table->source)); + if (E_IS_TABLE_SUBSET (table_subset->priv->source_model)) + return e_table_subset_get_toplevel ( + E_TABLE_SUBSET (table_subset->priv->source_model)); else - return table->source; + return table_subset->priv->source_model; } void -e_table_subset_print_debugging (ETableSubset *table_model) +e_table_subset_print_debugging (ETableSubset *table_subset) { gint i; - for (i = 0; i < table_model->n_map; i++) { - g_print ("%8d\n", table_model->map_table[i]); + + g_return_if_fail (E_IS_TABLE_SUBSET (table_subset)); + + for (i = 0; i < table_subset->n_map; i++) { + g_print ("%8d\n", table_subset->map_table[i]); } } |