2 PSPPIRE --- A Graphical User Interface for PSPP
3 Copyright (C) 2004, 2006 Free Software Foundation
4 Written by John Darrington
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
24 #include <data/missing-values.h>
25 #include <data/value-labels.h>
26 #include <data/format.h>
27 #include <libpspp/message.h>
29 #include <libpspp/misc.h>
31 #include "psppire-variable.h"
32 #include "psppire-dict.h"
37 psppire_variable_set_name(struct PsppireVariable *pv, const gchar *text)
39 g_return_val_if_fail(pv, FALSE);
40 g_return_val_if_fail(pv->dict, FALSE);
41 g_return_val_if_fail(pv->v, FALSE);
46 if ( 0 == strcmp(pv->v->name, text))
49 if ( ! psppire_dict_check_name(pv->dict, text, TRUE) )
52 dict_rename_var(pv->dict->dict, pv->v, text);
54 psppire_dict_var_changed(pv->dict, pv->v->index);
61 psppire_variable_set_columns(struct PsppireVariable *pv, gint columns)
63 g_return_val_if_fail(pv, FALSE);
64 g_return_val_if_fail(pv->dict, FALSE);
65 g_return_val_if_fail(pv->v, FALSE);
67 pv->v->display_width = columns;
69 psppire_dict_var_changed(pv->dict, pv->v->index);
75 psppire_variable_set_label(struct PsppireVariable *pv, const gchar *label)
77 g_return_val_if_fail(pv, FALSE);
78 g_return_val_if_fail(pv->dict, FALSE);
79 g_return_val_if_fail(pv->v, FALSE);
82 pv->v->label = g_strdup(label);
84 psppire_dict_var_changed(pv->dict, pv->v->index);
91 psppire_variable_set_decimals(struct PsppireVariable *pv, gint decimals)
95 g_return_val_if_fail(pv, FALSE);
96 g_return_val_if_fail(pv->dict, FALSE);
97 g_return_val_if_fail(pv->v, FALSE);
103 return psppire_variable_set_format(pv, &fmt);
109 psppire_variable_set_width(struct PsppireVariable *pv, gint width)
111 struct fmt_spec fmt ;
112 g_return_val_if_fail(pv, FALSE);
113 g_return_val_if_fail(pv->dict, FALSE);
114 g_return_val_if_fail(pv->v, FALSE);
120 if ( pv->v->type == ALPHA )
122 gint old_var_cnt , new_var_cnt ;
124 if ( pv->v->width == 0 )
127 old_var_cnt = DIV_RND_UP(pv->v->width, MAX_SHORT_STRING);
129 new_var_cnt = DIV_RND_UP(width, MAX_SHORT_STRING);
130 pv->v->width = width;
132 psppire_dict_resize_variable(pv->dict, pv,
133 old_var_cnt, new_var_cnt);
136 return psppire_variable_set_format(pv, &fmt);
141 psppire_variable_set_type(struct PsppireVariable *pv, int type)
143 gint old_var_cnt , new_var_cnt ;
145 g_return_val_if_fail(pv, FALSE);
146 g_return_val_if_fail(pv->dict, FALSE);
147 g_return_val_if_fail(pv->v, FALSE);
151 if ( pv->v->width == 0 )
154 old_var_cnt = DIV_RND_UP(pv->v->width, MAX_SHORT_STRING);
156 if ( type == NUMERIC )
159 if ( pv->v->width == 0 )
162 new_var_cnt = DIV_RND_UP(pv->v->width, MAX_SHORT_STRING);
164 psppire_dict_resize_variable(pv->dict, pv,
165 old_var_cnt, new_var_cnt);
167 psppire_dict_var_changed(pv->dict, pv->v->index);
173 psppire_variable_set_format(struct PsppireVariable *pv, struct fmt_spec *fmt)
175 g_return_val_if_fail(pv, FALSE);
176 g_return_val_if_fail(pv->dict, FALSE);
177 g_return_val_if_fail(pv->v, FALSE);
180 if ( fmt_check_output(fmt)
181 && fmt_check_type_compat (fmt, pv->v->type)
182 && fmt_check_width_compat (fmt, pv->v->width))
185 pv->v->write = pv->v->print = *fmt;
186 psppire_dict_var_changed(pv->dict, pv->v->index);
196 psppire_variable_set_value_labels(const struct PsppireVariable *pv,
197 const struct val_labs *vls)
199 g_return_val_if_fail(pv, FALSE);
200 g_return_val_if_fail(pv->dict, FALSE);
201 g_return_val_if_fail(pv->v, FALSE);
203 val_labs_destroy(pv->v->val_labs);
204 pv->v->val_labs = val_labs_copy(vls);
206 psppire_dict_var_changed(pv->dict, pv->v->index);
211 psppire_variable_set_missing(const struct PsppireVariable *pv,
212 const struct missing_values *miss)
214 g_return_val_if_fail(pv, FALSE);
215 g_return_val_if_fail(pv->dict, FALSE);
216 g_return_val_if_fail(pv->v, FALSE);
218 mv_copy(&pv->v->miss, miss);
220 psppire_dict_var_changed(pv->dict, pv->v->index);
225 psppire_variable_set_write_spec(const struct PsppireVariable *pv, struct fmt_spec fmt)
227 g_return_val_if_fail(pv, FALSE);
228 g_return_val_if_fail(pv->v, FALSE);
232 psppire_dict_var_changed(pv->dict, pv->v->index);
237 psppire_variable_set_print_spec(const struct PsppireVariable *pv, struct fmt_spec fmt)
239 g_return_val_if_fail(pv, FALSE);
240 g_return_val_if_fail(pv->v, FALSE);
244 psppire_dict_var_changed(pv->dict, pv->v->index);
251 psppire_variable_set_alignment(struct PsppireVariable *pv, gint align)
253 g_return_val_if_fail(pv, FALSE);
254 g_return_val_if_fail(pv->dict, FALSE);
255 g_return_val_if_fail(pv->v, FALSE);
257 pv->v->alignment = align;
259 psppire_dict_var_changed(pv->dict, pv->v->index);
265 psppire_variable_set_measure(struct PsppireVariable *pv, gint measure)
267 g_return_val_if_fail(pv, FALSE);
268 g_return_val_if_fail(pv->dict, FALSE);
269 g_return_val_if_fail(pv->v, FALSE);
271 pv->v->measure = measure + 1;
273 psppire_dict_var_changed(pv->dict, pv->v->index);
278 const struct fmt_spec *
279 psppire_variable_get_write_spec(const struct PsppireVariable *pv)
281 g_return_val_if_fail(pv, NULL);
282 g_return_val_if_fail(pv->v, NULL);
285 return &pv->v->write;
290 psppire_variable_get_name(const struct PsppireVariable *pv)
292 g_return_val_if_fail(pv, NULL);
293 g_return_val_if_fail(pv->v, NULL);
300 psppire_variable_get_columns(const struct PsppireVariable *pv)
302 g_return_val_if_fail(pv, -1);
303 g_return_val_if_fail(pv->v, -1);
305 return pv->v->display_width;
311 psppire_variable_get_label(const struct PsppireVariable *pv)
313 g_return_val_if_fail(pv, NULL);
314 g_return_val_if_fail(pv->v, NULL);
320 const struct missing_values *
321 psppire_variable_get_missing(const struct PsppireVariable *pv)
323 g_return_val_if_fail(pv, NULL);
324 g_return_val_if_fail(pv->v, NULL);
330 const struct val_labs *
331 psppire_variable_get_value_labels(const struct PsppireVariable *pv)
333 g_return_val_if_fail(pv, NULL);
334 g_return_val_if_fail(pv->v, NULL);
336 return pv->v->val_labs;
341 psppire_variable_get_alignment(const struct PsppireVariable *pv)
343 g_return_val_if_fail(pv, -1);
344 g_return_val_if_fail(pv->v, -1);
346 return pv->v->alignment;
352 psppire_variable_get_measure(const struct PsppireVariable *pv)
354 g_return_val_if_fail(pv, -1);
355 g_return_val_if_fail(pv->v, -1);
357 return pv->v->measure - 1;
361 psppire_variable_get_type(const struct PsppireVariable *pv)
363 g_return_val_if_fail(pv, -1);
364 g_return_val_if_fail(pv->v, -1);
371 psppire_variable_get_width(const struct PsppireVariable *pv)
373 g_return_val_if_fail(pv, -1);
374 g_return_val_if_fail(pv->v, -1);
381 psppire_variable_get_fv(const struct PsppireVariable *pv)
383 g_return_val_if_fail(pv, -1);
384 g_return_val_if_fail(pv->v, -1);
392 psppire_variable_get_index(const struct PsppireVariable *pv)
394 g_return_val_if_fail(pv, -1);
395 g_return_val_if_fail(pv->v, -1);