X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fgui%2Fpsppire-data-store.c;h=b3cc11334c880cad3534101915b9c1ddd72d575c;hb=eb2e96df2d60b9e44a01692bac8206ecbde4b940;hp=c780e06eb0e2dd75024e5c4059ab31a1556856f7;hpb=e7d38ad8abd34beaec3f9078c9ade9c422707a5c;p=pspp diff --git a/src/ui/gui/psppire-data-store.c b/src/ui/gui/psppire-data-store.c index c780e06eb0..b3cc11334c 100644 --- a/src/ui/gui/psppire-data-store.c +++ b/src/ui/gui/psppire-data-store.c @@ -46,9 +46,6 @@ #include "value-variant.h" -static void psppire_data_store_init (PsppireDataStore *data_store); -static void psppire_data_store_class_init (PsppireDataStoreClass *class); - static void psppire_data_store_finalize (GObject *object); static void psppire_data_store_dispose (GObject *object); @@ -155,9 +152,21 @@ psppire_data_store_string_to_value (GtkTreeModel *model, gint col, gint row, union value val; value_init (&val, width); - char *xx = - data_in (ss_cstr (in), psppire_dict_encoding (store->dict), - fmt->type, &val, width, "UTF-8"); + const struct val_labs *value_labels = var_get_value_labels (variable); + const union value *vp = NULL; + if (value_labels) + { + vp = val_labs_find_value (value_labels, in); + if (vp) + value_copy (&val, vp, width); + } + char *xx = NULL; + if (vp == NULL) + { + xx = data_in (ss_cstr (in), psppire_dict_encoding (store->dict), + fmt->type, settings_get_fmt_settings (), + &val, width, "UTF-8"); + } GVariant *vrnt = value_variant_new (&val, width); value_destroy (&val, width); @@ -272,44 +281,9 @@ __tree_model_init (GtkTreeModelIface *iface) iface->iter_parent = NULL; } - -GType -psppire_data_store_get_type (void) -{ - static GType data_store_type = 0; - - if (!data_store_type) - { - static const GTypeInfo data_store_info = - { - sizeof (PsppireDataStoreClass), - NULL, /* base_init */ - NULL, /* base_finalize */ - (GClassInitFunc) psppire_data_store_class_init, - NULL, /* class_finalize */ - NULL, /* class_data */ - sizeof (PsppireDataStore), - 0, - (GInstanceInitFunc) psppire_data_store_init, - }; - - static const GInterfaceInfo tree_model_info = { - (GInterfaceInitFunc) __tree_model_init, - NULL, - NULL - }; - - data_store_type = g_type_register_static (G_TYPE_OBJECT, - "PsppireDataStore", - &data_store_info, 0); - - g_type_add_interface_static (data_store_type, GTK_TYPE_TREE_MODEL, - &tree_model_info); - } - - return data_store_type; -} - +G_DEFINE_TYPE_WITH_CODE (PsppireDataStore, psppire_data_store, G_TYPE_OBJECT, + G_IMPLEMENT_INTERFACE (GTK_TYPE_TREE_MODEL, + __tree_model_init)) static void psppire_data_store_class_init (PsppireDataStoreClass *class) @@ -317,7 +291,7 @@ psppire_data_store_class_init (PsppireDataStoreClass *class) GObjectClass *object_class; parent_class = g_type_class_peek_parent (class); - object_class = (GObjectClass*) class; + object_class = G_OBJECT_CLASS (class); object_class->finalize = psppire_data_store_finalize; object_class->dispose = psppire_data_store_dispose; @@ -415,11 +389,13 @@ resize_datum (const union value *old, union value *new, const void *aux_) int new_width = var_get_width (aux->new_variable); const char *enc = dict_get_encoding (aux->dict); const struct fmt_spec *newfmt = var_get_print_format (aux->new_variable); - char *s = data_out (old, enc, var_get_print_format (aux->old_variable)); + char *s = data_out (old, enc, var_get_print_format (aux->old_variable), + settings_get_fmt_settings ()); enum fmt_type type = (fmt_usable_for_input (newfmt->type) ? newfmt->type : FMT_DOLLAR); - free (data_in (ss_cstr (s), enc, type, new, new_width, enc)); + free (data_in (ss_cstr (s), enc, type, settings_get_fmt_settings (), + new, new_width, enc)); free (s); } @@ -865,8 +841,8 @@ psppire_data_store_data_in (PsppireDataStore *ds, casenumber casenum, gint idx, FALSE); value_init (&value, width); ok = (datasheet_get_value (ds->datasheet, casenum, idx, &value) - && data_in_msg (input, UTF8, fmt->type, &value, width, - dict_get_encoding (dict->dict)) + && data_in_msg (input, UTF8, fmt->type, settings_get_fmt_settings (), + &value, width, dict_get_encoding (dict->dict)) && datasheet_put_value (ds->datasheet, casenum, idx, &value)); value_destroy (&value, width);