X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fgui%2Fpsppire-variable.c;h=0b0c24915081d916a84174a0a9626b0b21d6174c;hb=8acca2de53c1852f38726f70fc6516b34732a79f;hp=7d23f48bfbcaf6bea6dbdc3e1c96ac8793acb101;hpb=a19b858e0ac3c69e4a28c0ca6d8674427268a863;p=pspp-builds.git diff --git a/src/ui/gui/psppire-variable.c b/src/ui/gui/psppire-variable.c index 7d23f48b..0b0c2491 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" @@ -87,11 +90,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 = pv->v->write; fmt.d = decimals; @@ -103,17 +108,31 @@ 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 = pv->v->write; fmt.w = width; if ( pv->v->type == ALPHA ) + { + gint old_var_cnt , new_var_cnt ; + + if ( pv->v->width == 0 ) + old_var_cnt = 1; + else + old_var_cnt = DIV_RND_UP(pv->v->width, 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); } @@ -121,15 +140,30 @@ 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 ( pv->v->width == 0 ) + old_var_cnt = 1; + else + old_var_cnt = DIV_RND_UP(pv->v->width, MAX_SHORT_STRING); + if ( type == NUMERIC ) pv->v->width = 0; + if ( pv->v->width == 0 ) + new_var_cnt = 1; + else + new_var_cnt = DIV_RND_UP(pv->v->width, 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; } @@ -142,17 +176,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, pv->v->type) + && fmt_check_width_compat (fmt, pv->v->width)) { + msg_enable (); pv->v->write = pv->v->print = *fmt; psppire_dict_var_changed(pv->dict, pv->v->index); return TRUE; } + msg_enable (); return FALSE; } @@ -342,8 +376,9 @@ psppire_variable_get_width(const struct PsppireVariable *pv) return pv->v->width; } + 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); @@ -351,3 +386,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; +} +