/* PSPPIRE - a graphical user interface for PSPP.
- Copyright (C) 2007 Free Software Foundation
+ Copyright (C) 2007, 2010 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
FRQ_DCOUNT
};
-struct format_options
+enum frq_table
+ {
+ FRQ_TABLE,
+ FRQ_NOTABLE,
+ FRQ_LIMIT
+ };
+
+struct tables_options
{
enum frq_order order;
- gboolean use_limits;
+ enum frq_table table;
int limit;
};
+enum frq_scale
+ {
+ FRQ_FREQ,
+ FRQ_PERCENT
+ };
+
+struct charts_options
+ {
+ bool use_min;
+ double min;
+ bool use_max;
+ double max;
+ bool draw_hist;
+ bool draw_normal;
+ enum frq_scale scale;
+ bool draw_pie;
+ bool pie_include_missing;
+ };
+
struct frequencies_dialog
{
+ /* Main dialog. */
GtkTreeView *stat_vars;
PsppireDict *dict;
- GtkWidget *table_button;
+ GtkWidget *tables_button;
+ GtkWidget *charts_button;
+
+ GtkToggleButton *include_missing;
- GtkWidget *format_dialog;
- GtkWidget *maximum_cats;
- GtkWidget *limit_toggle_button;
+ GtkTreeModel *stats;
+
+ /* Frequency Tables dialog. */
+ GtkWidget *tables_dialog;
+ struct tables_options tables_opts;
+
+ GtkToggleButton *always;
+ GtkToggleButton *never;
+ GtkToggleButton *limit;
GtkSpinButton *limit_spinbutton;
GtkToggleButton *avalue;
GtkToggleButton *afreq;
GtkToggleButton *dfreq;
- struct format_options current_opts;
+ /* Charts dialog. */
+ GtkWidget *charts_dialog;
+ struct charts_options charts_opts;
- GtkTreeModel *stats;
+ GtkToggleButton *freqs;
+ GtkToggleButton *percents;
+
+ GtkToggleButton *min;
+ GtkSpinButton *min_spin;
+ GtkToggleButton *max;
+ GtkSpinButton *max_spin;
+
+ GtkToggleButton *hist;
+ GtkToggleButton *normal;
+
+ GtkToggleButton *pie;
+ GtkToggleButton *pie_include_missing;
};
static void
gtk_list_store_set (GTK_LIST_STORE (fd->stats), &iter,
CHECKBOX_COLUMN_SELECTED,
(B_FS_DEFAULT & (1u << i)) ? true : false, -1);
-
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (fd->table_button), TRUE);
}
static char *
g_string_append (string, "\n\t/FORMAT=");
- switch (fd->current_opts.order)
+ switch (fd->tables_opts.order)
{
case FRQ_AVALUE:
g_string_append (string, "AVALUE");
g_string_append (string, " ");
- if ( fd->current_opts.use_limits )
+ switch (fd->tables_opts.table)
{
- g_string_append_printf (string, "LIMIT (%d)", fd->current_opts.limit);
- }
- else
- {
- if ( gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (fd->table_button)))
- g_string_append (string, "TABLE");
- else
- g_string_append (string, "NOTABLE");
+ case FRQ_TABLE:
+ g_string_append (string, "TABLE");
+ break;
+ case FRQ_NOTABLE:
+ g_string_append (string, "NOTABLE");
+ break;
+ case FRQ_LIMIT:
+ g_string_append_printf (string, "LIMIT (%d)", fd->tables_opts.limit);
+ break;
}
}
}
+ if ( gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (fd->include_missing)))
+ g_string_append (string, "\n\t/MISSING=INCLUDE");
+
+ if (fd->charts_opts.draw_hist)
+ {
+ g_string_append (string, "\n\t/HISTOGRAM=");
+ g_string_append (string,
+ fd->charts_opts.draw_normal ? "NORMAL" : "NONORMAL");
+
+ if (fd->charts_opts.scale == FRQ_PERCENT)
+ g_string_append (string, " PERCENT");
+
+ if (fd->charts_opts.use_min)
+ g_string_append_printf (string, " MIN(%.15g)", fd->charts_opts.min);
+ if (fd->charts_opts.use_max)
+ g_string_append_printf (string, " MAX(%.15g)", fd->charts_opts.max);
+ }
+
+ if (fd->charts_opts.draw_pie)
+ {
+ g_string_append (string, "\n\t/PIECHART=");
+
+ if (fd->charts_opts.pie_include_missing)
+ g_string_append (string, " MISSING");
+
+ if (fd->charts_opts.use_min)
+ g_string_append_printf (string, " MIN(%.15g)", fd->charts_opts.min);
+ if (fd->charts_opts.use_max)
+ g_string_append_printf (string, " MAX(%.15g)", fd->charts_opts.max);
+ }
+
g_string_append (string, ".\n");
text = string->str;
static void
-on_format_clicked (struct frequencies_dialog *fd)
+on_tables_clicked (struct frequencies_dialog *fd)
{
int ret;
- g_signal_emit_by_name (fd->limit_toggle_button, "toggled");
- switch (fd->current_opts.order)
+ switch (fd->tables_opts.order)
{
case FRQ_AVALUE:
gtk_toggle_button_set_active (fd->avalue, TRUE);
gtk_toggle_button_set_active (fd->dvalue, TRUE);
break;
case FRQ_ACOUNT:
- gtk_toggle_button_set_active (fd->dfreq, TRUE);
+ gtk_toggle_button_set_active (fd->afreq, TRUE);
break;
case FRQ_DCOUNT:
gtk_toggle_button_set_active (fd->dfreq, TRUE);
break;
};
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (fd->limit_toggle_button),
- fd->current_opts.use_limits);
-
+ switch (fd->tables_opts.table)
+ {
+ case FRQ_TABLE:
+ gtk_toggle_button_set_active (fd->always, TRUE);
+ break;
+ case FRQ_NOTABLE:
+ gtk_toggle_button_set_active (fd->never, TRUE);
+ break;
+ case FRQ_LIMIT:
+ gtk_toggle_button_set_active (fd->limit, TRUE);
+ break;
+ }
gtk_spin_button_set_value (fd->limit_spinbutton,
- fd->current_opts.limit);
+ fd->tables_opts.limit);
+ g_signal_emit_by_name (fd->limit, "toggled");
- ret = psppire_dialog_run (PSPPIRE_DIALOG (fd->format_dialog));
+ ret = psppire_dialog_run (PSPPIRE_DIALOG (fd->tables_dialog));
if ( ret == PSPPIRE_RESPONSE_CONTINUE )
{
if (gtk_toggle_button_get_active (fd->avalue))
- fd->current_opts.order = FRQ_AVALUE;
+ fd->tables_opts.order = FRQ_AVALUE;
else if (gtk_toggle_button_get_active (fd->dvalue))
- fd->current_opts.order = FRQ_DVALUE;
+ fd->tables_opts.order = FRQ_DVALUE;
else if (gtk_toggle_button_get_active (fd->afreq))
- fd->current_opts.order = FRQ_ACOUNT;
+ fd->tables_opts.order = FRQ_ACOUNT;
else if (gtk_toggle_button_get_active (fd->dfreq))
- fd->current_opts.order = FRQ_DCOUNT;
+ fd->tables_opts.order = FRQ_DCOUNT;
- fd->current_opts.use_limits = gtk_toggle_button_get_active
- (GTK_TOGGLE_BUTTON (fd->limit_toggle_button));
+ if (gtk_toggle_button_get_active (fd->always))
+ fd->tables_opts.table = FRQ_TABLE;
+ else if (gtk_toggle_button_get_active (fd->never))
+ fd->tables_opts.table = FRQ_NOTABLE;
+ else
+ fd->tables_opts.table = FRQ_LIMIT;
- fd->current_opts.limit =
- gtk_spin_button_get_value (fd->limit_spinbutton);
+ fd->tables_opts.limit = gtk_spin_button_get_value (fd->limit_spinbutton);
+ }
+}
+
+static void
+on_charts_clicked (struct frequencies_dialog *fd)
+{
+ int ret;
+
+ gtk_toggle_button_set_active (fd->min, fd->charts_opts.use_min);
+ gtk_spin_button_set_value (fd->min_spin, fd->charts_opts.min);
+ g_signal_emit_by_name (fd->min, "toggled");
+
+ gtk_toggle_button_set_active (fd->max, fd->charts_opts.use_max);
+ gtk_spin_button_set_value (fd->max_spin, fd->charts_opts.max);
+ g_signal_emit_by_name (fd->max, "toggled");
+
+ gtk_toggle_button_set_active (fd->hist, fd->charts_opts.draw_hist);
+ gtk_toggle_button_set_active (fd->normal, fd->charts_opts.draw_normal);
+ g_signal_emit_by_name (fd->hist, "toggled");
+
+ switch (fd->charts_opts.scale)
+ {
+ case FRQ_FREQ:
+ gtk_toggle_button_set_active (fd->freqs, TRUE);
+ break;
+ case FRQ_DVALUE:
+ gtk_toggle_button_set_active (fd->percents, TRUE);
+ break;
+ };
+
+
+ gtk_toggle_button_set_active (fd->pie, fd->charts_opts.draw_pie);
+ gtk_toggle_button_set_active (fd->pie_include_missing,
+ fd->charts_opts.pie_include_missing);
+ g_signal_emit_by_name (fd->pie, "toggled");
+
+ ret = psppire_dialog_run (PSPPIRE_DIALOG (fd->charts_dialog));
+
+ if ( ret == PSPPIRE_RESPONSE_CONTINUE )
+ {
+ fd->charts_opts.use_min = gtk_toggle_button_get_active (fd->min);
+ fd->charts_opts.min = gtk_spin_button_get_value (fd->min_spin);
+
+ fd->charts_opts.use_max = gtk_toggle_button_get_active (fd->max);
+ fd->charts_opts.max = gtk_spin_button_get_value (fd->max_spin);
+
+ fd->charts_opts.draw_hist = gtk_toggle_button_get_active (fd->hist);
+ fd->charts_opts.draw_normal = gtk_toggle_button_get_active (fd->normal);
+ if (gtk_toggle_button_get_active (fd->freqs))
+ fd->charts_opts.scale = FRQ_FREQ;
+ else if (gtk_toggle_button_get_active (fd->percents))
+ fd->charts_opts.scale = FRQ_PERCENT;
+
+ fd->charts_opts.draw_pie = gtk_toggle_button_get_active (fd->pie);
+ fd->charts_opts.pie_include_missing
+ = gtk_toggle_button_get_active (fd->pie_include_missing);
}
}
GtkWidget *dialog = get_widget_assert (xml, "frequencies-dialog");
GtkWidget *source = get_widget_assert (xml, "dict-treeview");
GtkWidget *dest = get_widget_assert (xml, "var-treeview");
- GtkWidget *format_button = get_widget_assert (xml, "button1");
+ GtkWidget *tables_button = get_widget_assert (xml, "tables-button");
+ GtkWidget *charts_button = get_widget_assert (xml, "charts-button");
GtkWidget *stats_treeview = get_widget_assert (xml, "stats-treeview");
PsppireVarStore *vs = NULL;
g_object_set (source, "model", fd.dict, NULL);
fd.stat_vars = GTK_TREE_VIEW (dest);
- fd.table_button = get_widget_assert (xml, "checkbutton1");
- fd.format_dialog = get_widget_assert (xml, "format-dialog");
- fd.maximum_cats = get_widget_assert (xml, "hbox5");
- fd.limit_toggle_button = get_widget_assert (xml, "checkbutton2");
- fd.limit_spinbutton =
- GTK_SPIN_BUTTON (get_widget_assert (xml, "spinbutton1"));
+ fd.tables_button = get_widget_assert (xml, "tables-button");
+ fd.charts_button = get_widget_assert (xml, "charts-button");
- fd.stats = gtk_tree_view_get_model (GTK_TREE_VIEW (stats_treeview));
-
- fd.avalue = GTK_TOGGLE_BUTTON (get_widget_assert (xml, "radiobutton1"));
- fd.dvalue = GTK_TOGGLE_BUTTON (get_widget_assert (xml, "radiobutton2"));
- fd.afreq = GTK_TOGGLE_BUTTON (get_widget_assert (xml, "radiobutton3"));
- fd.dfreq = GTK_TOGGLE_BUTTON (get_widget_assert (xml, "radiobutton4"));
-
- fd.current_opts.order = FRQ_AVALUE;
- fd.current_opts.use_limits = FALSE;
- fd.current_opts.limit = 50;
+ fd.include_missing = GTK_TOGGLE_BUTTON (
+ get_widget_assert (xml, "include_missing"));
+ fd.stats = gtk_tree_view_get_model (GTK_TREE_VIEW (stats_treeview));
- gtk_window_set_transient_for (GTK_WINDOW (fd.format_dialog), GTK_WINDOW (de));
-
+ /* Frequency Tables dialog. */
+ fd.tables_dialog = get_widget_assert (xml, "tables-dialog");
+ fd.tables_opts.order = FRQ_AVALUE;
+ fd.tables_opts.table = FRQ_TABLE;
+ fd.tables_opts.limit = 50;
+ fd.always = GTK_TOGGLE_BUTTON (get_widget_assert (xml, "always"));
+ fd.never = GTK_TOGGLE_BUTTON (get_widget_assert (xml, "never"));
+ fd.limit = GTK_TOGGLE_BUTTON (get_widget_assert (xml, "limit"));
+ fd.limit_spinbutton =
+ GTK_SPIN_BUTTON (get_widget_assert (xml, "limit-spin"));
+ g_signal_connect (fd.limit, "toggled",
+ G_CALLBACK (sensitive_if_active), fd.limit_spinbutton);
+
+ fd.avalue = GTK_TOGGLE_BUTTON (get_widget_assert (xml, "avalue"));
+ fd.dvalue = GTK_TOGGLE_BUTTON (get_widget_assert (xml, "dvalue"));
+ fd.afreq = GTK_TOGGLE_BUTTON (get_widget_assert (xml, "afreq"));
+ fd.dfreq = GTK_TOGGLE_BUTTON (get_widget_assert (xml, "dfreq"));
+
+ gtk_window_set_transient_for (GTK_WINDOW (fd.tables_dialog),
+ GTK_WINDOW (de));
+
+ /* Charts dialog. */
+ fd.charts_dialog = get_widget_assert (xml, "charts-dialog");
+ fd.charts_opts.use_min = false;
+ fd.charts_opts.min = 0;
+ fd.charts_opts.use_max = false;
+ fd.charts_opts.max = 100;
+ fd.charts_opts.draw_hist = false;
+ fd.charts_opts.draw_normal = false;
+ fd.charts_opts.scale = FRQ_FREQ;
+ fd.charts_opts.draw_pie = false;
+ fd.charts_opts.pie_include_missing = false;
+
+ fd.freqs = GTK_TOGGLE_BUTTON (get_widget_assert (xml, "freqs"));
+ fd.percents = GTK_TOGGLE_BUTTON (get_widget_assert (xml, "percents"));
+
+ fd.min = GTK_TOGGLE_BUTTON (get_widget_assert (xml, "min"));
+ fd.min_spin = GTK_SPIN_BUTTON (get_widget_assert (xml, "min-spin"));
+ g_signal_connect (fd.min, "toggled",
+ G_CALLBACK (sensitive_if_active), fd.min_spin);
+ fd.max = GTK_TOGGLE_BUTTON (get_widget_assert (xml, "max"));
+ fd.max_spin = GTK_SPIN_BUTTON (get_widget_assert (xml, "max-spin"));
+ g_signal_connect (fd.max, "toggled",
+ G_CALLBACK (sensitive_if_active), fd.max_spin);
+
+ fd.hist = GTK_TOGGLE_BUTTON (get_widget_assert (xml, "hist"));
+ fd.normal = GTK_TOGGLE_BUTTON (get_widget_assert (xml, "normal"));
+ g_signal_connect (fd.hist, "toggled",
+ G_CALLBACK (sensitive_if_active), fd.normal);
+
+ fd.pie = GTK_TOGGLE_BUTTON (get_widget_assert (xml, "pie"));
+ fd.pie_include_missing = GTK_TOGGLE_BUTTON (
+ get_widget_assert (xml, "pie-include-missing"));
+ g_signal_connect (fd.pie, "toggled",
+ G_CALLBACK (sensitive_if_active), fd.pie_include_missing);
+
+ gtk_window_set_transient_for (GTK_WINDOW (fd.charts_dialog),
+ GTK_WINDOW (de));
+
+ /* Main dialog. */
g_signal_connect (dialog, "refresh", G_CALLBACK (refresh), &fd);
psppire_dialog_set_valid_predicate (PSPPIRE_DIALOG (dialog),
dialog_state_valid, &fd);
-
- g_signal_connect_swapped (format_button, "clicked",
- G_CALLBACK (on_format_clicked), &fd);
-
- g_signal_connect (fd.limit_toggle_button, "toggled",
- G_CALLBACK (sensitive_if_active), fd.maximum_cats);
-
+ g_signal_connect_swapped (tables_button, "clicked",
+ G_CALLBACK (on_tables_clicked), &fd);
+ g_signal_connect_swapped (charts_button, "clicked",
+ G_CALLBACK (on_charts_clicked), &fd);
response = psppire_dialog_run (PSPPIRE_DIALOG (dialog));
<?xml version="1.0"?>
<interface>
- <requires lib="psppire" version="2054.22072"/>
<!-- interface-requires gtk+ 2.12 -->
+ <requires lib="psppire" version="2054.22072"/>
<!-- interface-naming-policy project-wide -->
+ <object class="GtkListStore" id="liststore1"/>
<object class="PsppireDialog" id="frequencies-dialog">
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="title">Frequencies</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="orientation">vertical</property>
<child>
- <object class="GtkHBox" id="hbox1">
+ <object class="GtkHBox" id="hbox2">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<child>
</packing>
</child>
<child>
- <object class="GtkAlignment" id="alignment2">
+ <object class="GtkAlignment" id="alignment1">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="yalign">0.05000000074505806</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="no_show_all">True</property>
<property name="border_width">5</property>
- <property name="source_widget">dict-treeview</property>
- <property name="dest_widget">var-treeview</property>
+ <property name="source_widget">dict-treeview</property>
+ <property name="dest_widget">var-treeview</property>
</object>
</child>
</object>
</packing>
</child>
<child>
- <object class="GtkVBox" id="vbox3">
+ <object class="GtkVBox" id="vbox2">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="orientation">vertical</property>
<object class="GtkScrolledWindow" id="scrolledwindow2">
<property name="visible">True</property>
<property name="can_focus">True</property>
- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="hscrollbar_policy">never</property>
+ <property name="hscrollbar_policy">automatic</property>
<property name="vscrollbar_policy">automatic</property>
- <property name="shadow_type">etched-in</property>
<child>
<object class="PsppireVarView" id="var-treeview">
<property name="visible">True</property>
</object>
</child>
<child type="label">
- <object class="GtkLabel" id="label3">
+ <object class="GtkLabel" id="label1">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">Variable(s):</property>
<property name="position">1</property>
</packing>
</child>
+ <child>
+ <object class="GtkCheckButton" id="include_missing">
+ <property name="label" translatable="yes">Include missing values</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
</object>
<packing>
<property name="expand">False</property>
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<child>
- <object class="GtkCheckButton" id="checkbutton1">
- <property name="label" translatable="yes">Display Frequency Table</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="draw_indicator">True</property>
- </object>
- <packing>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkHBox" id="hbox2">
+ <object class="GtkHBox" id="hbox4">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="spacing">5</property>
<property name="homogeneous">True</property>
<child>
- <object class="GtkButton" id="button1">
- <property name="label" translatable="yes">Format...</property>
+ <placeholder/>
+ </child>
+ <child>
+ <object class="GtkButton" id="charts-button">
+ <property name="label" translatable="yes">Charts...</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
</object>
<packing>
- <property name="position">0</property>
+ <property name="position">1</property>
</packing>
</child>
<child>
- <placeholder/>
- </child>
- <child>
- <placeholder/>
+ <object class="GtkButton" id="tables-button">
+ <property name="label" translatable="yes">Frequency Tables...</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ </object>
+ <packing>
+ <property name="position">2</property>
+ </packing>
</child>
</object>
<packing>
</object>
</child>
</object>
- <object class="PsppireDialog" id="format-dialog">
+ <object class="PsppireDialog" id="tables-dialog">
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="title">Frequencies: Format</property>
+ <property name="title">Frequencies: Frequency Tables</property>
<property name="modal">True</property>
<child internal-child="hbox">
- <object class="GtkHBox" id="dialog-hbox2">
+ <object class="GtkHBox" id="dialog-hbox6">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="spacing">2</property>
<child>
- <object class="GtkHBox" id="hbox4">
+ <object class="GtkVBox" id="vbox3">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="spacing">5</property>
+ <property name="orientation">vertical</property>
<child>
- <object class="GtkFrame" id="frame1">
+ <object class="GtkFrame" id="frame5">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label_xalign">0</property>
<child>
- <object class="GtkAlignment" id="alignment1">
+ <object class="GtkAlignment" id="alignment2">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="left_padding">12</property>
<child>
- <object class="GtkVButtonBox" id="vbuttonbox1">
+ <object class="GtkVButtonBox" id="vbuttonbox2">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="orientation">vertical</property>
<property name="homogeneous">True</property>
<child>
- <object class="GtkRadioButton" id="radiobutton1">
- <property name="label" translatable="yes">Ascending Order</property>
+ <object class="GtkRadioButton" id="always">
+ <property name="label" translatable="yes">Always</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
</packing>
</child>
<child>
- <object class="GtkRadioButton" id="radiobutton2">
- <property name="label" translatable="yes">Descending Order</property>
+ <object class="GtkRadioButton" id="never">
+ <property name="label" translatable="yes">Never</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="active">True</property>
<property name="draw_indicator">True</property>
- <property name="group">radiobutton1</property>
+ <property name="group">always</property>
</object>
<packing>
<property name="expand">False</property>
</packing>
</child>
<child>
- <object class="GtkRadioButton" id="radiobutton3">
- <property name="label" translatable="yes">Ascending Counts</property>
+ <object class="GtkHBox" id="hbox5">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkRadioButton" id="limit">
+ <property name="label" translatable="yes">If no more than </property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">always</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkSpinButton" id="limit-spin">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK | GDK_STRUCTURE_MASK | GDK_SUBSTRUCTURE_MASK</property>
+ <property name="invisible_char">●</property>
+ <property name="adjustment">adjustment1</property>
+ <property name="numeric">True</property>
+ <property name="update_policy">if-valid</property>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label4">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">values</property>
+ </object>
+ <packing>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child type="label">
+ <object class="GtkLabel" id="label5">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="label" translatable="yes">Display frequency tables</property>
+ <property name="use_markup">True</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkFrame" id="frame7">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="label_xalign">0</property>
+ <child>
+ <object class="GtkAlignment" id="alignment3">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="left_padding">12</property>
+ <child>
+ <object class="GtkVButtonBox" id="vbuttonbox1">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="orientation">vertical</property>
+ <property name="homogeneous">True</property>
+ <child>
+ <object class="GtkRadioButton" id="avalue">
+ <property name="label" translatable="yes">Ascending value</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="active">True</property>
<property name="draw_indicator">True</property>
- <property name="group">radiobutton1</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="dvalue">
+ <property name="label" translatable="yes">Descending value</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">avalue</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="afreq">
+ <property name="label" translatable="yes">Ascending frequency</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">avalue</property>
</object>
<packing>
<property name="expand">False</property>
</packing>
</child>
<child>
- <object class="GtkRadioButton" id="radiobutton4">
- <property name="label" translatable="yes">Descending Counts</property>
+ <object class="GtkRadioButton" id="dfreq">
+ <property name="label" translatable="yes">Descending frequency</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="active">True</property>
<property name="draw_indicator">True</property>
- <property name="group">radiobutton1</property>
+ <property name="group">avalue</property>
</object>
<packing>
<property name="expand">False</property>
</object>
</child>
<child type="label">
- <object class="GtkLabel" id="label1">
+ <object class="GtkLabel" id="label6">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">Order by</property>
</child>
</object>
<packing>
- <property name="position">0</property>
+ <property name="expand">False</property>
+ <property name="position">1</property>
</packing>
</child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="PsppireVButtonBox" id="psppire-vbuttonbox2">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="border_width">5</property>
+ <property name="buttons">PSPPIRE_BUTTON_CONTINUE_MASK | PSPPIRE_BUTTON_CANCEL_MASK | PSPPIRE_BUTTON_HELP_MASK</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="pack_type">end</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ <object class="GtkAdjustment" id="adjustment1">
+ <property name="value">100</property>
+ <property name="lower">1</property>
+ <property name="upper">65536</property>
+ <property name="step_increment">1</property>
+ <property name="page_increment">10</property>
+ </object>
+ <object class="PsppireDialog" id="charts-dialog">
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="title">Frequencies: Charts</property>
+ <property name="modal">True</property>
+ <child internal-child="hbox">
+ <object class="GtkHBox" id="dialog-hbox5">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <child>
+ <object class="GtkVBox" id="vbox4">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
<child>
- <object class="GtkAlignment" id="alignment3">
+ <object class="GtkFrame" id="frame6">
<property name="visible">True</property>
- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="yalign">0</property>
- <property name="yscale">0</property>
- <property name="top_padding">5</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">none</property>
<child>
- <object class="GtkVBox" id="vbox2">
+ <object class="GtkAlignment" id="alignment4">
<property name="visible">True</property>
- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="orientation">vertical</property>
+ <property name="left_padding">12</property>
<child>
- <object class="GtkCheckButton" id="checkbutton2">
+ <object class="GtkVBox" id="vbox5">
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="draw_indicator">True</property>
+ <property name="orientation">vertical</property>
<child>
- <object class="GtkLabel" id="label4">
- <property name="width_request">180</property>
+ <object class="GtkHBox" id="hbox7">
<property name="visible">True</property>
- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="label" translatable="yes">Suppress tables with more than N categories</property>
- <property name="wrap">True</property>
+ <child>
+ <object class="GtkCheckButton" id="min">
+ <property name="label" translatable="yes">Exclude values below </property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkSpinButton" id="min-spin">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="invisible_char">●</property>
+ <property name="adjustment">adjustment2</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
</object>
+ <packing>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHBox" id="hbox8">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkCheckButton" id="max">
+ <property name="label" translatable="yes">Exclude values above </property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkSpinButton" id="max-spin">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="invisible_char">●</property>
+ <property name="adjustment">adjustment3</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">1</property>
+ </packing>
</child>
</object>
- <packing>
- <property name="position">0</property>
- </packing>
</child>
+ </object>
+ </child>
+ <child type="label">
+ <object class="GtkLabel" id="label9">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes"><b>Chart Formatting</b></property>
+ <property name="use_markup">True</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkFrame" id="frame8">
+ <property name="visible">True</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">none</property>
+ <child>
+ <object class="GtkAlignment" id="alignment5">
+ <property name="visible">True</property>
+ <property name="left_padding">12</property>
<child>
- <object class="GtkHBox" id="hbox5">
+ <object class="GtkVBox" id="vbox6">
<property name="visible">True</property>
- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="orientation">vertical</property>
<child>
- <object class="GtkLabel" id="label5">
- <property name="width_request">120</property>
+ <object class="GtkCheckButton" id="hist">
+ <property name="label" translatable="yes">Draw histograms</property>
<property name="visible">True</property>
- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">Maximum no of categories</property>
- <property name="wrap">True</property>
- <property name="wrap_mode">word-char</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="draw_indicator">True</property>
</object>
<packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
- <object class="GtkSpinButton" id="spinbutton1">
+ <object class="GtkCheckButton" id="normal">
+ <property name="label" translatable="yes">Superimpose normal curve</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="adjustment">adjustment1</property>
- <property name="numeric">True</property>
- <property name="update_policy">if-valid</property>
+ <property name="receives_default">False</property>
+ <property name="draw_indicator">True</property>
</object>
<packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
<property name="position">1</property>
</packing>
</child>
+ <child>
+ <object class="GtkHBox" id="hbox6">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkLabel" id="label7">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Scale:</property>
+ </object>
+ <packing>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="freqs">
+ <property name="label" translatable="yes">Frequencies</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="active">True</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="percents">
+ <property name="label" translatable="yes">Percentages</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">freqs</property>
+ </object>
+ <packing>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">2</property>
+ </packing>
+ </child>
</object>
- <packing>
- <property name="padding">5</property>
- <property name="position">1</property>
- </packing>
</child>
</object>
</child>
+ <child type="label">
+ <object class="GtkLabel" id="label10">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes"><b>Histograms</b></property>
+ <property name="use_markup">True</property>
+ </object>
+ </child>
</object>
<packing>
- <property name="expand">False</property>
- <property name="padding">5</property>
<property name="position">1</property>
</packing>
</child>
+ <child>
+ <object class="GtkFrame" id="frame4">
+ <property name="visible">True</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">none</property>
+ <child>
+ <object class="GtkAlignment" id="alignment6">
+ <property name="visible">True</property>
+ <property name="left_padding">12</property>
+ <child>
+ <object class="GtkVBox" id="vbox7">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkCheckButton" id="pie">
+ <property name="label" translatable="yes">Draw pie charts</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="pie-include-missing">
+ <property name="label" translatable="yes">Include slices for missing values</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child type="label">
+ <object class="GtkLabel" id="label11">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes"><b>Pie Charts</b></property>
+ <property name="use_markup">True</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="position">2</property>
+ </packing>
+ </child>
</object>
<packing>
<property name="position">0</property>
</packing>
</child>
<child>
- <object class="PsppireVButtonBox" id="psppire-vbuttonbox2">
+ <object class="PsppireVButtonBox" id="psppire-vbuttonbox3">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="border_width">5</property>
</object>
</child>
</object>
- <object class="GtkAdjustment" id="adjustment1">
+ <object class="GtkAdjustment" id="adjustment2">
+ <property name="lower">-10000000000</property>
+ <property name="upper">10000000000</property>
+ <property name="step_increment">1</property>
+ <property name="page_increment">10</property>
+ </object>
+ <object class="GtkAdjustment" id="adjustment3">
<property name="value">100</property>
- <property name="lower">1</property>
- <property name="upper">65536</property>
+ <property name="lower">-10000000000</property>
+ <property name="upper">10000000000</property>
<property name="step_increment">1</property>
<property name="page_increment">10</property>
- <property name="page_size">0</property>
</object>
</interface>