X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fgui%2Fpsppire-dialog-action-logistic.c;h=85137868c624cc9b854a036015f48dcd4395e417;hb=a3a1e6b575eb7cbe4e7d89ea67d35b18c8ef5055;hp=fab3b15aa1e35dcd183b689283191041f317e2c3;hpb=e7b32c45b42723e8559c81fbad1d694339ac7fe6;p=pspp diff --git a/src/ui/gui/psppire-dialog-action-logistic.c b/src/ui/gui/psppire-dialog-action-logistic.c index fab3b15aa1..85137868c6 100644 --- a/src/ui/gui/psppire-dialog-action-logistic.c +++ b/src/ui/gui/psppire-dialog-action-logistic.c @@ -68,19 +68,72 @@ refresh (PsppireDialogAction *rd_) } +static void +on_opts_clicked (PsppireDialogActionLogistic *act) +{ + int ret; + + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(act->conf_checkbox), act->conf); + gtk_spin_button_set_value (GTK_SPIN_BUTTON (act->conf_entry), act->conf_level); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(act->const_checkbox), act->constant); + + 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)); + act->max_iterations = gtk_spin_button_get_value (GTK_SPIN_BUTTON (act->iterations_entry)); + } +} + + static void psppire_dialog_action_logistic_activate (GtkAction *a) { PsppireDialogActionLogistic *act = PSPPIRE_DIALOG_ACTION_LOGISTIC (a); PsppireDialogAction *pda = PSPPIRE_DIALOG_ACTION (a); + GtkWidget *opts_button; GtkBuilder *xml = builder_new ("logistic.ui"); pda->dialog = get_widget_assert (xml, "logistic-dialog"); pda->source = get_widget_assert (xml, "dict-view"); + act->cut_point = 0.5; + act->max_iterations = 20; + act->constant = true; + act->conf = false; + act->conf_level = 95; act->dep_var = get_widget_assert (xml, "dependent-entry"); act->indep_vars = get_widget_assert (xml, "indep-view"); + act->opts_dialog = get_widget_assert (xml, "options-dialog"); + act->conf_checkbox = get_widget_assert (xml, "checkbutton2"); + act->conf_entry = get_widget_assert (xml, "spinbutton1"); + act->const_checkbox = get_widget_assert (xml, "checkbutton1"); + + act->iterations_entry = get_widget_assert (xml, "spinbutton3"); + act->cut_point_entry = get_widget_assert (xml, "spinbutton2"); + + opts_button = get_widget_assert (xml, "options-button"); + + g_signal_connect_swapped (opts_button, "clicked", + G_CALLBACK (on_opts_clicked), act); + + g_signal_connect (act->conf_checkbox, "toggled", + G_CALLBACK (set_sensitivity_from_toggle), + act->conf_entry); + + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(act->conf_checkbox), TRUE); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(act->conf_checkbox), FALSE); g_object_unref (xml); @@ -100,22 +153,38 @@ 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)); - GString *string = g_string_new ("LOGISTIC REGRESSION "); + ds_init_cstr (&str, "LOGISTIC REGRESSION "); - const gchar *dep = gtk_entry_get_text (GTK_ENTRY (rd->dep_var)); + ds_put_cstr (&str, dep); + + ds_put_cstr (&str, " WITH "); + + psppire_var_view_append_names_str (PSPPIRE_VAR_VIEW (rd->indep_vars), 0, &str); + + ds_put_cstr (&str, "\n\t/CRITERIA ="); + + syntax_gen_pspp (&str, " CUT(%g)", rd->cut_point); - g_string_append (string, dep); + syntax_gen_pspp (&str, " ITERATE(%d)", rd->max_iterations); - g_string_append (string, " WITH "); + if (rd->conf) + { + syntax_gen_pspp (&str, "\n\t/PRINT = CI(%g)", rd->conf_level); + } - psppire_var_view_append_names (PSPPIRE_VAR_VIEW (rd->indep_vars), 0, string); + if (rd->constant) + ds_put_cstr (&str, "\n\t/NOORIGIN"); + else + ds_put_cstr (&str, "\n\t/ORIGIN"); - g_string_append (string, ".\n"); + ds_put_cstr (&str, ".\n"); - text = string->str; + text = ds_steal_cstr (&str); - g_string_free (string, FALSE); + ds_destroy (&str); return text; }