[gnumeric] Add auto expression menu items to add formula. [#8872]
- From: Andreas J. Guelzow <guelzow src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gnumeric] Add auto expression menu items to add formula. [#8872]
- Date: Thu, 31 Dec 2009 22:04:53 +0000 (UTC)
commit 4aa18a359bacc111b62488706d6de4fe8d89ab63
Author: Andreas J. Guelzow <aguelzow pyrshep ca>
Date: Thu Dec 31 15:04:04 2009 -0700
Add auto expression menu items to add formula. [#8872]
2009-12-31 Andreas J. Guelzow <aguelzow pyrshep ca>
* analysis-auto-expression.c (analysis_tool_auto_expression_engine_run):
also handle adding formula to the side
(analysis_tool_auto_expression_engine): ditto
* analysis-auto-expression.h (analysis_tools_data_auto_expression_t):
add field
2009-12-31 Andreas J. Guelzow <aguelzow pyrshep ca>
* wbc-gtk.c (cb_auto_expr_insert_formula): new
(cb_auto_expr_insert_formula_below): use cb_auto_expr_insert_formula
(cb_auto_expr_insert_formula_to_side): new
(cb_select_auto_expr): add menu item
ChangeLog | 7 +++
NEWS | 2 +-
src/tools/ChangeLog | 8 +++
src/tools/analysis-auto-expression.c | 53 ++++++++++++++-------
src/tools/analysis-auto-expression.h | 1 +
src/wbc-gtk.c | 88 +++++++++++++++++++++-------------
6 files changed, 108 insertions(+), 51 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index c6acf46..2ed5cf4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,12 @@
2009-12-31 Andreas J. Guelzow <aguelzow pyrshep ca>
+ * wbc-gtk.c (cb_auto_expr_insert_formula): new
+ (cb_auto_expr_insert_formula_below): use cb_auto_expr_insert_formula
+ (cb_auto_expr_insert_formula_to_side): new
+ (cb_select_auto_expr): add menu item
+
+2009-12-31 Andreas J. Guelzow <aguelzow pyrshep ca>
+
* wbc-gtk.c (cb_auto_expr_insert_formula_below): new
(cb_select_auto_expr): add separator and menu item
diff --git a/NEWS b/NEWS
index 4b75356..64a1e1c 100644
--- a/NEWS
+++ b/NEWS
@@ -22,7 +22,7 @@ Andreas:
* Add GET.LINK. [#128534]
* Add "Don't change formulae" to paste special. [#123326]
* Select pasted objects. [#604227]
- * Add auto expression menuitem to add formula. Part of [#8872]
+ * Add auto expression menu items to add formula. [#8872]
Jean
* Fix import export of line type in scatter plots. [#605043]
diff --git a/src/tools/ChangeLog b/src/tools/ChangeLog
index 273cd4c..5b4ecdf 100644
--- a/src/tools/ChangeLog
+++ b/src/tools/ChangeLog
@@ -1,5 +1,13 @@
2009-12-31 Andreas J. Guelzow <aguelzow pyrshep ca>
+ * analysis-auto-expression.c (analysis_tool_auto_expression_engine_run):
+ also handle adding formula to the side
+ (analysis_tool_auto_expression_engine): ditto
+ * analysis-auto-expression.h (analysis_tools_data_auto_expression_t):
+ add field
+
+2009-12-31 Andreas J. Guelzow <aguelzow pyrshep ca>
+
* analysis-auto-expression.c: new
* analysis-auto-expression.h: new
* Makefile.am: add the above
diff --git a/src/tools/analysis-auto-expression.c b/src/tools/analysis-auto-expression.c
index 7d7ce7a..be970a8 100644
--- a/src/tools/analysis-auto-expression.c
+++ b/src/tools/analysis-auto-expression.c
@@ -41,20 +41,35 @@ analysis_tool_auto_expression_engine_run (data_analysis_output_t *dao,
guint col;
GSList *data = info->base.input;
- for (col = 0; data != NULL; data = data->next, col++)
- dao_set_cell_expr
- (dao, col, 0,
- gnm_expr_new_funcall1
- (info->func,
- gnm_expr_new_constant (value_dup (data->data))));
-
- if (info->multiple)
- dao_set_cell_expr
- (dao, col, 0,
- gnm_expr_new_funcall1
- (info->func,
- make_rangeref (-col,0,-1,0)));
-
+ if (info->below) {
+ for (col = 0; data != NULL; data = data->next, col++)
+ dao_set_cell_expr
+ (dao, col, 0,
+ gnm_expr_new_funcall1
+ (info->func,
+ gnm_expr_new_constant (value_dup (data->data))));
+
+ if (info->multiple)
+ dao_set_cell_expr
+ (dao, col, 0,
+ gnm_expr_new_funcall1
+ (info->func,
+ make_rangeref (- col, 0, -1, 0)));
+ } else {
+ for (col = 0; data != NULL; data = data->next, col++)
+ dao_set_cell_expr
+ (dao, 0, col,
+ gnm_expr_new_funcall1
+ (info->func,
+ gnm_expr_new_constant (value_dup (data->data))));
+
+ if (info->multiple)
+ dao_set_cell_expr
+ (dao, 0, col,
+ gnm_expr_new_funcall1
+ (info->func,
+ make_rangeref (0, - col, 0, -1)));
+ }
dao_redraw_respan (dao);
return FALSE;
@@ -84,9 +99,13 @@ analysis_tool_auto_expression_engine (data_analysis_output_t *dao, gpointer spec
== NULL);
case TOOL_ENGINE_UPDATE_DAO:
prepare_input_range (&info->base.input, info->base.group_by);
- dao_adjust (dao,
- (info->multiple ? 1 : 0) + g_slist_length (info->base.input),
- 1);
+ if (info->below)
+ dao_adjust (dao,
+ (info->multiple ? 1 : 0) + g_slist_length (info->base.input),
+ 1);
+ else
+ dao_adjust (dao, 1,
+ (info->multiple ? 1 : 0) + g_slist_length (info->base.input));
return FALSE;
case TOOL_ENGINE_CLEAN_UP:
return analysis_tool_auto_expression_engine_clean (specs);
diff --git a/src/tools/analysis-auto-expression.h b/src/tools/analysis-auto-expression.h
index 602296f..b079b38 100644
--- a/src/tools/analysis-auto-expression.h
+++ b/src/tools/analysis-auto-expression.h
@@ -37,6 +37,7 @@
typedef struct {
analysis_tools_data_generic_t base;
gboolean multiple;
+ gboolean below;
GnmFunc *func;
} analysis_tools_data_auto_expression_t;
diff --git a/src/wbc-gtk.c b/src/wbc-gtk.c
index ca46e57..9276e91 100644
--- a/src/wbc-gtk.c
+++ b/src/wbc-gtk.c
@@ -4140,38 +4140,52 @@ cb_auto_expr_precision_toggled (GtkWidget *item, WBCGtk *wbcg)
}
static void
-cb_auto_expr_insert_formula_below (GtkWidget *item, WBCGtk *wbcg)
+cb_auto_expr_insert_formula (WBCGtk *wbcg, gboolean below)
{
SheetControlGUI *scg = wbcg_cur_scg (wbcg);
GnmRange const *selection = selection_first_range (scg_view (scg), NULL, NULL);
GnmRange output;
GnmRange *input;
- gboolean multiple, use_last_row;
+ gboolean multiple, use_last_cr;
data_analysis_output_t *dao;
analysis_tools_data_auto_expression_t *specs;
- if (selection == NULL || range_height (selection) < 2)
- return;
-
- multiple = (range_width (selection) > 1);
- output = *selection;
- range_normalize (&output);
- output.start.row = output.end.row;
-
- use_last_row = sheet_is_region_empty (scg_sheet (scg), &output);
+ g_return_if_fail (selection != NULL);
- if (!use_last_row) {
- if (range_translate (&output, scg_sheet (scg), 0, 1))
- return;
- if (multiple &&
- (gnm_sheet_get_last_col (scg_sheet (scg)) > output.end.col))
- output.end.col++;
+ if (below) {
+ multiple = (range_width (selection) > 1);
+ output = *selection;
+ range_normalize (&output);
+ output.start.row = output.end.row;
+ use_last_cr = (range_height (selection) > 1) && sheet_is_region_empty (scg_sheet (scg), &output);
+ if (!use_last_cr) {
+ if (range_translate (&output, scg_sheet (scg), 0, 1))
+ return;
+ if (multiple && gnm_sheet_get_last_col (scg_sheet (scg)) > output.end.col)
+ output.end.col++;
+ }
+ input = gnm_range_dup (selection);
+ range_normalize (input);
+ if (use_last_cr)
+ input->end.row--;
+ } else {
+ multiple = (range_height (selection) > 1);
+ output = *selection;
+ range_normalize (&output);
+ output.start.col = output.end.col;
+ use_last_cr = (range_width (selection) > 1) && sheet_is_region_empty (scg_sheet (scg), &output);
+ if (!use_last_cr) {
+ if (range_translate (&output, scg_sheet (scg), 1, 0))
+ return;
+ if (multiple && gnm_sheet_get_last_row (scg_sheet (scg)) > output.end.row)
+ output.end.row++;
+ }
+ input = gnm_range_dup (selection);
+ range_normalize (input);
+ if (use_last_cr)
+ input->end.col--;
}
-
- input = gnm_range_dup (selection);
- range_normalize (input);
- if (use_last_row)
- input->end.row--;
+
dao = dao_init (NULL, RangeOutput);
dao->start_col = output.start.col;
@@ -4186,9 +4200,10 @@ cb_auto_expr_insert_formula_below (GtkWidget *item, WBCGtk *wbcg)
specs->base.wbc = WORKBOOK_CONTROL (wbcg);
specs->base.input = g_slist_prepend (NULL, value_new_cellrange_r (scg_sheet (scg), input));
g_free (input);
- specs->base.group_by = GROUPED_BY_COL;
+ specs->base.group_by = below ? GROUPED_BY_COL : GROUPED_BY_ROW;
specs->base.labels = FALSE;
specs->multiple = multiple;
+ specs->below = below;
specs->func = NULL;
g_object_get (G_OBJECT (wb_control_view (WORKBOOK_CONTROL (wbcg))),
"auto-expr-func", &(specs->func), NULL);
@@ -4201,10 +4216,17 @@ cb_auto_expr_insert_formula_below (GtkWidget *item, WBCGtk *wbcg)
dao, specs, analysis_tool_auto_expression_engine);
}
-/* static void */
-/* cb_auto_expr_insert_formula_to_side (GtkWidget *item, WBCGtk *wbcg) */
-/* { */
-/* } */
+static void
+cb_auto_expr_insert_formula_below (G_GNUC_UNUSED GtkWidget *item, WBCGtk *wbcg)
+{
+ cb_auto_expr_insert_formula (wbcg, TRUE);
+}
+
+static void
+cb_auto_expr_insert_formula_to_side (G_GNUC_UNUSED GtkWidget *item, WBCGtk *wbcg)
+{
+ cb_auto_expr_insert_formula (wbcg, FALSE);
+}
static gboolean
@@ -4302,11 +4324,11 @@ cb_select_auto_expr (GtkWidget *widget, GdkEventButton *event, WBCGtk *wbcg)
gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
gtk_widget_show (item);
-/* item = gtk_menu_item_new_with_label (_("Insert formula to side.")); */
-/* g_signal_connect (G_OBJECT (item), "activate", */
-/* G_CALLBACK (cb_auto_expr_insert_formula_to_side), wbcg); */
-/* gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); */
-/* gtk_widget_show (item); */
+ item = gtk_menu_item_new_with_label (_("Insert formula to side."));
+ g_signal_connect (G_OBJECT (item), "activate",
+ G_CALLBACK (cb_auto_expr_insert_formula_to_side), wbcg);
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
+ gtk_widget_show (item);
gnumeric_popup_menu (GTK_MENU (menu), event);
return TRUE;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]