X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fgui%2Fpsppire-variable.c;h=70c69a7ee768b3bdcbee3cd02a67b287dc31a50d;hb=5bacd5c053e285ccfba287d2b28079f1d1c49cc9;hp=7d23f48bfbcaf6bea6dbdc3e1c96ac8793acb101;hpb=a19b858e0ac3c69e4a28c0ca6d8674427268a863;p=pspp diff --git a/src/ui/gui/psppire-variable.c b/src/ui/gui/psppire-variable.c index 7d23f48bfb..70c69a7ee7 100644 --- a/src/ui/gui/psppire-variable.c +++ b/src/ui/gui/psppire-variable.c @@ -1,6 +1,6 @@ /* PSPPIRE --- A Graphical User Interface for PSPP - Copyright (C) 2004 Free Software Foundation + Copyright (C) 2004, 2006 Free Software Foundation Written by John Darrington This program is free software; you can redistribute it and/or modify @@ -18,12 +18,17 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ +#include + #include #include #include #include #include +#include + +#include #include "psppire-variable.h" #include "psppire-dict.h" @@ -40,7 +45,7 @@ psppire_variable_set_name(struct PsppireVariable *pv, const gchar *text) if ( !text) return FALSE; - if ( 0 == strcmp(pv->v->name, text)) + if ( 0 == strcmp(var_get_name (pv->v), text)) return FALSE; if ( ! psppire_dict_check_name(pv->dict, text, TRUE) ) @@ -48,7 +53,7 @@ psppire_variable_set_name(struct PsppireVariable *pv, const gchar *text) dict_rename_var(pv->dict->dict, pv->v, text); - psppire_dict_var_changed(pv->dict, pv->v->index); + psppire_dict_var_changed(pv->dict, var_get_dict_index (pv->v)); return TRUE; } @@ -61,9 +66,9 @@ psppire_variable_set_columns(struct PsppireVariable *pv, gint columns) g_return_val_if_fail(pv->dict, FALSE); g_return_val_if_fail(pv->v, FALSE); - pv->v->display_width = columns; + var_set_display_width (pv->v, columns); - psppire_dict_var_changed(pv->dict, pv->v->index); + psppire_dict_var_changed(pv->dict, var_get_dict_index (pv->v)); return TRUE; } @@ -75,10 +80,9 @@ psppire_variable_set_label(struct PsppireVariable *pv, const gchar *label) g_return_val_if_fail(pv->dict, FALSE); g_return_val_if_fail(pv->v, FALSE); - g_free(pv->v->label); - pv->v->label = g_strdup(label); + var_set_label (pv->v, label); - psppire_dict_var_changed(pv->dict, pv->v->index); + psppire_dict_var_changed(pv->dict, var_get_dict_index (pv->v)); return TRUE; } @@ -87,12 +91,13 @@ psppire_variable_set_label(struct PsppireVariable *pv, const gchar *label) gboolean psppire_variable_set_decimals(struct PsppireVariable *pv, gint decimals) { + struct fmt_spec fmt; + g_return_val_if_fail(pv, FALSE); g_return_val_if_fail(pv->dict, FALSE); g_return_val_if_fail(pv->v, FALSE); - struct fmt_spec fmt = pv->v->write; - + fmt = *var_get_write_format (pv->v); fmt.d = decimals; return psppire_variable_set_format(pv, &fmt); @@ -103,16 +108,29 @@ psppire_variable_set_decimals(struct PsppireVariable *pv, gint decimals) gboolean psppire_variable_set_width(struct PsppireVariable *pv, gint width) { + struct fmt_spec fmt ; g_return_val_if_fail(pv, FALSE); g_return_val_if_fail(pv->dict, FALSE); g_return_val_if_fail(pv->v, FALSE); - struct fmt_spec fmt = pv->v->write; - + fmt = *var_get_write_format (pv->v); fmt.w = width; - if ( pv->v->type == ALPHA ) - pv->v->width = width; + if (var_is_alpha (pv->v)) + { + gint old_var_cnt , new_var_cnt ; + + if ( var_get_width (pv->v) == 0 ) + old_var_cnt = 1; + else + old_var_cnt = DIV_RND_UP(var_get_width (pv->v), MAX_SHORT_STRING); + + new_var_cnt = DIV_RND_UP(width, MAX_SHORT_STRING); + var_set_width (pv->v, width); + + psppire_dict_resize_variable(pv->dict, pv, + old_var_cnt, new_var_cnt); + } return psppire_variable_set_format(pv, &fmt); } @@ -121,16 +139,28 @@ psppire_variable_set_width(struct PsppireVariable *pv, gint width) gboolean psppire_variable_set_type(struct PsppireVariable *pv, int type) { + gint old_var_cnt , new_var_cnt ; + g_return_val_if_fail(pv, FALSE); g_return_val_if_fail(pv->dict, FALSE); g_return_val_if_fail(pv->v, FALSE); - pv->v->type = type; + if ( var_get_width (pv->v) ) + old_var_cnt = 1; + else + old_var_cnt = DIV_RND_UP (var_get_width (pv->v), MAX_SHORT_STRING); + + var_set_width (pv->v, type == VAR_NUMERIC ? 0 : 1); - if ( type == NUMERIC ) - pv->v->width = 0; + if ( var_get_width (pv->v) == 0 ) + new_var_cnt = 1; + else + new_var_cnt = DIV_RND_UP (var_get_width (pv->v), MAX_SHORT_STRING); - psppire_dict_var_changed(pv->dict, pv->v->index); + psppire_dict_resize_variable(pv->dict, pv, + old_var_cnt, new_var_cnt); + + psppire_dict_var_changed(pv->dict, var_get_dict_index (pv->v)); return TRUE; } @@ -142,17 +172,17 @@ psppire_variable_set_format(struct PsppireVariable *pv, struct fmt_spec *fmt) g_return_val_if_fail(pv->dict, FALSE); g_return_val_if_fail(pv->v, FALSE); - if ( check_output_specifier(fmt, false) - && - check_specifier_type(fmt, pv->v->type, false) - && - check_specifier_width(fmt, pv->v->width, false) - ) + msg_disable (); + if ( fmt_check_output(fmt) + && fmt_check_type_compat (fmt, var_get_type (pv->v)) + && fmt_check_width_compat (fmt, var_get_width (pv->v))) { - pv->v->write = pv->v->print = *fmt; - psppire_dict_var_changed(pv->dict, pv->v->index); + msg_enable (); + var_set_both_formats (pv->v, fmt); + psppire_dict_var_changed(pv->dict, var_get_dict_index (pv->v)); return TRUE; } + msg_enable (); return FALSE; } @@ -166,10 +196,9 @@ psppire_variable_set_value_labels(const struct PsppireVariable *pv, g_return_val_if_fail(pv->dict, FALSE); g_return_val_if_fail(pv->v, FALSE); - val_labs_destroy(pv->v->val_labs); - pv->v->val_labs = val_labs_copy(vls); + var_set_value_labels (pv->v, vls); - psppire_dict_var_changed(pv->dict, pv->v->index); + psppire_dict_var_changed(pv->dict, var_get_dict_index (pv->v)); return TRUE; } @@ -181,9 +210,9 @@ psppire_variable_set_missing(const struct PsppireVariable *pv, g_return_val_if_fail(pv->dict, FALSE); g_return_val_if_fail(pv->v, FALSE); - mv_copy(&pv->v->miss, miss); + var_set_missing_values (pv->v, miss); - psppire_dict_var_changed(pv->dict, pv->v->index); + psppire_dict_var_changed(pv->dict, var_get_dict_index (pv->v)); return TRUE; } @@ -193,9 +222,9 @@ psppire_variable_set_write_spec(const struct PsppireVariable *pv, struct fmt_spe g_return_val_if_fail(pv, FALSE); g_return_val_if_fail(pv->v, FALSE); - pv->v->write = fmt; + var_set_write_format (pv->v, &fmt); - psppire_dict_var_changed(pv->dict, pv->v->index); + psppire_dict_var_changed(pv->dict, var_get_dict_index (pv->v)); return TRUE; } @@ -205,9 +234,9 @@ psppire_variable_set_print_spec(const struct PsppireVariable *pv, struct fmt_spe g_return_val_if_fail(pv, FALSE); g_return_val_if_fail(pv->v, FALSE); - pv->v->print = fmt; + var_set_print_format (pv->v, &fmt); - psppire_dict_var_changed(pv->dict, pv->v->index); + psppire_dict_var_changed(pv->dict, var_get_dict_index (pv->v)); return TRUE; } @@ -220,9 +249,9 @@ psppire_variable_set_alignment(struct PsppireVariable *pv, gint align) g_return_val_if_fail(pv->dict, FALSE); g_return_val_if_fail(pv->v, FALSE); - pv->v->alignment = align; + var_set_alignment (pv->v, align); - psppire_dict_var_changed(pv->dict, pv->v->index); + psppire_dict_var_changed(pv->dict, var_get_dict_index (pv->v)); return TRUE; } @@ -234,9 +263,9 @@ psppire_variable_set_measure(struct PsppireVariable *pv, gint measure) g_return_val_if_fail(pv->dict, FALSE); g_return_val_if_fail(pv->v, FALSE); - pv->v->measure = measure + 1; + var_set_measure (pv->v, measure + 1); - psppire_dict_var_changed(pv->dict, pv->v->index); + psppire_dict_var_changed(pv->dict, var_get_dict_index (pv->v)); return TRUE; } @@ -247,8 +276,7 @@ psppire_variable_get_write_spec(const struct PsppireVariable *pv) g_return_val_if_fail(pv, NULL); g_return_val_if_fail(pv->v, NULL); - - return &pv->v->write; + return var_get_write_format (pv->v); } @@ -258,7 +286,7 @@ psppire_variable_get_name(const struct PsppireVariable *pv) g_return_val_if_fail(pv, NULL); g_return_val_if_fail(pv->v, NULL); - return pv->v->name; + return var_get_name (pv->v); } @@ -268,7 +296,7 @@ psppire_variable_get_columns(const struct PsppireVariable *pv) g_return_val_if_fail(pv, -1); g_return_val_if_fail(pv->v, -1); - return pv->v->display_width; + return var_get_display_width (pv->v); } @@ -279,7 +307,7 @@ psppire_variable_get_label(const struct PsppireVariable *pv) g_return_val_if_fail(pv, NULL); g_return_val_if_fail(pv->v, NULL); - return pv->v->label; + return var_get_label (pv->v); } @@ -289,7 +317,7 @@ psppire_variable_get_missing(const struct PsppireVariable *pv) g_return_val_if_fail(pv, NULL); g_return_val_if_fail(pv->v, NULL); - return &pv->v->miss; + return var_get_missing_values (pv->v); } @@ -299,7 +327,7 @@ psppire_variable_get_value_labels(const struct PsppireVariable *pv) g_return_val_if_fail(pv, NULL); g_return_val_if_fail(pv->v, NULL); - return pv->v->val_labs; + return var_get_value_labels (pv->v); } @@ -309,7 +337,7 @@ psppire_variable_get_alignment(const struct PsppireVariable *pv) g_return_val_if_fail(pv, -1); g_return_val_if_fail(pv->v, -1); - return pv->v->alignment; + return var_get_alignment (pv->v); } @@ -320,7 +348,7 @@ psppire_variable_get_measure(const struct PsppireVariable *pv) g_return_val_if_fail(pv, -1); g_return_val_if_fail(pv->v, -1); - return pv->v->measure - 1; + return var_get_measure (pv->v) - 1; } gint @@ -329,7 +357,7 @@ psppire_variable_get_type(const struct PsppireVariable *pv) g_return_val_if_fail(pv, -1); g_return_val_if_fail(pv->v, -1); - return pv->v->type; + return var_get_type (pv->v); } @@ -339,15 +367,27 @@ psppire_variable_get_width(const struct PsppireVariable *pv) g_return_val_if_fail(pv, -1); g_return_val_if_fail(pv->v, -1); - return pv->v->width; + return var_get_width (pv->v); } + +gint +psppire_variable_get_fv(const struct PsppireVariable *pv) +{ + g_return_val_if_fail(pv, -1); + g_return_val_if_fail(pv->v, -1); + + return var_get_case_index (pv->v); +} + + + gint psppire_variable_get_index(const struct PsppireVariable *pv) { g_return_val_if_fail(pv, -1); g_return_val_if_fail(pv->v, -1); - return pv->v->fv; + return var_get_dict_index (pv->v); }