gnumeric r16820 - in trunk/src: dialogs tools



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]