/* PSPPIRE - a graphical user interface for PSPP.
- Copyright (C) 2008, 2010, 2011, 2012 Free Software Foundation
+ Copyright (C) 2008, 2010, 2011, 2012, 2016 Free Software Foundation
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
gtk_spin_button_set_value (GTK_SPIN_BUTTON (act->cut_point_entry), act->cut_point);
gtk_spin_button_set_value (GTK_SPIN_BUTTON (act->iterations_entry), act->max_iterations);
-
+
ret = psppire_dialog_run (PSPPIRE_DIALOG (act->opts_dialog));
if ( ret == PSPPIRE_RESPONSE_CONTINUE )
{
act->conf = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(act->conf_checkbox));
act->conf_level = gtk_spin_button_get_value (GTK_SPIN_BUTTON (act->conf_entry));
-
+
act->constant = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(act->const_checkbox));
act->cut_point = gtk_spin_button_get_value (GTK_SPIN_BUTTON (act->cut_point_entry));
}
-static void
-psppire_dialog_action_logistic_activate (PsppireDialogAction *a)
+static GtkBuilder *
+psppire_dialog_action_logistic_activate (PsppireDialogAction *a, GVariant *param)
{
PsppireDialogActionLogistic *act = PSPPIRE_DIALOG_ACTION_LOGISTIC (a);
PsppireDialogAction *pda = PSPPIRE_DIALOG_ACTION (a);
GtkWidget *opts_button;
- GHashTable *thing = psppire_dialog_action_get_hash_table (pda);
- GtkBuilder *xml = g_hash_table_lookup (thing, a);
- if (!xml)
- {
- xml = builder_new ("logistic.ui");
- g_hash_table_insert (thing, a, xml);
- }
+ GtkBuilder *xml = builder_new ( "logistic.ui");
pda->dialog = get_widget_assert (xml, "logistic-dialog");
pda->source = get_widget_assert (xml, "dict-view");
G_CALLBACK (on_opts_clicked), act);
g_signal_connect (act->conf_checkbox, "toggled",
- G_CALLBACK (set_sensitivity_from_toggle),
+ G_CALLBACK (set_sensitivity_from_toggle),
act->conf_entry);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(act->conf_checkbox), TRUE);
psppire_dialog_action_set_valid_predicate (pda,
dialog_state_valid);
- if (PSPPIRE_DIALOG_ACTION_CLASS (psppire_dialog_action_logistic_parent_class)->activate)
- PSPPIRE_DIALOG_ACTION_CLASS (psppire_dialog_action_logistic_parent_class)->activate (pda);
+ return xml;
}
static char *
-generate_syntax (PsppireDialogAction *a)
+generate_syntax (const PsppireDialogAction *a)
{
PsppireDialogActionLogistic *rd = PSPPIRE_DIALOG_ACTION_LOGISTIC (a);
gchar *text = NULL;
- struct string str;
+
const gchar *dep = gtk_entry_get_text (GTK_ENTRY (rd->dep_var));
- ds_init_cstr (&str, "LOGISTIC REGRESSION ");
+ GString *strx = g_string_new ("LOGISTIC REGRESSION ");
- ds_put_cstr (&str, dep);
+ g_string_append (strx, dep);
- ds_put_cstr (&str, " WITH ");
+ g_string_append (strx, " WITH");
- psppire_var_view_append_names_str (PSPPIRE_VAR_VIEW (rd->indep_vars), 0, &str);
+ GSList *vars = psppire_var_view_list_names (PSPPIRE_VAR_VIEW (rd->indep_vars), 0);
+ GSList *node = vars;
- ds_put_cstr (&str, "\n\t/CRITERIA =");
+ GString *var_names = g_string_new ("");
+ while (node)
+ {
+ g_string_prepend (var_names, var_get_name (node->data));
+ g_string_prepend (var_names, " ");
+ node = node->next;
+ }
+
+ g_string_append (strx, var_names->str);
+ g_string_free (var_names, TRUE);
+
+
+ GString *categoricals = g_string_new ("");
+ for (node = vars; node; node = node->next)
+ {
+ const struct variable *v = node->data;
+ enum measure m = var_get_measure (v);
+
+ if (m == MEASURE_NOMINAL || m == MEASURE_ORDINAL || var_is_alpha (v))
+ {
+ g_string_prepend (categoricals, var_get_name (v));
+ g_string_prepend (categoricals, " ");
+ }
+ }
+ if (0 != strcmp (categoricals->str, ""))
+ g_string_prepend (categoricals, "\n\t/CATEGORICAL =");
- syntax_gen_pspp (&str, " CUT(%g)", rd->cut_point);
+ g_string_append (strx, categoricals->str);
+ g_string_free (categoricals, TRUE);
+ g_slist_free (vars);
- syntax_gen_pspp (&str, " ITERATE(%d)", rd->max_iterations);
+ struct string opt_str;
+ ds_init_cstr (&opt_str, "\n\t/CRITERIA =");
+ syntax_gen_pspp (&opt_str, " CUT(%g)", rd->cut_point);
+ syntax_gen_pspp (&opt_str, " ITERATE(%d)", rd->max_iterations);
+ g_string_append (strx, ds_cstr (&opt_str));
+ ds_destroy (&opt_str);
if (rd->conf)
{
- syntax_gen_pspp (&str, "\n\t/PRINT = CI(%g)", rd->conf_level);
+ g_string_append_printf (strx, "\n\t/PRINT = CI(%g)", rd->conf_level);
}
- if (rd->constant)
- ds_put_cstr (&str, "\n\t/NOORIGIN");
+ if (rd->constant)
+ g_string_append (strx, "\n\t/NOORIGIN");
else
- ds_put_cstr (&str, "\n\t/ORIGIN");
+ g_string_append (strx, "\n\t/ORIGIN");
- ds_put_cstr (&str, ".\n");
+ g_string_append (strx, ".\n");
- text = ds_steal_cstr (&str);
+ text = strx->str;
- ds_destroy (&str);
+ g_string_free (strx, FALSE);
return text;
}
static void
psppire_dialog_action_logistic_class_init (PsppireDialogActionLogisticClass *class)
{
- psppire_dialog_action_set_activation (class, psppire_dialog_action_logistic_activate);
+ PSPPIRE_DIALOG_ACTION_CLASS (class)->initial_activate = psppire_dialog_action_logistic_activate;
PSPPIRE_DIALOG_ACTION_CLASS (class)->generate_syntax = generate_syntax;
}