From: Ben Pfaff Date: Sun, 14 Mar 2010 06:08:30 +0000 (-0800) Subject: gui: Add charts, additional formatting feature to FREQUENCIES dialog. X-Git-Tag: v0.7.5~108 X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=bf95c2fab488592f0a4ebc7c69ac0af578c7a58f;p=pspp-builds.git gui: Add charts, additional formatting feature to FREQUENCIES dialog. Partial fix for bug #27832 "Wishlist: graphic output in GUI". --- diff --git a/src/ui/gui/frequencies-dialog.c b/src/ui/gui/frequencies-dialog.c index 2d5fcbb4..e812d9a3 100644 --- a/src/ui/gui/frequencies-dialog.c +++ b/src/ui/gui/frequencies-dialog.c @@ -1,5 +1,5 @@ /* 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 @@ -88,23 +88,59 @@ enum frq_order 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; @@ -112,9 +148,23 @@ struct frequencies_dialog 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 @@ -132,8 +182,6 @@ refresh (PsppireDialog *dialog, struct frequencies_dialog *fd) 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 * @@ -152,7 +200,7 @@ generate_syntax (const struct frequencies_dialog *fd) 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"); @@ -172,16 +220,17 @@ generate_syntax (const struct frequencies_dialog *fd) 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; } @@ -221,6 +270,37 @@ generate_syntax (const struct frequencies_dialog *fd) } } + 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; @@ -245,12 +325,11 @@ dialog_state_valid (gpointer data) 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); @@ -259,37 +338,106 @@ on_format_clicked (struct frequencies_dialog *fd) 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); } } @@ -317,7 +465,8 @@ frequencies_dialog (GObject *o, gpointer data) 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; @@ -337,40 +486,84 @@ frequencies_dialog (GObject *o, gpointer data) 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)); diff --git a/src/ui/gui/frequencies.ui b/src/ui/gui/frequencies.ui index e312eabe..55cfd7a6 100644 --- a/src/ui/gui/frequencies.ui +++ b/src/ui/gui/frequencies.ui @@ -1,8 +1,9 @@ - + + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK Frequencies @@ -18,7 +19,7 @@ GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK vertical - + True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK @@ -43,7 +44,7 @@ - + True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 0.05000000074505806 @@ -56,8 +57,8 @@ GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True 5 - dict-treeview - var-treeview + dict-treeview + var-treeview @@ -68,7 +69,7 @@ - + True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK vertical @@ -82,10 +83,8 @@ True True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - never + automatic automatic - etched-in True @@ -97,7 +96,7 @@ - + True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK Variable(s): @@ -147,6 +146,20 @@ 1 + + + Include missing values + True + True + False + True + + + False + False + 2 + + False @@ -163,41 +176,37 @@ True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - - Display Frequency Table - True - True - False - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - True - - - 0 - - - - + True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 5 True - - Format... + + + + + Charts... True True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - 0 + 1 - - - - + + Frequency Tables... + True + True + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + + + 2 + @@ -237,38 +246,39 @@ - + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - Frequencies: Format + Frequencies: Frequency Tables True - + True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 2 - + True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - 5 + vertical - + True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 0 - + True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 12 - + True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + vertical True - - Ascending Order + + Always True True False @@ -283,15 +293,14 @@ - - Descending Order + + Never True True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - True True - radiobutton1 + always False @@ -300,15 +309,129 @@ - - Ascending Counts + + True + + + If no more than + True + True + False + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + True + always + + + False + False + 0 + + + + + True + True + 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 + + adjustment1 + True + if-valid + + + 1 + + + + + True + values + + + 2 + + + + + False + False + 2 + + + + + + + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + Display frequency tables + True + + + + + False + 0 + + + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 0 + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 12 + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + vertical + True + + + Ascending value True True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True True - radiobutton1 + + + False + False + 0 + + + + + Descending value + True + True + False + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + True + avalue + + + False + False + 1 + + + + + Ascending frequency + True + True + False + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + True + avalue False @@ -317,15 +440,14 @@ - - Descending Counts + + Descending frequency True True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - True True - radiobutton1 + avalue False @@ -338,7 +460,7 @@ - + True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK Order by @@ -347,99 +469,308 @@ - 0 + False + 1 + + + False + 0 + + + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 5 + PSPPIRE_BUTTON_CONTINUE_MASK | PSPPIRE_BUTTON_CANCEL_MASK | PSPPIRE_BUTTON_HELP_MASK + + + False + False + end + 1 + + + + + + + 100 + 1 + 65536 + 1 + 10 + + + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + Frequencies: Charts + True + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + + + True + vertical - + True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - 0 - 0 - 5 + 0 + none - + True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - vertical + 12 - + True - True - False - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - True + vertical - - 180 + True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - Suppress tables with more than N categories - True + + + Exclude values below + True + True + False + True + + + False + False + 0 + + + + + True + True + + adjustment2 + + + False + False + 1 + + + + 0 + + + + + True + + + Exclude values above + True + True + False + True + + + False + False + 0 + + + + + True + True + + adjustment3 + + + False + False + 1 + + + + + False + 1 + - - 0 - + + + + + True + <b>Chart Formatting</b> + True + + + + + 0 + + + + + True + 0 + none + + + True + 12 - + True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + vertical - - 120 + + Draw histograms True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - 0 - Maximum no of categories - True - word-char + True + False + True - False - False 0 - + + Superimpose normal curve True True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - adjustment1 - True - if-valid + False + True - False - False 1 + + + True + + + True + Scale: + + + 0 + + + + + Frequencies + True + True + False + True + True + + + 1 + + + + + Percentages + True + True + False + True + freqs + + + 2 + + + + + 2 + + - - 5 - 1 - + + + True + <b>Histograms</b> + True + + - False - 5 1 + + + True + 0 + none + + + True + 12 + + + True + vertical + + + Draw pie charts + True + True + False + True + + + 0 + + + + + Include slices for missing values + True + True + False + True + + + 1 + + + + + + + + + True + <b>Pie Charts</b> + True + + + + + 2 + + 0 - + True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 5 @@ -455,12 +786,17 @@ - + + -10000000000 + 10000000000 + 1 + 10 + + 100 - 1 - 65536 + -10000000000 + 10000000000 1 10 - 0