X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=src%2Fdata%2Fvariable.c;h=537b247cd3885d0e72d0d3fd5d6800238e996853;hb=40c95e4fddf5e16df9cf634d32bec205c3cbfb18;hp=35fdab29ebbef73d8ad59eba2be64b3e89fd6d86;hpb=de1f714a96756fe10ba57b2b35d6b175c176db2c;p=pspp diff --git a/src/data/variable.c b/src/data/variable.c index 35fdab29eb..537b247cd3 100644 --- a/src/data/variable.c +++ b/src/data/variable.c @@ -26,6 +26,7 @@ #include "data/format.h" #include "data/identifier.h" #include "data/missing-values.h" +#include "data/settings.h" #include "data/value-labels.h" #include "data/vardict.h" #include "libpspp/assertion.h" @@ -467,6 +468,19 @@ var_lookup_value_label (const struct variable *v, const union value *value) return val_labs_find (v->val_labs, value); } +/* + Append to STR the string representation of VALUE for variable V. + STR must be a pointer to an initialised struct string. +*/ +static void +append_value (const struct variable *v, const union value *value, + struct string *str) +{ + char *s = data_out (value, var_get_encoding (v), &v->print); + ds_put_cstr (str, s); + free (s); +} + /* Append STR with a string representing VALUE for variable V. That is, if VALUE has a label, append that label, otherwise format VALUE and append the formatted string. @@ -476,15 +490,33 @@ void var_append_value_name (const struct variable *v, const union value *value, struct string *str) { + enum settings_value_style style = settings_get_value_style (); const char *name = var_lookup_value_label (v, value); - if (name == NULL) + + switch (style) { - char *s = data_out (value, var_get_encoding (v), &v->print); - ds_put_cstr (str, s); - free (s); - } - else - ds_put_cstr (str, name); + case SETTINGS_VAL_STYLE_VALUES: + append_value (v, value, str); + break; + + case SETTINGS_VAL_STYLE_LABELS: + if (name == NULL) + append_value (v, value, str); + else + ds_put_cstr (str, name); + break; + + case SETTINGS_VAL_STYLE_BOTH: + default: + append_value (v, value, str); + if (name != NULL) + { + ds_put_cstr (str, " ("); + ds_put_cstr (str, name); + ds_put_cstr (str, ")"); + } + break; + }; } /* Print and write formats. */ @@ -636,6 +668,26 @@ measure_is_valid (enum measure m) return m == MEASURE_NOMINAL || m == MEASURE_ORDINAL || m == MEASURE_SCALE; } +/* Returns a string version of measurement level M, for display to a user. */ +const char * +measure_to_string (enum measure m) +{ + switch (m) + { + case MEASURE_NOMINAL: + return _("Nominal"); + + case MEASURE_ORDINAL: + return _("Ordinal"); + + case MEASURE_SCALE: + return _("Scale"); + + default: + return "Invalid"; + } +} + /* Returns V's measurement level. */ enum measure var_get_measure (const struct variable *v) @@ -673,14 +725,12 @@ var_get_display_width (const struct variable *v) void var_set_display_width (struct variable *v, int new_width) { - int old_width = v->display_width; - - v->display_width = new_width; - - if ( old_width != new_width) - dict_var_display_width_changed (v); - - dict_var_changed (v); + if (v->display_width != new_width) + { + v->display_width = new_width; + dict_var_display_width_changed (v); + dict_var_changed (v); + } } /* Returns the default display width for a variable of the given @@ -700,6 +750,26 @@ alignment_is_valid (enum alignment a) return a == ALIGN_LEFT || a == ALIGN_RIGHT || a == ALIGN_CENTRE; } +/* Returns a string version of alignment A, for display to a user. */ +const char * +alignment_to_string (enum alignment a) +{ + switch (a) + { + case ALIGN_LEFT: + return _("Left"); + + case ALIGN_RIGHT: + return _("Right"); + + case ALIGN_CENTRE: + return _("Center"); + + default: + return "Invalid"; + } +} + /* Returns V's display alignment, which applies only to GUIs. */ enum alignment var_get_alignment (const struct variable *v)