gnumeric r16511 - in branches/gnumeric-1-8: . src/widgets



Author: mortenw
Date: Sat Apr 12 17:20:32 2008
New Revision: 16511
URL: http://svn.gnome.org/viewvc/gnumeric?rev=16511&view=rev

Log:
2008-04-12  Morten Welinder  <terra gnome org>

	* gnumeric-expr-entry.c (cb_gee_key_press_event): Handle F9.
	Fixes #56169.



Modified:
   branches/gnumeric-1-8/NEWS
   branches/gnumeric-1-8/src/widgets/ChangeLog
   branches/gnumeric-1-8/src/widgets/gnumeric-expr-entry.c

Modified: branches/gnumeric-1-8/NEWS
==============================================================================
--- branches/gnumeric-1-8/NEWS	(original)
+++ branches/gnumeric-1-8/NEWS	Sat Apr 12 17:20:32 2008
@@ -21,6 +21,7 @@
 	* Fix date pasting problems to/from 1904 workbooks.  [#490419]
 	* Fix problems editing times.  [#527392]
 	* Implement IFERROR.  [#445591]
+	* Implement F9 for evaluating a selected subexpression.
 
 --------------------------------------------------------------------------
 Gnumeric 1.8.2

Modified: branches/gnumeric-1-8/src/widgets/gnumeric-expr-entry.c
==============================================================================
--- branches/gnumeric-1-8/src/widgets/gnumeric-expr-entry.c	(original)
+++ branches/gnumeric-1-8/src/widgets/gnumeric-expr-entry.c	Sat Apr 12 17:20:32 2008
@@ -526,6 +526,47 @@
 		return TRUE;
 	}
 
+	case GDK_F9: {
+		/* Replace selection by its evaluated result.  */
+		GtkEditable *editable = GTK_EDITABLE (entry);
+		gint start, end;
+		char *str;
+		GnmExprTop const *texpr;
+		Sheet *sheet = gee->pp.sheet;
+
+		gtk_editable_get_selection_bounds (editable, &start, &end);
+		if (end <= start)
+			return FALSE;
+		str = gtk_editable_get_chars (editable, start, end);
+
+		texpr = gnm_expr_parse_str_simple (str, &gee->pp);
+		if (texpr) {
+			GnmValue *v;
+			GnmEvalPos ep;
+			char *cst;
+			GnmExpr const *expr;
+
+			eval_pos_init_pos (&ep, sheet, &gee->pp.eval);
+			v = gnm_expr_top_eval (texpr, &ep, GNM_EXPR_EVAL_SCALAR_NON_EMPTY);
+			gnm_expr_top_unref (texpr);
+
+			/* Turn the value into an expression so we get the right syntax.  */
+			expr = gnm_expr_new_constant (v);
+			cst = gnm_expr_as_string  (expr, &gee->pp,
+						   sheet_get_conventions (sheet));
+			gnm_expr_free (expr);
+
+			gtk_editable_delete_text (editable, start, end);
+			gtk_editable_insert_text (editable, cst, -1, &start);
+			gtk_editable_set_position (editable, start);
+
+			g_free (cst);
+		}
+
+		g_free (str);
+		return TRUE;
+	}
+
 	default:
 		break;
 	}



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]