Frequencies Piecharts (gui): Emit 'NOMISSING' when appropriate.
[pspp] / src / ui / gui / psppire-dialog-action-frequencies.c
index 78400effcf5dd33ab1c0005a7a334c70544565d9..c987e5ee903b1b5c20162ec64f9de732841f5695 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPPIRE - a graphical user interface for PSPP.
-   Copyright (C) 2012  Free Software Foundation
+   Copyright (C) 2012, 2015  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
 
 
 enum
-{
+  {
 #define FS(NAME, LABEL) FS_##NAME,
-  FREQUENCY_STATS
+    FREQUENCY_STATS
 #undef FS
-  N_FREQUENCY_STATS
-};
+    N_FREQUENCY_STATS
+  };
 
 enum
-{
+  {
 #define FS(NAME, LABEL) B_FS_##NAME = 1u << FS_##NAME,
-  FREQUENCY_STATS
+    FREQUENCY_STATS
 #undef FS
     B_FS_ALL = (1u << N_FREQUENCY_STATS) - 1,
-  B_FS_DEFAULT = B_FS_MEAN | B_FS_STDDEV | B_FS_MINIMUM | B_FS_MAXIMUM
-};
+    B_FS_DEFAULT = B_FS_MEAN | B_FS_STDDEV | B_FS_MINIMUM | B_FS_MAXIMUM
+  };
 
 
 static const struct checkbox_entry_item stats[] = {
@@ -186,25 +186,25 @@ on_charts_clicked (PsppireDialogActionFrequencies *fd)
 
   if ( ret == PSPPIRE_RESPONSE_CONTINUE )
     {
-       fd->charts_opts_use_min = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (fd->min));
-       fd->charts_opts_min = gtk_spin_button_get_value (GTK_SPIN_BUTTON (fd->min_spin));
+      fd->charts_opts_use_min = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (fd->min));
+      fd->charts_opts_min = gtk_spin_button_get_value (GTK_SPIN_BUTTON (fd->min_spin));
 
-       fd->charts_opts_use_max = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (fd->max));
-       fd->charts_opts_max = gtk_spin_button_get_value (GTK_SPIN_BUTTON (fd->max_spin));
+      fd->charts_opts_use_max = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (fd->max));
+      fd->charts_opts_max = gtk_spin_button_get_value (GTK_SPIN_BUTTON (fd->max_spin));
 
-       fd->charts_opts_draw_hist = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (fd->hist));
-       fd->charts_opts_draw_normal = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (fd->normal));
-       if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (fd->freqs)))
-         fd->charts_opts_scale = FRQ_FREQ;
-       else if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (fd->percents)))
-         fd->charts_opts_scale = FRQ_PERCENT;
+      fd->charts_opts_draw_hist = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (fd->hist));
+      fd->charts_opts_draw_normal = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (fd->normal));
+      if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (fd->freqs)))
+       fd->charts_opts_scale = FRQ_FREQ;
+      else if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (fd->percents)))
+       fd->charts_opts_scale = FRQ_PERCENT;
 
-       fd->charts_opts_draw_pie = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (fd->pie));
-       fd->charts_opts_pie_include_missing
-          = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (fd->pie_include_missing));
+      fd->charts_opts_draw_pie = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (fd->pie));
+      fd->charts_opts_pie_include_missing
+       = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (fd->pie_include_missing));
 
 
-       fd->charts_opts_draw_bar = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (fd->bar));
+      fd->charts_opts_draw_bar = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (fd->bar));
     }
 }
 
@@ -251,17 +251,21 @@ refresh (PsppireDialogAction * fdx)
                         (B_FS_DEFAULT & (1u << i)) ? true : false, -1);
 }
 
-
-
-static void
-psppire_dialog_action_frequencies_activate (GtkAction * a)
+static GtkBuilder *
+psppire_dialog_action_frequencies_activate (PsppireDialogAction *a, GVariant *param)
 {
   PsppireDialogActionFrequencies *act = PSPPIRE_DIALOG_ACTION_FREQUENCIES (a);
   PsppireDialogAction *pda = PSPPIRE_DIALOG_ACTION (a);
 
-  GtkBuilder *xml = builder_new ("frequencies.ui");
+  GtkBuilder *xml = builder_new ( "frequencies.ui");
 
   GtkWidget *stats_treeview = get_widget_assert (xml, "stats-treeview");
+
+  psppire_checkbox_treeview_populate (PSPPIRE_CHECKBOX_TREEVIEW (stats_treeview),
+                                     B_FS_DEFAULT, N_FREQUENCY_STATS, stats);
+
+  act->stats = gtk_tree_view_get_model (GTK_TREE_VIEW (stats_treeview));
+
   GtkWidget *tables_button = get_widget_assert (xml, "tables-button");
   GtkWidget *charts_button = get_widget_assert (xml, "charts-button");
 
@@ -270,14 +274,7 @@ psppire_dialog_action_frequencies_activate (GtkAction * a)
 
   act->stat_vars = get_widget_assert (xml, "var-treeview");
 
-  psppire_checkbox_treeview_populate (PSPPIRE_CHECKBOX_TREEVIEW (stats_treeview),
-                                  B_FS_DEFAULT, N_FREQUENCY_STATS, stats);
-
-  act->stats = gtk_tree_view_get_model (GTK_TREE_VIEW (stats_treeview));
-
   act->include_missing = get_widget_assert (xml, "include_missing");
-
-
   act->tables_dialog = get_widget_assert (xml, "tables-dialog");
   act->charts_dialog = get_widget_assert (xml, "charts-dialog");
   act->always = get_widget_assert (xml, "always");
@@ -286,8 +283,8 @@ psppire_dialog_action_frequencies_activate (GtkAction * a)
   act->limit_spinbutton = get_widget_assert (xml, "limit-spin");
 
   g_signal_connect (act->limit, "toggled",
-                    G_CALLBACK (set_sensitivity_from_toggle),
-                    act->limit_spinbutton);
+                   G_CALLBACK (set_sensitivity_from_toggle),
+                   act->limit_spinbutton);
 
   act->avalue = get_widget_assert (xml, "avalue");
   act->dvalue = get_widget_assert (xml, "dvalue");
@@ -327,10 +324,6 @@ psppire_dialog_action_frequencies_activate (GtkAction * a)
 
   act->bar =  (get_widget_assert (xml, "bar"));
 
-
-  g_object_unref (xml);
-
-
   act->tables_opts_order = FRQ_AVALUE;
   act->tables_opts_table = FRQ_TABLE;
   act->tables_opts_limit = 50;
@@ -345,14 +338,11 @@ psppire_dialog_action_frequencies_activate (GtkAction * a)
 
   psppire_dialog_action_set_valid_predicate (pda, dialog_state_valid);
 
-  if (PSPPIRE_DIALOG_ACTION_CLASS
-      (psppire_dialog_action_frequencies_parent_class)->activate)
-    PSPPIRE_DIALOG_ACTION_CLASS
-      (psppire_dialog_action_frequencies_parent_class)->activate (pda);
+  return xml;
 }
 
 static char *
-generate_syntax (PsppireDialogAction * a)
+generate_syntax (const PsppireDialogAction * a)
 {
   PsppireDialogActionFrequencies *fd = PSPPIRE_DIALOG_ACTION_FREQUENCIES (a);
   gchar *text = NULL;
@@ -447,7 +437,7 @@ generate_syntax (PsppireDialogAction * a)
     {
       ds_put_cstr (&str, "\n\t/HISTOGRAM=");
       ds_put_cstr (&str,
-                       fd->charts_opts_draw_normal ? "NORMAL" : "NONORMAL");
+                  fd->charts_opts_draw_normal ? "NORMAL" : "NONORMAL");
 
       if (fd->charts_opts_scale == FRQ_PERCENT)
         ds_put_cstr (&str, " PERCENT");
@@ -464,6 +454,8 @@ generate_syntax (PsppireDialogAction * a)
 
       if (fd->charts_opts_pie_include_missing)
         ds_put_cstr (&str, " MISSING");
+      else
+        ds_put_cstr (&str, " NOMISSING");
 
       if (fd->charts_opts_use_min)
         ds_put_c_format (&str, " MIN(%.15g)", fd->charts_opts_min);
@@ -498,15 +490,12 @@ generate_syntax (PsppireDialogAction * a)
 static void
 psppire_dialog_action_frequencies_class_init (PsppireDialogActionFrequenciesClass *class)
 {
-  GtkActionClass *action_class = GTK_ACTION_CLASS (class);
-
-  action_class->activate = psppire_dialog_action_frequencies_activate;
-
+  PSPPIRE_DIALOG_ACTION_CLASS (class)->initial_activate = psppire_dialog_action_frequencies_activate;
   PSPPIRE_DIALOG_ACTION_CLASS (class)->generate_syntax = generate_syntax;
 }
 
 
 static void
-psppire_dialog_action_frequencies_init (PsppireDialogActionFrequencies * act)
+psppire_dialog_action_frequencies_init (PsppireDialogActionFrequencies *act)
 {
 }