/* 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
#include "psppire-dialog.h"
#include "builder-wrapper.h"
-#include "checkbox-treeview.h"
#include "psppire-dict.h"
#include "libpspp/str.h"
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)
{
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 (GtkAction *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;
- GtkBuilder *xml = builder_new ("logistic.ui");
+ 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);
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,
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;
- 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_cstr (&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");
+ if (rd->constant)
+ 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;
}
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_CLASS (class)->initial_activate = psppire_dialog_action_logistic_activate;
PSPPIRE_DIALOG_ACTION_CLASS (class)->generate_syntax = generate_syntax;
}