psppire-dictview: Generalize psppire_dict_view_get_var_measurement_stock_id().
authorBen Pfaff <blp@cs.stanford.edu>
Mon, 2 Sep 2013 23:14:28 +0000 (16:14 -0700)
committerBen Pfaff <blp@cs.stanford.edu>
Wed, 4 Sep 2013 04:56:30 +0000 (21:56 -0700)
This change allows finding a stock-id speculatively, without having a
variable on hand.

src/ui/gui/psppire-dictview.c
src/ui/gui/psppire-dictview.h
src/ui/gui/psppire-var-sheet.c

index b75cf3dd9c178e9fad0cd46045861c7ac2fe5e37..1820d41179d51a45a38a5a9eb2eb53b3067bec64 100644 (file)
@@ -338,74 +338,53 @@ var_icon_cell_data_func (GtkTreeViewColumn *col,
                       gpointer data)
 {
   struct variable *var;
+
   gtk_tree_model_get (model, iter, DICT_TVM_COL_VAR, &var, -1);
 
   g_object_set (cell, "stock_id",
-                psppire_dict_view_get_var_measurement_stock_id (var), NULL);
+                get_var_measurement_stock_id (var_get_print_format (var)->type,
+                                              var_get_measure (var)),
+                NULL);
 }
 
 const char *
-psppire_dict_view_get_var_measurement_stock_id (const struct variable *var)
+get_var_measurement_stock_id (enum fmt_type type, enum measure measure)
 {
-  if ( var_is_alpha (var))
+  switch (fmt_get_category (type))
     {
-      switch ( var_get_measure (var))
+    case FMT_CAT_STRING:
+      switch (measure)
        {
-       case MEASURE_NOMINAL:
-         return ("variable-string-nominal");
-         break;
-       case MEASURE_ORDINAL:
-         return ("variable-string-ordinal");
-         break;
-       case MEASURE_SCALE:
-         return ("variable-string-scale");
-         break;
-
-       default:
-         g_return_val_if_reached ("");
+       case MEASURE_NOMINAL: return "variable-string-nominal";
+       case MEASURE_ORDINAL: return "variable-string-ordinal";
+       case MEASURE_SCALE:   return "variable-string-scale";
+        case n_MEASURES: break;
        }
-    }
-  else
-    {
-      const struct fmt_spec *fs = var_get_print_format (var);
-      int cat = fmt_get_category (fs->type);
+      break;
 
-      if ( ( FMT_CAT_DATE | FMT_CAT_TIME ) & cat )
-       {
-         switch ( var_get_measure (var))
-           {
-           case MEASURE_NOMINAL:
-             return ("variable-date-nominal");
-             break;
-           case MEASURE_ORDINAL:
-             return ("variable-date-ordinal");
-             break;
-           case MEASURE_SCALE:
-             return ("variable-date-scale");
-               break;
-           default:
-             g_assert_not_reached ();
-           };
-       }
-      else
-       {
-         switch ( var_get_measure (var))
-           {
-           case MEASURE_NOMINAL:
-             return ("variable-nominal");
-             break;
-           case MEASURE_ORDINAL:
-             return ("variable-ordinal");
-             break;
-           case MEASURE_SCALE:
-             return ("variable-scale");
-             break;
-           default:
-             g_assert_not_reached ();
-           };
+    case FMT_CAT_DATE:
+    case FMT_CAT_TIME:
+      switch (measure)
+        {
+        case MEASURE_NOMINAL: return "variable-date-nominal";
+        case MEASURE_ORDINAL: return "variable-date-ordinal";
+        case MEASURE_SCALE:   return "variable-date-scale";
+        case n_MEASURES: break;
+        }
+      break;
+
+    default:
+      switch (measure)
+        {
+        case MEASURE_NOMINAL: return "variable-nominal";
+        case MEASURE_ORDINAL: return "variable-ordinal";
+        case MEASURE_SCALE:   return "variable-scale";
+        case n_MEASURES: break;
        }
+      break;
     }
-  return NULL;
+
+  g_return_val_if_reached ("");
 }
 
 
index fb8eda20efb03b0b171a6b42d2b7d8a9906a9630..bf41778ea9bd9a9153ff18e10c03e6117fe80520 100644 (file)
@@ -23,6 +23,7 @@
 #include <glib-object.h>
 #include <gtk/gtk.h>
 
+#include "data/format.h"
 #include "psppire-dict.h"
 #include "dict-display.h"
 
@@ -62,8 +63,7 @@ struct _PsppireDictViewClass
 GType      psppire_dict_view_get_type        (void);
 struct variable * psppire_dict_view_get_selected_variable (PsppireDictView *);
 
-const char *psppire_dict_view_get_var_measurement_stock_id (
-  const struct variable *);
+const char *get_var_measurement_stock_id (enum fmt_type, enum measure);
 
 G_END_DECLS
 
index b5f305cee38c25c7a08e45cc354fb2560ae12d31..837d1125806755b6bdd1fc2487e233bcaf3843e6 100644 (file)
@@ -464,9 +464,14 @@ render_var_cell (PsppSheetViewColumn *tree_column,
                       "editable", TRUE,
                       NULL);
       else
-        g_object_set (cell, "stock-id",
-                      psppire_dict_view_get_var_measurement_stock_id (var),
-                      NULL);
+        {
+          enum fmt_type type = var_get_print_format (var)->type;
+          enum measure measure = var_get_measure (var);
+
+          g_object_set (cell, "stock-id",
+                        get_var_measurement_stock_id (type, measure),
+                        NULL);
+        }
       break;
 
     case VS_ROLE: