Logistic Regression: Added categorical variable support
[pspp] / src / ui / gui / compute-dialog.c
index 6f9ec222eb001764105850369bd8a7b6835e5b7f..30456a381889ebb3214ac154d7fad8f4a220e517 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPPIRE - a graphical user interface for PSPP.
-   Copyright (C) 2007, 2010, 2011  Free Software Foundation
+   Copyright (C) 2007, 2010, 2011, 2012  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
@@ -17,7 +17,7 @@
 #include <config.h>
 #include <gtk/gtk.h>
 #include "compute-dialog.h"
-#include "helper.h"
+#include "builder-wrapper.h"
 #include "psppire-dialog.h"
 #include "psppire-keypad.h"
 #include "psppire-data-window.h"
 #include "dialog-common.h"
 #include <libpspp/i18n.h>
 
+
 #include <language/expressions/public.h>
 #include "executor.h"
+#include "helper.h"
+
 
 static void function_list_populate (GtkTreeView *tv);
 
@@ -302,6 +305,24 @@ run_type_label_dialog (GtkButton *b, gpointer data)
     cd->use_type = TRUE;
 }
 
+static void
+on_type_toggled (GtkToggleButton *button, gpointer data)
+{
+  struct compute_dialog *cd = data;
+
+  GtkWidget *entry =
+    get_widget_assert (cd->xml, "type-and-label-width");
+
+  if ( gtk_toggle_button_get_active (button))
+    {
+      gtk_widget_set_sensitive (entry, TRUE);
+      gtk_widget_grab_focus (entry);
+    }
+  else
+    {
+      gtk_widget_set_sensitive (entry, FALSE);
+    }
+}
 
 static void
 on_expression_toggle (GtkToggleButton *button, gpointer data)
@@ -318,7 +339,6 @@ on_expression_toggle (GtkToggleButton *button, gpointer data)
     }
   else
     {
-      const char *label;
       struct variable *target_var;
       const gchar *target_name = gtk_entry_get_text
        (GTK_ENTRY (get_widget_assert (cd->xml, "compute-entry1")));
@@ -326,7 +346,7 @@ on_expression_toggle (GtkToggleButton *button, gpointer data)
       target_var = psppire_dict_lookup_var (cd->dict, target_name);
       if ( target_var )
        {
-         label = var_get_label (target_var);
+         const char *label = var_get_label (target_var);
 
          if ( label )
            gtk_entry_set_text (GTK_ENTRY (entry), label);
@@ -335,6 +355,7 @@ on_expression_toggle (GtkToggleButton *button, gpointer data)
        gtk_entry_set_text (GTK_ENTRY (entry), "");
 
       gtk_widget_set_sensitive (entry, TRUE);
+      gtk_widget_grab_focus (entry);
     }
 }
 
@@ -384,6 +405,9 @@ compute_dialog (PsppireDataWindow *de)
   GtkWidget *expression =
        get_widget_assert (xml, "radio-button-expression-label");
 
+  GtkWidget *str_btn =
+       get_widget_assert (xml, "radio-button-string");
+
 
   g_object_get (de->data_editor, "var-store", &vs, NULL);
   g_object_get (vs, "dictionary", &scd.dict, NULL);
@@ -392,6 +416,9 @@ compute_dialog (PsppireDataWindow *de)
   g_signal_connect (expression, "toggled",
                    G_CALLBACK(on_expression_toggle), &scd);
 
+  g_signal_connect (str_btn, "toggled",
+                   G_CALLBACK(on_type_toggled), &scd);
+
   gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (de));
 
   
@@ -499,6 +526,7 @@ function_list_populate (GtkTreeView *tv)
   }
 
   gtk_tree_view_set_model (tv, GTK_TREE_MODEL (liststore));
+  g_object_unref (liststore);
 }