projects
/
pspp
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Rewrite and improve formatted output routines.
[pspp]
/
src
/
ui
/
gui
/
psppire-variable.c
diff --git
a/src/ui/gui/psppire-variable.c
b/src/ui/gui/psppire-variable.c
index 6443ee901ed2c069744c9cd9943956afcc100fb6..0b0c24915081d916a84174a0a9626b0b21d6174c 100644
(file)
--- 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
/*
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
Written by John Darrington
This program is free software; you can redistribute it and/or modify
@@
-21,9
+21,12
@@
#include <string.h>
#include <stdlib.h>
#include <string.h>
#include <stdlib.h>
-#include "missing-values.h"
-#include "value-labels.h"
-#include "format.h"
+#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"
#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)
{
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);
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;
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)
{
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);
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 )
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;
pv->v->width = width;
+ psppire_dict_resize_variable(pv->dict, pv,
+ old_var_cnt, new_var_cnt);
+ }
+
return psppire_variable_set_format(pv, &fmt);
}
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)
{
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;
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 ( 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;
}
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);
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;
}
pv->v->write = pv->v->print = *fmt;
psppire_dict_var_changed(pv->dict, pv->v->index);
return TRUE;
}
+ msg_enable ();
return FALSE;
}
return FALSE;
}
@@
-342,8
+376,9
@@
psppire_variable_get_width(const struct PsppireVariable *pv)
return pv->v->width;
}
return pv->v->width;
}
+
gint
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);
{
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;
}
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;
+}
+