New transform function for converting enums to strings
authorJohn Darrington <john@darrington.wattle.id.au>
Sat, 19 Mar 2016 16:16:47 +0000 (17:16 +0100)
committerJohn Darrington <john@darrington.wattle.id.au>
Sat, 19 Mar 2016 16:16:47 +0000 (17:16 +0100)
src/ui/gui/widgets.c

index c66c42a58f18f974d9b625c8a12da4666b791644..042b8fcee76ddaafa2e409d27dbd042709a4f3ac 100644 (file)
@@ -4,6 +4,7 @@
 
 #include "widgets.h"
 
+#include "gettext.h"
 
 #include "psppire-dialog.h"
 #include "psppire-selector.h"
@@ -136,26 +137,43 @@ tx_string_to_int (const GValue *src, GValue *dest)
   g_value_set_int (dest, x);
 }
 
+static void
+enum_to_string (const GValue *src, GValue *dest)
+{
+  gint n = g_value_get_enum (src);
+  GType t = G_VALUE_TYPE (src);
+  GEnumClass *ec = g_type_class_ref (t);
+  GEnumValue *ev = g_enum_get_value (ec, n);
+
+  g_value_set_string (dest, gettext (ev->value_nick));
+}
+
 
 
 GType align_enum_type;
 GType measure_enum_type;
 GType role_enum_type;
 
+
 extern const GEnumValue align[];
 extern const GEnumValue measure[];
 extern const GEnumValue role[];
 
+
+
 static void
 preregister_misc (void)
 {
-  g_value_register_transform_func (G_TYPE_STRING, G_TYPE_DOUBLE, tx_string_to_double);
-  g_value_register_transform_func (G_TYPE_STRING, G_TYPE_INT, tx_string_to_int);
-
   align_enum_type = g_enum_register_static ("PsppAlignment", align);
   measure_enum_type = g_enum_register_static ("PsppMeasure", measure);
   role_enum_type = g_enum_register_static ("PsppRole", role);
 
+  g_value_register_transform_func (G_TYPE_STRING, G_TYPE_DOUBLE, tx_string_to_double);
+  g_value_register_transform_func (G_TYPE_STRING, G_TYPE_INT, tx_string_to_int);
+  
+  g_value_register_transform_func (measure_enum_type, G_TYPE_STRING, enum_to_string);
+  g_value_register_transform_func (align_enum_type, G_TYPE_STRING, enum_to_string);
+  g_value_register_transform_func (role_enum_type, G_TYPE_STRING, enum_to_string);
 }