-/* psppire-var-store.c
-
- PSPPIRE --- A Graphical User Interface for PSPP
+/* PSPPIRE - a graphical user interface for PSPP.
Copyright (C) 2006 Free Software Foundation
- This program is free software; you can redistribute it and/or modify
+ This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
+ the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- 02110-1301, USA. */
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
#include <config.h>
#include <string.h>
#include "missing-val-dialog.h"
#include <data/value-labels.h>
+#include "var-display.h"
#define TRAILING_ROWS 40
static void psppire_var_store_sheet_model_init (GSheetModelIface *iface);
static void psppire_var_store_finalize (GObject *object);
+
+gchar * missing_values_to_string (const struct variable *pv, GError **err);
+
+
static gchar *psppire_var_store_get_string (const GSheetModel *sheet_model, gint row, gint column);
static gboolean psppire_var_store_clear (GSheetModel *model, gint row, gint col);
if ( !pv )
return TRUE;
- if ( VAR_STRING == var_get_type (pv) && column == COL_DECIMALS )
+ if ( var_is_alpha (pv) && column == COL_DECIMALS )
return FALSE;
- write_spec =var_get_write_format (pv);
+ write_spec = var_get_print_format (pv);
switch ( write_spec->type )
{
static gboolean
psppire_var_store_is_editable (const GSheetModel *model, gint row, gint column)
{
- PsppireVarStore *store = PSPPIRE_VAR_STORE(model);
+ PsppireVarStore *store = PSPPIRE_VAR_STORE (model);
return psppire_var_store_item_editable (store, row, column);
}
static const GdkColor *
psppire_var_store_get_foreground (const GSheetModel *model, gint row, gint column)
{
- PsppireVarStore *store = PSPPIRE_VAR_STORE(model);
+ PsppireVarStore *store = PSPPIRE_VAR_STORE (model);
if ( ! psppire_var_store_item_editable (store, row, column) )
return &store->disabled;
psppire_var_store_get_font_desc (const GSheetModel *model,
gint row, gint column)
{
- PsppireVarStore *store = PSPPIRE_VAR_STORE(model);
+ PsppireVarStore *store = PSPPIRE_VAR_STORE (model);
return store->font_desc;
}
static void
var_change_callback (GtkWidget *w, gint n, gpointer data)
{
- GSheetModel *model = G_SHEET_MODEL(data);
+ GSheetModel *model = G_SHEET_MODEL (data);
+
g_sheet_model_range_changed (model,
n, 0, n, n_COLS);
}
static void
var_delete_callback (GtkWidget *w, gint first, gint n, gpointer data)
{
- GSheetModel *model = G_SHEET_MODEL(data);
+ GSheetModel *model = G_SHEET_MODEL (data);
g_sheet_model_rows_deleted (model, first, n);
}
static void
var_insert_callback (GtkWidget *w, gint row, gpointer data)
{
- GSheetModel *model = G_SHEET_MODEL(data);
+ GSheetModel *model = G_SHEET_MODEL (data);
g_sheet_model_rows_inserted (model, row, 1);
}
var_store->dict = dict;
- g_signal_connect (dict, "variable-changed", G_CALLBACK(var_change_callback),
+ g_signal_connect (dict, "variable-changed", G_CALLBACK (var_change_callback),
var_store);
- g_signal_connect (dict, "variables-deleted", G_CALLBACK(var_delete_callback),
+ g_signal_connect (dict, "variables-deleted", G_CALLBACK (var_delete_callback),
var_store);
- g_signal_connect (dict, "variable-inserted", G_CALLBACK(var_insert_callback),
+ g_signal_connect (dict, "variable-inserted", G_CALLBACK (var_insert_callback),
var_store);
/* The entire model has changed */
- g_sheet_model_range_changed (G_SHEET_MODEL(var_store), -1, -1, -1, -1);
+ g_sheet_model_range_changed (G_SHEET_MODEL (var_store), -1, -1, -1, -1);
}
static void
static gchar *
psppire_var_store_get_string (const GSheetModel *model, gint row, gint column)
{
- PsppireVarStore *store = PSPPIRE_VAR_STORE(model);
+ PsppireVarStore *store = PSPPIRE_VAR_STORE (model);
struct variable *pv;
{
struct variable *pv ;
- PsppireVarStore *var_store = PSPPIRE_VAR_STORE(model);
+ PsppireVarStore *var_store = PSPPIRE_VAR_STORE (model);
if ( row >= psppire_dict_get_var_cnt (var_store->dict))
return FALSE;
{
struct variable *pv ;
- PsppireVarStore *var_store = PSPPIRE_VAR_STORE(model);
+ PsppireVarStore *var_store = PSPPIRE_VAR_STORE (model);
if ( row >= psppire_dict_get_var_cnt (var_store->dict))
return FALSE;
switch (col)
{
case COL_NAME:
- psppire_dict_rename_var (var_store->dict, pv, text);
- return TRUE;
+ return psppire_dict_rename_var (var_store->dict, pv, text);
break;
case COL_COLUMNS:
if ( ! text) return FALSE;
}
+const static gchar none[] = N_("None");
+
static gchar *
text_for_column (const struct variable *pv, gint c, GError **err)
{
- static gchar none[] = N_("None");
-
static const gchar *const type_label[] =
{
N_("Numeric"),
case COL_MISSING:
{
- gchar *s;
- const struct missing_values *miss = var_get_missing_values (pv);
- if ( mv_is_empty (miss))
- return g_locale_to_utf8 (gettext (none), -1, 0, 0, err);
- else
- {
- if ( ! mv_has_range (miss))
- {
- GString *gstr = g_string_sized_new (10);
- const int n = mv_n_values (miss);
- gchar *mv[4] = {0,0,0,0};
- gint i;
- for (i = 0 ; i < n; ++i )
- {
- union value v;
- mv_peek_value (miss, &v, i);
- mv[i] = value_to_text (v, *write_spec);
- if ( i > 0 )
- g_string_append (gstr, ", ");
- g_string_append (gstr, mv[i]);
- g_free (mv[i]);
- }
- s = pspp_locale_to_utf8 (gstr->str, gstr->len, err);
- g_string_free (gstr, TRUE);
- }
- else
- {
- GString *gstr = g_string_sized_new (10);
- gchar *l, *h;
- union value low, high;
- mv_peek_range (miss, &low.f, &high.f);
-
- l = value_to_text (low, *write_spec);
- h = value_to_text (high, *write_spec);
-
- g_string_printf (gstr, "%s - %s", l, h);
- g_free (l);
- g_free (h);
-
- if ( mv_has_value (miss))
- {
- gchar *ss = 0;
- union value v;
- mv_peek_value (miss, &v, 0);
-
- ss = value_to_text (v, *write_spec);
-
- g_string_append (gstr, ", ");
- g_string_append (gstr, ss);
- free (ss);
- }
- s = pspp_locale_to_utf8 (gstr->str, gstr->len, err);
- g_string_free (gstr, TRUE);
- }
-
- return s;
- }
+ return missing_values_to_string (pv, err);
}
break;
case COL_VALUES:
break;
case COL_MEASURE:
{
- const gint measure = var_get_measure (pv);
-
- g_assert (measure < n_MEASURES);
- return g_locale_to_utf8 (gettext (measures[measure]),
- -1, 0, 0, err);
+ return measure_to_string (pv, err);
}
break;
}
store->font_desc = fd;
- g_sheet_model_range_changed (G_SHEET_MODEL(store), -1, -1, -1, -1);
+ g_sheet_model_range_changed (G_SHEET_MODEL (store), -1, -1, -1, -1);
}
psppire_var_store_get_row_count (const GSheetModel * model)
{
gint rows = 0;
- PsppireVarStore *vs = PSPPIRE_VAR_STORE(model);
+ PsppireVarStore *vs = PSPPIRE_VAR_STORE (model);
if (vs->dict)
rows = psppire_dict_get_var_cnt (vs->dict);
geometry_get_row_count (const GSheetRow *geom, gpointer data)
{
gint rows = 0;
- PsppireVarStore *vs = PSPPIRE_VAR_STORE(geom);
+ PsppireVarStore *vs = PSPPIRE_VAR_STORE (geom);
if (vs->dict)
rows = psppire_dict_get_var_cnt (vs->dict);
static gboolean
geometry_is_sensitive (const GSheetRow *geom, gint row, gpointer data)
{
- PsppireVarStore *vs = PSPPIRE_VAR_STORE(geom);
+ PsppireVarStore *vs = PSPPIRE_VAR_STORE (geom);
if ( ! vs->dict)
return FALSE;
iface->get_button_label = geometry_get_button_label;
}
+
+
+