gnumeric r16820 - in trunk/src: dialogs tools
- From: guelzow svn gnome org
- To: svn-commits-list gnome org
- Subject: gnumeric r16820 - in trunk/src: dialogs tools
- Date: Mon, 22 Sep 2008 02:28:18 +0000 (UTC)
Author: guelzow
Date: Mon Sep 22 02:28:18 2008
New Revision: 16820
URL: http://svn.gnome.org/viewvc/gnumeric?rev=16820&view=rev
Log:
2008-09-21 Andreas J. Guelzow <aguelzow pyrshep ca>
* dialog-analysis-tools.c (n_group): new
(AverageToolState): new fields
(average_tool_ok_clicked_cb): handle new fields
(average_tool_update_sensitivity_cb): ditto
(average_tool_check_error_cb): new
(average_tool_central_cb): new
(average_tool_prior_cb): new
(average_tool_interval_cb): new
(dialog_average_tool): setup new controls
* moving-averages.glade: enable controls
2008-09-21 Andreas J. Guelzow <aguelzow pyrshep ca>
* analysis-tools.h (analysis_tools_data_moving_average_t): new fields
* analysis-tools.c (analysis_tool_moving_average_engine_run): handle
offset and possible change in denominator of std error.
Modified:
trunk/src/dialogs/ChangeLog
trunk/src/dialogs/dialog-analysis-tools.c
trunk/src/dialogs/moving-averages.glade
trunk/src/tools/ChangeLog
trunk/src/tools/analysis-tools.c
trunk/src/tools/analysis-tools.h
Modified: trunk/src/dialogs/dialog-analysis-tools.c
==============================================================================
--- trunk/src/dialogs/dialog-analysis-tools.c (original)
+++ trunk/src/dialogs/dialog-analysis-tools.c Mon Sep 22 02:28:18 2008
@@ -116,6 +116,14 @@
NULL
};
+static char const * const n_group[] = {
+ "n-button",
+ "nm1-button",
+ "nm2-button",
+ NULL
+};
+
+
typedef struct {
GenericToolState base;
@@ -171,6 +179,14 @@
typedef struct {
GenericToolState base;
GtkWidget *interval_entry;
+ GtkWidget *show_std_errors;
+ GtkWidget *n_button;
+ GtkWidget *nm1_button;
+ GtkWidget *nm2_button;
+ GtkWidget *prior_button;
+ GtkWidget *central_button;
+ GtkWidget *offset_button;
+ GtkWidget *offset_spin;
} AverageToolState;
typedef struct {
@@ -2405,9 +2421,11 @@
data->base.labels = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (w));
err = entry_to_int (GTK_ENTRY (state->interval_entry), &data->interval, TRUE);
+ err = entry_to_int (GTK_ENTRY (state->offset_spin), &data->offset, TRUE);
- w = glade_xml_get_widget (state->base.gui, "std_errors_button");
- data->std_error_flag = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (w));
+ data->std_error_flag = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (state->show_std_errors));
+
+ data->df = gnumeric_glade_group_value (state->base.gui, n_group);
if (!cmd_analysis_tool (WORKBOOK_CONTROL (state->base.wbcg), state->base.sheet,
dao, data, analysis_tool_moving_average_engine))
@@ -2429,8 +2447,9 @@
average_tool_update_sensitivity_cb (G_GNUC_UNUSED GtkWidget *dummy,
AverageToolState *state)
{
- int interval, err;
+ int interval, err, offset;
GSList *input_range;
+
input_range = gnm_expr_entry_parse_as_list (
GNM_EXPR_ENTRY (state->base.input_entry), state->base.sheet);
@@ -2442,15 +2461,23 @@
} else
range_list_destroy (input_range);
- err = entry_to_int (GTK_ENTRY (state->interval_entry), &interval, FALSE);
-
- if (err!= 0 || interval <= 0) {
- gtk_label_set_text (GTK_LABEL (state->base.warning),
- _("The given interval is invalid."));
- gtk_widget_set_sensitive (state->base.ok_button, FALSE);
- return;
- }
+ err = entry_to_int (GTK_ENTRY (state->interval_entry), &interval, FALSE);
+ if (err!= 0 || interval <= 0) {
+ gtk_label_set_text (GTK_LABEL (state->base.warning),
+ _("The given interval is invalid."));
+ gtk_widget_set_sensitive (state->base.ok_button, FALSE);
+ return;
+ }
+ err = entry_to_int (GTK_ENTRY (state->offset_spin), &offset, FALSE);
+ if (err!= 0 || offset < 0 || offset > interval) {
+ gtk_label_set_text (GTK_LABEL (state->base.warning),
+ _("The given offset is invalid."));
+ gtk_widget_set_sensitive (state->base.ok_button, FALSE);
+ return;
+ }
+
+
if (!gnm_dao_is_ready (GNM_DAO (state->base.gdao))) {
gtk_label_set_text (GTK_LABEL (state->base.warning),
_("The output specification "
@@ -2463,6 +2490,59 @@
gtk_widget_set_sensitive (state->base.ok_button, TRUE);
}
+static void
+average_tool_check_error_cb (G_GNUC_UNUSED GtkToggleButton *togglebutton, gpointer user_data)
+{
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (user_data), TRUE);
+}
+
+static void
+average_tool_central_cb (GtkToggleButton *togglebutton, gpointer user_data)
+{
+ AverageToolState *state = (AverageToolState *)user_data;
+ int interval;
+ int err;
+
+ if (gtk_toggle_button_get_active (togglebutton)) {
+ err = entry_to_int (GTK_ENTRY (state->interval_entry), &interval, TRUE);
+ if (err == 0)
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (state->offset_spin), (interval/2));
+ }
+}
+
+static void
+average_tool_prior_cb (GtkToggleButton *togglebutton, gpointer user_data)
+{
+ AverageToolState *state = (AverageToolState *)user_data;
+
+ if (gtk_toggle_button_get_active (togglebutton))
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (state->offset_spin), 0.0);
+}
+
+static void
+average_tool_interval_cb (G_GNUC_UNUSED GtkWidget *dummy, AverageToolState *state)
+{
+ int interval;
+ int err;
+
+ err = entry_to_int (GTK_ENTRY (state->interval_entry), &interval, TRUE);
+
+ if (err == 0)
+ gtk_spin_button_set_range (GTK_SPIN_BUTTON (state->offset_spin),
+ 0, interval - 1);
+ if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (state->central_button)))
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (state->offset_spin), interval/2);
+}
+
+static void
+average_tool_offset_cb (GtkToggleButton *togglebutton, gpointer user_data)
+{
+ AverageToolState *state = (AverageToolState *)user_data;
+
+ gtk_widget_set_sensitive (state->offset_spin, gtk_toggle_button_get_active (togglebutton));
+}
+
+
/**
* dialog_average_tool:
* @wbcg:
@@ -2501,9 +2581,44 @@
state->interval_entry = glade_xml_get_widget (state->base.gui, "interval-entry");
int_to_entry (GTK_ENTRY (state->interval_entry), 3);
+ state->n_button = glade_xml_get_widget (state->base.gui, "n-button");
+ state->nm1_button = glade_xml_get_widget (state->base.gui, "nm1-button");
+ state->nm2_button = glade_xml_get_widget (state->base.gui, "nm2-button");
+ state->prior_button = glade_xml_get_widget (state->base.gui, "prior-button");
+ state->central_button = glade_xml_get_widget (state->base.gui, "central-button");
+ state->offset_button = glade_xml_get_widget (state->base.gui, "offset-button");
+ state->offset_spin = glade_xml_get_widget (state->base.gui, "offset-spinbutton");
+ state->show_std_errors = glade_xml_get_widget (state->base.gui, "std-errors-button");
+
+ g_signal_connect_after (G_OBJECT (state->n_button),
+ "toggled",
+ G_CALLBACK (average_tool_check_error_cb), state->show_std_errors);
+ g_signal_connect_after (G_OBJECT (state->nm1_button),
+ "toggled",
+ G_CALLBACK (average_tool_check_error_cb), state->show_std_errors);
+ g_signal_connect_after (G_OBJECT (state->nm2_button),
+ "toggled",
+ G_CALLBACK (average_tool_check_error_cb), state->show_std_errors);
+
+ g_signal_connect_after (G_OBJECT (state->prior_button),
+ "toggled",
+ G_CALLBACK (average_tool_prior_cb), state);
+ g_signal_connect_after (G_OBJECT (state->central_button),
+ "toggled",
+ G_CALLBACK (average_tool_central_cb), state);
+ g_signal_connect_after (G_OBJECT (state->offset_button),
+ "toggled",
+ G_CALLBACK (average_tool_offset_cb), state);
+
+
+
g_signal_connect_after (G_OBJECT (state->interval_entry),
"changed",
G_CALLBACK (average_tool_update_sensitivity_cb), state);
+ g_signal_connect_after (G_OBJECT (state->interval_entry),
+ "changed",
+ G_CALLBACK (average_tool_interval_cb), state);
+
gnumeric_editable_enters (GTK_WINDOW (state->base.dialog),
GTK_WIDGET (state->interval_entry));
Modified: trunk/src/dialogs/moving-averages.glade
==============================================================================
--- trunk/src/dialogs/moving-averages.glade (original)
+++ trunk/src/dialogs/moving-averages.glade Mon Sep 22 02:28:18 2008
@@ -218,7 +218,6 @@
<child>
<widget class="GtkRadioButton" id="nm2-button">
<property name="visible">True</property>
- <property name="sensitive">False</property>
<property name="can_focus">True</property>
<property name="label" translatable="yes">nâ2</property>
<property name="response_id">0</property>
@@ -236,7 +235,6 @@
<child>
<widget class="GtkRadioButton" id="nm1-button">
<property name="visible">True</property>
- <property name="sensitive">False</property>
<property name="can_focus">True</property>
<property name="label" translatable="yes">nâ1</property>
<property name="response_id">0</property>
@@ -285,7 +283,7 @@
</packing>
</child>
<child>
- <widget class="GtkCheckButton" id="std_errors_button">
+ <widget class="GtkCheckButton" id="std-errors-button">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="label" translatable="yes">_Standard errors</property>
@@ -369,7 +367,6 @@
<child>
<widget class="GtkRadioButton" id="offset-button">
<property name="visible">True</property>
- <property name="sensitive">False</property>
<property name="can_focus">True</property>
<property name="label" translatable="yes">Other offset</property>
<property name="response_id">0</property>
@@ -388,7 +385,6 @@
<child>
<widget class="GtkRadioButton" id="central-button">
<property name="visible">True</property>
- <property name="sensitive">False</property>
<property name="can_focus">True</property>
<property name="label" translatable="yes">Central moving average</property>
<property name="response_id">0</property>
Modified: trunk/src/tools/analysis-tools.c
==============================================================================
--- trunk/src/tools/analysis-tools.c (original)
+++ trunk/src/tools/analysis-tools.c Mon Sep 22 02:28:18 2008
@@ -3427,8 +3427,8 @@
GnmFunc *fd_index = NULL;
GnmFunc *fd_average;
GnmFunc *fd_offset;
- GnmFunc *fd_sqrt;
- GnmFunc *fd_sumxmy2;
+ GnmFunc *fd_sqrt = NULL;
+ GnmFunc *fd_sumxmy2 = NULL;
GSList *l;
gint col = 0;
gint source;
@@ -3506,9 +3506,9 @@
expr_input = gnm_expr_new_constant (val);
- (*mover) = 1 - info->interval;
+ (*mover) = 1 - info->interval + info->offset;
for (row = 1; row <= height; row++, (*mover)++) {
- if ((*mover >= 0) && (*mover < height)) {
+ if ((*mover >= 0) && (*mover + info->interval - 1 < height)) {
GnmExprList *list ;
GnmExpr const *expr_offset;
@@ -3531,7 +3531,7 @@
expr_offset,
make_rangeref (-1, - info->interval + 1, -1, 0)),
GNM_EXPR_OP_DIV,
- gnm_expr_new_constant (value_new_int (info->interval)))));
+ gnm_expr_new_constant (value_new_int (info->interval - info->df)))));
else {
dao_set_cell_na (dao, col + 1, row);
gnm_expr_free (expr_offset);
Modified: trunk/src/tools/analysis-tools.h
==============================================================================
--- trunk/src/tools/analysis-tools.h (original)
+++ trunk/src/tools/analysis-tools.h Mon Sep 22 02:28:18 2008
@@ -89,6 +89,8 @@
analysis_tools_data_generic_t base;
int interval;
int std_error_flag;
+ int df;
+ int offset;
} analysis_tools_data_moving_average_t;
gboolean analysis_tool_moving_average_engine (data_analysis_output_t *dao, gpointer specs,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]