Finally got the datasheet responding fast enough.
[pspp-builds.git] / src / ui / gui / psppire-var-store.c
index 9ce4f38f63245e5ae8a98de5e2614b3140e5798a..3ba2da2a24b6d13692b4aada461a118717d04e15 100644 (file)
@@ -1,11 +1,9 @@
-/* psppire-var-store.c
-
-   PSPPIRE --- A Graphical User Interface for PSPP
+/* PSPPIRE - a graphical user interface for PSPP.
    Copyright (C) 2006  Free Software Foundation
 
    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
    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,
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
@@ -14,9 +12,7 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
    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 <config.h>
 #include <string.h>
@@ -43,6 +39,7 @@
 #include "missing-val-dialog.h"
 #include <data/value-labels.h>
 
 #include "missing-val-dialog.h"
 #include <data/value-labels.h>
 
+#include "var-display.h"
 
 #define TRAILING_ROWS 40
 
 
 #define TRAILING_ROWS 40
 
@@ -51,15 +48,19 @@ static void         psppire_var_store_class_init      (PsppireVarStoreClass *cla
 static void         psppire_var_store_sheet_model_init (GSheetModelIface *iface);
 static void         psppire_var_store_finalize        (GObject           *object);
 
 static void         psppire_var_store_sheet_model_init (GSheetModelIface *iface);
 static void         psppire_var_store_finalize        (GObject           *object);
 
-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);
+gchar * missing_values_to_string (const struct variable *pv, GError **err);
+
+
+static gchar *psppire_var_store_get_string (const GSheetModel *sheet_model, glong row, glong column);
+
+static gboolean  psppire_var_store_clear (GSheetModel *model,  glong row, glong col);
 
 
 static gboolean psppire_var_store_set_string (GSheetModel *model,
 
 
 static gboolean psppire_var_store_set_string (GSheetModel *model,
-                                         const gchar *text, gint row, gint column);
+                                         const gchar *text, glong row, glong column);
 
 
-static gint psppire_var_store_get_row_count (const GSheetModel * model);
+static glong psppire_var_store_get_row_count (const GSheetModel * model);
 
 static gchar *text_for_column (const struct variable *pv, gint c, GError **err);
 
 
 static gchar *text_for_column (const struct variable *pv, gint c, GError **err);
 
@@ -145,7 +146,7 @@ psppire_var_store_init (PsppireVarStore *var_store)
 }
 
 static gboolean
 }
 
 static gboolean
-psppire_var_store_item_editable (PsppireVarStore *var_store, gint row, gint column)
+psppire_var_store_item_editable (PsppireVarStore *var_store, glong row, glong column)
 {
   const struct fmt_spec *write_spec ;
 
 {
   const struct fmt_spec *write_spec ;
 
@@ -154,10 +155,10 @@ psppire_var_store_item_editable (PsppireVarStore *var_store, gint row, gint colu
   if ( !pv )
     return TRUE;
 
   if ( !pv )
     return TRUE;
 
-  if ( VAR_STRING == var_get_type (pv) && column == COL_DECIMALS )
+  if ( var_is_alpha (pv) && column == COL_DECIMALS )
     return FALSE;
 
     return FALSE;
 
-  write_spec =var_get_write_format (pv);
+  write_spec = var_get_print_format (pv);
 
   switch ( write_spec->type )
     {
 
   switch ( write_spec->type )
     {
@@ -186,13 +187,13 @@ psppire_var_store_item_editable (PsppireVarStore *var_store, gint row, gint colu
 
 
 struct variable *
 
 
 struct variable *
-psppire_var_store_get_var (PsppireVarStore *store, gint row)
+psppire_var_store_get_var (PsppireVarStore *store, glong row)
 {
   return psppire_dict_get_variable (store->dict, row);
 }
 
 static gboolean
 {
   return psppire_dict_get_variable (store->dict, row);
 }
 
 static gboolean
-psppire_var_store_is_editable (const GSheetModel *model, gint row, gint column)
+psppire_var_store_is_editable (const GSheetModel *model, glong row, glong column)
 {
   PsppireVarStore *store = PSPPIRE_VAR_STORE (model);
   return psppire_var_store_item_editable (store, row, column);
 {
   PsppireVarStore *store = PSPPIRE_VAR_STORE (model);
   return psppire_var_store_item_editable (store, row, column);
@@ -200,7 +201,7 @@ psppire_var_store_is_editable (const GSheetModel *model, gint row, gint column)
 
 
 static const GdkColor *
 
 
 static const GdkColor *
-psppire_var_store_get_foreground (const GSheetModel *model, gint row, gint column)
+psppire_var_store_get_foreground (const GSheetModel *model, glong row, glong column)
 {
   PsppireVarStore *store = PSPPIRE_VAR_STORE (model);
 
 {
   PsppireVarStore *store = PSPPIRE_VAR_STORE (model);
 
@@ -213,7 +214,7 @@ psppire_var_store_get_foreground (const GSheetModel *model, gint row, gint colum
 
 const PangoFontDescription *
 psppire_var_store_get_font_desc (const GSheetModel *model,
 
 const PangoFontDescription *
 psppire_var_store_get_font_desc (const GSheetModel *model,
-                             gint row, gint column)
+                             glong row, glong column)
 {
   PsppireVarStore *store = PSPPIRE_VAR_STORE (model);
 
 {
   PsppireVarStore *store = PSPPIRE_VAR_STORE (model);
 
@@ -280,7 +281,7 @@ var_delete_callback (GtkWidget *w, gint first, gint n, gpointer data)
 
 
 static void
 
 
 static void
-var_insert_callback (GtkWidget *w, gint row, gpointer data)
+var_insert_callback (GtkWidget *w, glong row, gpointer data)
 {
   GSheetModel *model = G_SHEET_MODEL (data);
 
 {
   GSheetModel *model = G_SHEET_MODEL (data);
 
@@ -326,7 +327,7 @@ psppire_var_store_finalize (GObject *object)
 }
 
 static gchar *
 }
 
 static gchar *
-psppire_var_store_get_string (const GSheetModel *model, gint row, gint column)
+psppire_var_store_get_string (const GSheetModel *model, glong row, glong column)
 {
   PsppireVarStore *store = PSPPIRE_VAR_STORE (model);
 
 {
   PsppireVarStore *store = PSPPIRE_VAR_STORE (model);
 
@@ -346,7 +347,7 @@ psppire_var_store_get_string (const GSheetModel *model, gint row, gint column)
    Returns true if anything was updated, false otherwise.
 */
 static gboolean
    Returns true if anything was updated, false otherwise.
 */
 static gboolean
-psppire_var_store_clear (GSheetModel *model,  gint row, gint col)
+psppire_var_store_clear (GSheetModel *model,  glong row, glong col)
 {
   struct variable *pv ;
 
 {
   struct variable *pv ;
 
@@ -377,7 +378,7 @@ psppire_var_store_clear (GSheetModel *model,  gint row, gint col)
 */
 static gboolean
 psppire_var_store_set_string (GSheetModel *model,
 */
 static gboolean
 psppire_var_store_set_string (GSheetModel *model,
-                         const gchar *text, gint row, gint col)
+                         const gchar *text, glong row, glong col)
 {
   struct variable *pv ;
 
 {
   struct variable *pv ;
 
@@ -394,8 +395,7 @@ psppire_var_store_set_string (GSheetModel *model,
   switch (col)
     {
     case COL_NAME:
   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;
       break;
     case COL_COLUMNS:
       if ( ! text) return FALSE;
@@ -465,11 +465,11 @@ psppire_var_store_set_string (GSheetModel *model,
 }
 
 
 }
 
 
+const static gchar none[] = N_("None");
+
 static  gchar *
 text_for_column (const struct variable *pv, gint c, GError **err)
 {
 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"),
   static const gchar *const type_label[] =
     {
       N_("Numeric"),
@@ -581,63 +581,7 @@ text_for_column (const struct variable *pv, gint c, GError **err)
 
     case COL_MISSING:
       {
 
     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_VALUES:
@@ -679,11 +623,7 @@ text_for_column (const struct variable *pv, gint c, GError **err)
       break;
     case COL_MEASURE:
       {
       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;
     }
       }
       break;
     }
@@ -712,7 +652,7 @@ psppire_var_store_set_font (PsppireVarStore *store, const PangoFontDescription *
 }
 
 
 }
 
 
-static gint
+static glong
 psppire_var_store_get_row_count (const GSheetModel * model)
 {
   gint rows = 0;
 psppire_var_store_get_row_count (const GSheetModel * model)
 {
   gint rows = 0;
@@ -726,7 +666,7 @@ psppire_var_store_get_row_count (const GSheetModel * model)
 
 /* Row related funcs */
 
 
 /* Row related funcs */
 
-static gint
+static glong
 geometry_get_row_count (const GSheetRow *geom, gpointer data)
 {
   gint rows = 0;
 geometry_get_row_count (const GSheetRow *geom, gpointer data)
 {
   gint rows = 0;
@@ -740,14 +680,14 @@ geometry_get_row_count (const GSheetRow *geom, gpointer data)
 
 
 static gint
 
 
 static gint
-geometry_get_height (const GSheetRow *geom, gint row, gpointer data)
+geometry_get_height (const GSheetRow *geom, glong row, gpointer data)
 {
   return 25;
 }
 
 
 static gboolean
 {
   return 25;
 }
 
 
 static gboolean
-geometry_is_sensitive (const GSheetRow *geom, gint row, gpointer data)
+geometry_is_sensitive (const GSheetRow *geom, glong row, gpointer data)
 {
   PsppireVarStore *vs = PSPPIRE_VAR_STORE (geom);
 
 {
   PsppireVarStore *vs = PSPPIRE_VAR_STORE (geom);
 
@@ -765,14 +705,13 @@ gboolean always_true ()
 
 
 static gchar *
 
 
 static gchar *
-geometry_get_button_label (const GSheetRow *geom, gint unit, gpointer data)
+geometry_get_button_label (const GSheetRow *geom, glong unit, gpointer data)
 {
 {
-  gchar *label = g_strdup_printf (_("%d"), unit);
+  gchar *label = g_strdup_printf (_("%ld"), unit);
 
   return label;
 }
 
 
   return label;
 }
 
-
 static void
 psppire_var_store_sheet_row_init (GSheetRowIface *iface)
 {
 static void
 psppire_var_store_sheet_row_init (GSheetRowIface *iface)
 {
@@ -784,3 +723,6 @@ psppire_var_store_sheet_row_init (GSheetRowIface *iface)
 
   iface->get_button_label = geometry_get_button_label;
 }
 
   iface->get_button_label = geometry_get_button_label;
 }
+
+
+