+
+typedef GType (*get_type_func)(void);
+
+static const get_type_func dialog_action_types[]=
+{
+ psppire_dialog_action_1sks_get_type,
+ psppire_dialog_action_autorecode_get_type,
+ psppire_dialog_action_aggregate_get_type,
+ psppire_dialog_action_binomial_get_type,
+ psppire_dialog_action_barchart_get_type,
+ psppire_dialog_action_chisquare_get_type,
+ psppire_dialog_action_compute_get_type,
+ psppire_dialog_action_comments_get_type,
+ psppire_dialog_action_correlation_get_type,
+ psppire_dialog_action_count_get_type,
+ psppire_dialog_action_crosstabs_get_type,
+ psppire_dialog_action_descriptives_get_type,
+ psppire_dialog_action_examine_get_type,
+ psppire_dialog_action_factor_get_type,
+ psppire_dialog_action_flip_get_type,
+ psppire_dialog_action_frequencies_get_type,
+ psppire_dialog_action_histogram_get_type,
+ psppire_dialog_action_logistic_get_type,
+ psppire_dialog_action_kmeans_get_type,
+ psppire_dialog_action_k_independent_get_type,
+ psppire_dialog_action_k_related_get_type,
+ psppire_dialog_action_means_get_type,
+ psppire_dialog_action_oneway_get_type,
+ psppire_dialog_action_paired_get_type,
+ psppire_dialog_action_indep_samps_get_type,
+ psppire_dialog_action_var_info_get_type,
+ psppire_dialog_action_rank_get_type,
+ psppire_dialog_action_recode_same_get_type,
+ psppire_dialog_action_recode_different_get_type,
+ psppire_dialog_action_reliability_get_type,
+ psppire_dialog_action_regression_get_type,
+ psppire_dialog_action_roc_get_type,
+ psppire_dialog_action_runs_get_type,
+ psppire_dialog_action_scatterplot_get_type,
+ psppire_dialog_action_select_get_type,
+ psppire_dialog_action_sort_get_type,
+ psppire_dialog_action_split_get_type,
+ psppire_dialog_action_tt1s_get_type,
+ psppire_dialog_action_two_sample_get_type,
+ psppire_dialog_action_weight_get_type,
+ psppire_dialog_action_univariate_get_type
+};
+
+
+static void
+preregister_actions (void)
+{
+ int i;
+ for (i = 0; i < sizeof (dialog_action_types) / sizeof (dialog_action_types[0]); ++i)
+ {
+ get_type_func x = dialog_action_types[i];
+ x ();
+ }
+}
+
+
+static void
+tx_string_to_double (const GValue *src, GValue *dest)
+{
+ const gchar *str = g_value_get_string (src);
+ gdouble dble = g_strtod (str, NULL);
+ g_value_set_double (dest, dble);
+}
+
+
+static void
+tx_string_to_int (const GValue *src, GValue *dest)
+{
+ const gchar *str = g_value_get_string (src);
+ gint x = atoi (str);
+ 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)
+{
+ 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);
+}
+
+