X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=src%2Fui%2Fgui%2Fpsppire-data-store.c;h=a8e86072de74c453a9c20914bca999b74f3e5e38;hb=c28781f010b27ed9c02442e07b74a9284994c746;hp=1664da735eadf46df384326ced168c423b1bf9fa;hpb=e8d52510a02525939dbde828cf62ed44374d6920;p=pspp diff --git a/src/ui/gui/psppire-data-store.c b/src/ui/gui/psppire-data-store.c index 1664da735e..a8e86072de 100644 --- a/src/ui/gui/psppire-data-store.c +++ b/src/ui/gui/psppire-data-store.c @@ -1,5 +1,6 @@ /* PSPPIRE - a graphical user interface for PSPP. - Copyright (C) 2006, 2008, 2009, 2010, 2011, 2012, 2013 Free Software Foundation + Copyright (C) 2006, 2008, 2009, 2010, 2011, 2012, + 2013, 2016, 2017 Free Software Foundation This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -68,8 +69,6 @@ static GObjectClass *parent_class = NULL; enum { ITEMS_CHANGED, - CASES_DELETED, - CASE_INSERTED, CASE_CHANGED, n_SIGNALS }; @@ -100,7 +99,7 @@ __tree_model_get_n_columns (GtkTreeModel *tree_model) { PsppireDataStore *store = PSPPIRE_DATA_STORE (tree_model); - return psppire_dict_get_value_cnt (store->dict); + return psppire_dict_get_var_cnt (store->dict); } @@ -158,10 +157,8 @@ myreversefunc (GtkTreeModel *model, gint col, gint row, } gchar * -myconvfunc (GtkTreeModel *model, gint col, gint row, const GValue *v) +psppire_data_store_value_to_string (PsppireDataStore *store, gint col, gint row, const GValue *v) { - PsppireDataStore *store = PSPPIRE_DATA_STORE (model); - const struct variable *variable = psppire_dict_get_variable (store->dict, col); g_return_val_if_fail (variable, g_strdup ("???")); @@ -196,7 +193,7 @@ __get_value (GtkTreeModel *tree_model, struct ccase *cc = datasheet_get_row (store->datasheet, row); - const union value *val = case_data_idx (cc, column); + const union value *val = case_data_idx (cc, var_get_case_index (variable)); GVariant *vv = value_variant_new (val, var_get_width (variable)); @@ -274,8 +271,8 @@ psppire_data_store_class_init (PsppireDataStoreClass *class) object_class->finalize = psppire_data_store_finalize; object_class->dispose = psppire_data_store_dispose; - signals [ITEMS_CHANGED] = - g_signal_new ("changed", + signals [ITEMS_CHANGED] = + g_signal_new ("items-changed", G_TYPE_FROM_CLASS (class), G_SIGNAL_RUN_FIRST, 0, @@ -283,21 +280,9 @@ psppire_data_store_class_init (PsppireDataStoreClass *class) psppire_marshal_VOID__UINT_UINT_UINT, G_TYPE_NONE, 3, - G_TYPE_UINT, - G_TYPE_UINT, - G_TYPE_UINT); - - signals [CASE_INSERTED] = - g_signal_new ("case-inserted", - G_TYPE_FROM_CLASS (class), - G_SIGNAL_RUN_FIRST, - 0, - NULL, NULL, - g_cclosure_marshal_VOID__INT, - G_TYPE_NONE, - 1, - G_TYPE_INT); - + G_TYPE_UINT, /* Index of the start of the change */ + G_TYPE_UINT, /* The number of items deleted */ + G_TYPE_UINT); /* The number of items inserted */ signals [CASE_CHANGED] = g_signal_new ("case-changed", @@ -309,26 +294,10 @@ psppire_data_store_class_init (PsppireDataStoreClass *class) G_TYPE_NONE, 1, G_TYPE_INT); - - signals [CASES_DELETED] = - g_signal_new ("cases-deleted", - G_TYPE_FROM_CLASS (class), - G_SIGNAL_RUN_FIRST, - 0, - NULL, NULL, - psppire_marshal_VOID__INT_INT, - G_TYPE_NONE, - 2, - G_TYPE_INT, - G_TYPE_INT); } -static gboolean -psppire_data_store_insert_value (PsppireDataStore *ds, - gint width, gint where); - casenumber psppire_data_store_get_case_count (const PsppireDataStore *store) { @@ -356,6 +325,16 @@ psppire_data_store_init (PsppireDataStore *data_store) data_store->stamp = g_random_int (); } + +static void +psppire_data_store_delete_value (PsppireDataStore *store, gint case_index) +{ + g_return_if_fail (store->datasheet); + datasheet_delete_columns (store->datasheet, case_index, 1); + datasheet_insert_column (store->datasheet, NULL, -1, case_index); +} + + /* A callback which occurs after a variable has been deleted. */ @@ -366,10 +345,7 @@ delete_variable_callback (GObject *obj, const struct variable *var UNUSED, { PsppireDataStore *store = PSPPIRE_DATA_STORE (data); - g_return_if_fail (store->datasheet); - - datasheet_delete_columns (store->datasheet, case_index, 1); - datasheet_insert_column (store->datasheet, NULL, -1, case_index); + psppire_data_store_delete_value (store, case_index); } struct resize_datum_aux @@ -597,9 +573,9 @@ psppire_data_store_get_value (PsppireDataStore *store, glong row, const struct variable *var, union value *val) { - g_return_val_if_fail (store != NULL, NULL); - g_return_val_if_fail (store->datasheet != NULL, NULL); - g_return_val_if_fail (var != NULL, NULL); + g_return_val_if_fail (store != NULL, FALSE); + g_return_val_if_fail (store->datasheet != NULL, FALSE); + g_return_val_if_fail (var != NULL, FALSE); if (row < 0 || row >= datasheet_get_n_rows (store->datasheet)) return FALSE; @@ -693,7 +669,7 @@ psppire_data_store_clear (PsppireDataStore *ds) psppire_dict_clear (ds->dict); - g_signal_emit (ds, signals [CASES_DELETED], 0, 0, -1); + g_signal_emit (ds, signals [ITEMS_CHANGED], 0, 0, -1, 0); } @@ -720,17 +696,6 @@ psppire_data_store_get_reader (PsppireDataStore *ds) return reader; } - - -/* Column related funcs */ - - -static const gchar null_var_name[]=N_("var"); - - - - - /* Returns the CASENUMth case, or a null pointer on failure. */ struct ccase * @@ -757,7 +722,7 @@ psppire_data_store_delete_cases (PsppireDataStore *ds, casenumber first, datasheet_delete_rows (ds->datasheet, first, n_cases); - g_signal_emit (ds, signals [CASES_DELETED], 0, first, n_cases); + g_signal_emit (ds, signals[ITEMS_CHANGED], 0, first, n_cases, 0); return TRUE; } @@ -779,7 +744,9 @@ psppire_data_store_insert_case (PsppireDataStore *ds, result = datasheet_insert_rows (ds->datasheet, posn, &cc, 1); if ( result ) - g_signal_emit (ds, signals [CASE_INSERTED], 0, posn); + { + g_signal_emit (ds, signals[ITEMS_CHANGED], 0, posn, 0, 1); + } else g_warning ("Cannot insert case at position %ld\n", posn); @@ -854,7 +821,7 @@ psppire_data_store_data_in (PsppireDataStore *ds, casenumber casenum, gint idx, given WIDTH into every one of them at the position immediately preceding WHERE. */ -static gboolean +gboolean psppire_data_store_insert_value (PsppireDataStore *ds, gint width, gint where) {