X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=src%2Fui%2Fgui%2Fpsppire-variable.c;h=6195a16b2ce1c1b421880a2d9e031d2f426dc684;hb=888d0f91d57e0c3c5a4206c30ac71eb87bf44227;hp=49dd84b6566fb56b4d2f5246873cbb2c18ca512c;hpb=573068f2bdcd3f8796e9646668fed910a90f890b;p=pspp-builds.git diff --git a/src/ui/gui/psppire-variable.c b/src/ui/gui/psppire-variable.c index 49dd84b6..6195a16b 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 @@ -24,6 +24,9 @@ #include #include #include +#include + +#include #include "psppire-variable.h" #include "psppire-dict.h" @@ -40,7 +43,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) ) @@ -61,7 +64,7 @@ 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); @@ -75,8 +78,7 @@ 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); @@ -93,8 +95,7 @@ psppire_variable_set_decimals(struct PsppireVariable *pv, gint decimals) g_return_val_if_fail(pv->dict, FALSE); g_return_val_if_fail(pv->v, FALSE); - fmt = pv->v->write; - + fmt = *var_get_write_format (pv->v); fmt.d = decimals; return psppire_variable_set_format(pv, &fmt); @@ -110,12 +111,24 @@ psppire_variable_set_width(struct PsppireVariable *pv, gint width) g_return_val_if_fail(pv->dict, FALSE); g_return_val_if_fail(pv->v, FALSE); - 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); + pv->v->width = width; + + psppire_dict_resize_variable(pv->dict, pv, + old_var_cnt, new_var_cnt); + } return psppire_variable_set_format(pv, &fmt); } @@ -124,14 +137,29 @@ 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); if ( type == NUMERIC ) pv->v->width = 0; + else if (var_get_width (pv->v)) + pv->v->width = 1; + + 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_resize_variable(pv->dict, pv, + old_var_cnt, new_var_cnt); psppire_dict_var_changed(pv->dict, pv->v->index); return TRUE; @@ -145,17 +173,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; + msg_enable (); + var_set_both_formats (pv->v, fmt); psppire_dict_var_changed(pv->dict, pv->v->index); return TRUE; } + msg_enable (); return FALSE; } @@ -184,7 +212,7 @@ 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); return TRUE; @@ -196,7 +224,7 @@ 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); return TRUE; @@ -208,7 +236,7 @@ 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); return TRUE; @@ -223,7 +251,7 @@ 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); return TRUE; @@ -237,7 +265,7 @@ 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); return TRUE; @@ -250,8 +278,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); } @@ -261,7 +288,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); } @@ -271,7 +298,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); } @@ -282,7 +309,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); } @@ -292,7 +319,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); } @@ -312,7 +339,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); } @@ -323,7 +350,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 @@ -332,7 +359,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); } @@ -342,11 +369,12 @@ 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_index(const struct PsppireVariable *pv) +psppire_variable_get_fv(const struct PsppireVariable *pv) { g_return_val_if_fail(pv, -1); g_return_val_if_fail(pv->v, -1); @@ -354,3 +382,14 @@ psppire_variable_get_index(const struct PsppireVariable *pv) return pv->v->fv; } + + +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->index; +} +