X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fgui%2Fpsppire-dialog-action-logistic.c;h=5fb557031585ace80aed8b7e99ac1e618f6517c6;hb=8855cb5d6ff72efd5bdb05b339cf9fb175991d5e;hp=d93a2f5b0c5e85fd871f7d6a4e6452af119c33d0;hpb=ea17c5b225557fc0760810861451a84dc241d462;p=pspp diff --git a/src/ui/gui/psppire-dialog-action-logistic.c b/src/ui/gui/psppire-dialog-action-logistic.c index d93a2f5b0c..5fb5570315 100644 --- a/src/ui/gui/psppire-dialog-action-logistic.c +++ b/src/ui/gui/psppire-dialog-action-logistic.c @@ -27,7 +27,6 @@ #include "psppire-dialog.h" #include "builder-wrapper.h" -#include "checkbox-treeview.h" #include "psppire-dict.h" #include "libpspp/str.h" @@ -41,16 +40,6 @@ psppire_dialog_action_logistic_class_init (PsppireDialogActionLogisticClass *cla G_DEFINE_TYPE (PsppireDialogActionLogistic, psppire_dialog_action_logistic, PSPPIRE_TYPE_DIALOG_ACTION); -static void -set_sensitivity_from_toggle (GtkToggleButton *togglebutton, gpointer data) -{ - GtkWidget *w = data; - gboolean active = gtk_toggle_button_get_active (togglebutton); - - gtk_widget_set_sensitive (w, active); -} - - static gboolean dialog_state_valid (gpointer data) { @@ -107,13 +96,19 @@ 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; - GtkBuilder *xml = builder_new ("logistic.ui"); + 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); + } pda->dialog = get_widget_assert (xml, "logistic-dialog"); pda->source = get_widget_assert (xml, "dict-view"); @@ -145,8 +140,6 @@ psppire_dialog_action_logistic_activate (GtkAction *a) 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); - psppire_dialog_action_set_refresh (pda, refresh); psppire_dialog_action_set_valid_predicate (pda, @@ -164,36 +157,70 @@ generate_syntax (PsppireDialogAction *a) PsppireDialogActionLogistic *rd = PSPPIRE_DIALOG_ACTION_LOGISTIC (a); gchar *text = NULL; - GString *string = g_string_new ("LOGISTIC REGRESSION "); - const gchar *dep = gtk_entry_get_text (GTK_ENTRY (rd->dep_var)); - g_string_append (string, dep); + GString *strx = g_string_new ("LOGISTIC REGRESSION "); - g_string_append (string, " WITH "); + g_string_append (strx, dep); - psppire_var_view_append_names (PSPPIRE_VAR_VIEW (rd->indep_vars), 0, string); + g_string_append (strx, " WITH"); - g_string_append (string, "\n\t/CRITERIA ="); + GSList *vars = psppire_var_view_list_names (PSPPIRE_VAR_VIEW (rd->indep_vars), 0); + GSList *node = vars; - g_string_append_printf (string, " CUT(%g)", rd->cut_point); - g_string_append_printf (string, " ITERATE(%d)", rd->max_iterations); + 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 ="); + + g_string_append (strx, categoricals->str); + g_string_free (categoricals, TRUE); + g_slist_free (vars); + + 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_data (&opt_str)); + ds_destroy (&opt_str); if (rd->conf) { - g_string_append_printf (string, "\n\t/PRINT = CI(%g)", rd->conf_level); + g_string_append_printf (strx, "\n\t/PRINT = CI(%g)", rd->conf_level); } if (rd->constant) - g_string_append (string, "\n\t/NOORIGIN"); + g_string_append (strx, "\n\t/NOORIGIN"); else - g_string_append (string, "\n\t/ORIGIN"); + g_string_append (strx, "\n\t/ORIGIN"); - g_string_append (string, ".\n"); + g_string_append (strx, ".\n"); - text = string->str; + text = strx->str; - g_string_free (string, FALSE); + g_string_free (strx, FALSE); return text; } @@ -201,9 +228,7 @@ generate_syntax (PsppireDialogAction *a) static void psppire_dialog_action_logistic_class_init (PsppireDialogActionLogisticClass *class) { - GtkActionClass *action_class = GTK_ACTION_CLASS (class); - - action_class->activate = psppire_dialog_action_logistic_activate; + psppire_dialog_action_set_activation (class, psppire_dialog_action_logistic_activate); PSPPIRE_DIALOG_ACTION_CLASS (class)->generate_syntax = generate_syntax; }