X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fgui%2Fpsppire-data-store.c;h=c7d94cee81dc66270f74ea61176da0b7f96cdb3e;hb=3e2bf013a731344daed7ab206d4a3c2460688208;hp=6af1b2246088243905add8ac7d9468df4a403b64;hpb=992bcbd6001c1b36828de093c3b218f5bfd688b6;p=pspp diff --git a/src/ui/gui/psppire-data-store.c b/src/ui/gui/psppire-data-store.c index 6af1b22460..c7d94cee81 100644 --- a/src/ui/gui/psppire-data-store.c +++ b/src/ui/gui/psppire-data-store.c @@ -25,8 +25,8 @@ #define _(msgid) gettext (msgid) #define N_(msgid) msgid -#include -#include +#include +#include #include #include @@ -373,29 +373,16 @@ psppire_data_store_new (PsppireDict *dict) } - -/** - * psppire_data_store_replace_set_dictionary: - * @data_store: The variable store - * @dict: The dictionary to set - * - * If a dictionary is already associated with the data-store, then it will be - * destroyed. - **/ void -psppire_data_store_set_dictionary (PsppireDataStore *data_store, PsppireDict *dict) +psppire_data_store_set_case_file (PsppireDataStore *data_store, + PsppireCaseFile *cf) { - data_store->dict = dict; - if ( data_store->case_file) { g_object_unref (data_store->case_file); - data_store->case_file = 0; } - data_store->case_file = psppire_case_file_new (); - - + data_store->case_file = cf; g_signal_connect (data_store->case_file, "cases-deleted", G_CALLBACK (delete_cases_callback), @@ -409,6 +396,22 @@ psppire_data_store_set_dictionary (PsppireDataStore *data_store, PsppireDict *di g_signal_connect (data_store->case_file, "case-changed", G_CALLBACK (changed_case_callback), data_store); +} + + + +/** + * psppire_data_store_replace_set_dictionary: + * @data_store: The variable store + * @dict: The dictionary to set + * + * If a dictionary is already associated with the data-store, then it will be + * destroyed. + **/ +void +psppire_data_store_set_dictionary (PsppireDataStore *data_store, PsppireDict *dict) +{ + data_store->dict = dict; g_signal_connect (dict, "variable-inserted", G_CALLBACK (insert_variable_callback), @@ -454,7 +457,7 @@ psppire_data_store_insert_new_case (PsppireDataStore *ds, gint posn) /* Opportunity for optimisation exists here when creating a blank case */ - val_cnt = casefile_get_value_cnt (ds->case_file->flexifile) ; + val_cnt = datasheet_get_column_cnt (ds->case_file->datasheet) ; case_create (&cc, val_cnt); @@ -484,7 +487,7 @@ psppire_data_store_get_string (const GSheetModel *model, gint row, gint column) char *text; const struct fmt_spec *fp ; const struct variable *pv ; - const union value *v ; + union value *v ; GString *s; PsppireDataStore *store = PSPPIRE_DATA_STORE (model); @@ -505,19 +508,19 @@ psppire_data_store_get_string (const GSheetModel *model, gint row, gint column) g_assert (idx >= 0); - v = psppire_case_file_get_value (store->case_file, row, idx); + v = psppire_case_file_get_value (store->case_file, row, idx, NULL, + var_get_width (pv)); g_return_val_if_fail (v, NULL); if ( store->show_labels) { - const struct val_labs * vl = var_get_value_labels (pv); - - const gchar *label; - if ( (label = val_labs_find (vl, *v)) ) - { + const gchar *label = var_lookup_value_label (pv, v); + if (label) + { + free (v); return pspp_locale_to_utf8 (label, -1, 0); - } + } } fp = var_get_write_format (pv); @@ -539,6 +542,7 @@ psppire_data_store_get_string (const GSheetModel *model, gint row, gint column) g_strchomp (text); + free (v); return text; } @@ -649,7 +653,7 @@ psppire_data_store_create_system_file (PsppireDataStore *store, 3 /* version */ }; - struct sfm_writer *writer ; + struct casewriter *writer; g_assert (handle); @@ -664,15 +668,10 @@ psppire_data_store_create_system_file (PsppireDataStore *store, for (i = 0 ; i < psppire_case_file_get_case_count (store->case_file); ++i ) { struct ccase c; - - case_create (&c, var_cnt); psppire_case_file_get_case (store->case_file, i, &c); - sfm_write_case (writer, &c); - - case_destroy (&c); + casewriter_write (writer, &c); } - - sfm_close_writer (writer); + casewriter_destroy (writer); } @@ -687,6 +686,18 @@ psppire_data_store_clear (PsppireDataStore *data_store) +/* Return a casereader made from this datastore */ +struct casereader * +psppire_data_store_get_reader (PsppireDataStore *ds) +{ + struct casereader *reader ; + + reader = psppire_case_file_make_reader (ds->case_file); + + return reader; +} + + /* Column related funcs */ @@ -851,3 +862,5 @@ psppire_data_store_sheet_row_init (GSheetRowIface *iface) iface->get_button_label = geometry_get_row_button_label; } + +