X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fgui%2Fpsppire-dialog-action-logistic.c;h=0c4dc19cdc27895565b6376c2a30071abf6d5a04;hb=c2d972816fce591524db963390a97ff32d55117c;hp=074b8e145621af4a1b2cf4b0d72ea35bd836c967;hpb=fc6620099bbc53762095569d5356b67a81a85402;p=pspp diff --git a/src/ui/gui/psppire-dialog-action-logistic.c b/src/ui/gui/psppire-dialog-action-logistic.c index 074b8e1456..0c4dc19cdc 100644 --- a/src/ui/gui/psppire-dialog-action-logistic.c +++ b/src/ui/gui/psppire-dialog-action-logistic.c @@ -96,13 +96,13 @@ on_opts_clicked (PsppireDialogActionLogistic *act) static void -psppire_dialog_action_logistic_activate (GtkAction *a) +psppire_dialog_action_logistic_activate (PsppireDialogAction *a) { PsppireDialogActionLogistic *act = PSPPIRE_DIALOG_ACTION_LOGISTIC (a); PsppireDialogAction *pda = PSPPIRE_DIALOG_ACTION (a); GtkWidget *opts_button; - GHashTable *thing = psppire_dialog_action_get_pointer (pda); + GHashTable *thing = psppire_dialog_action_get_hash_table (pda); GtkBuilder *xml = g_hash_table_lookup (thing, a); if (!xml) { @@ -156,38 +156,70 @@ generate_syntax (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 "); + + g_string_append (strx, dep); + + g_string_append (strx, " WITH"); + + GSList *vars = psppire_var_view_list_names (PSPPIRE_VAR_VIEW (rd->indep_vars), 0); + GSList *node = vars; + + 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; + } - ds_put_cstr (&str, dep); + g_string_append (strx, var_names->str); + g_string_free (var_names, TRUE); - ds_put_cstr (&str, " WITH "); - psppire_var_view_append_names_str (PSPPIRE_VAR_VIEW (rd->indep_vars), 0, &str); + 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 ="); - ds_put_cstr (&str, "\n\t/CRITERIA ="); + g_string_append (strx, categoricals->str); + g_string_free (categoricals, TRUE); + g_slist_free (vars); + + g_string_append (strx, "\n\t/CRITERIA ="); - syntax_gen_pspp (&str, " CUT(%g)", rd->cut_point); + g_string_append_printf (strx, " CUT(%g)", rd->cut_point); - syntax_gen_pspp (&str, " ITERATE(%d)", rd->max_iterations); + g_string_append_printf (strx, " ITERATE(%d)", rd->max_iterations); 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"); + 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; }