X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fgui%2Fpsppire-data-store.c;h=0b762fd396c00a116bc85c7361bea50a446bdbb2;hb=6f4d5b2819ec4fc3a19e553da8d8eee9b3e4d2e5;hp=fc5cdf9287d4eea11cbd0fb7833fa7e47edd0e0c;hpb=2bdde1cd21cd58349cf4bd852fddf40524854288;p=pspp-builds.git diff --git a/src/ui/gui/psppire-data-store.c b/src/ui/gui/psppire-data-store.c index fc5cdf92..0b762fd3 100644 --- a/src/ui/gui/psppire-data-store.c +++ b/src/ui/gui/psppire-data-store.c @@ -48,6 +48,7 @@ static void psppire_data_store_sheet_column_init (GSheetColumnIface *iface); static void psppire_data_store_sheet_row_init (GSheetRowIface *iface); static void psppire_data_store_finalize (GObject *object); +static void psppire_data_store_dispose (GObject *object); static gboolean psppire_data_store_clear_datum (GSheetModel *model, glong row, glong column); @@ -137,6 +138,7 @@ psppire_data_store_class_init (PsppireDataStoreClass *class) object_class = (GObjectClass*) class; object_class->finalize = psppire_data_store_finalize; + object_class->dispose = psppire_data_store_dispose; signals [FONT_CHANGED] = g_signal_new ("font_changed", @@ -182,10 +184,9 @@ static void psppire_data_store_init (PsppireDataStore *data_store) { data_store->dict = 0; - data_store->case_file = 0; + data_store->case_file = NULL; data_store->width_of_m = 10; - - + data_store->dispose_has_run = FALSE; } const PangoFontDescription * @@ -396,10 +397,8 @@ psppire_data_store_set_case_file (PsppireDataStore *ds, PsppireCaseFile *cf) { gint i; - if ( ds->case_file) - { - g_object_unref (ds->case_file); - } + if ( ds->case_file) g_object_unref (ds->case_file); + ds->case_file = cf; @@ -515,6 +514,24 @@ psppire_data_store_finalize (GObject *object) (* parent_class->finalize) (object); } + +static void +psppire_data_store_dispose (GObject *object) +{ + PsppireDataStore *ds = PSPPIRE_DATA_STORE (object); + + if (ds->dispose_has_run) + return; + + if (ds->case_file) g_object_unref (ds->case_file); + + /* must chain up */ + (* parent_class->dispose) (object); + + ds->dispose_has_run = TRUE; +} + + gboolean psppire_data_store_delete_cases (PsppireDataStore *ds, casenumber first, casenumber count) @@ -659,23 +676,17 @@ gboolean psppire_data_store_set_string (PsppireDataStore *store, const gchar *text, glong row, glong col) { + glong n_cases; const struct variable *pv = psppire_dict_get_variable (store->dict, col); g_return_val_if_fail (pv, FALSE); -#if 0 - /* Allow the user to insert a lot of blank cases, simply by skipping rows */ - for (r = psppire_case_file_get_case_count (store->case_file); r <= row ; ++r) - { - - gint c; - - psppire_case_array_insert_case (store->cases, r, 0, 0); + n_cases = psppire_data_store_get_case_count (store); + if ( row > n_cases) + return FALSE; - for (c = 0 ; c < psppire_dict_get_var_cnt (store->dict); ++c ) - psppire_data_store_clear_datum (model, r, c); - } -#endif + if (row == n_cases) + psppire_data_store_insert_new_case (store, row); psppire_case_file_data_in (store->case_file, row, var_get_case_index (pv), ss_cstr (text),