/*
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
#include <data/missing-values.h>
#include <data/value-labels.h>
#include <data/format.h>
+#include <libpspp/message.h>
+
+#include <libpspp/misc.h>
#include "psppire-variable.h"
#include "psppire-dict.h"
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);
}
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;
}
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;
}