gnumeric r16776 - in trunk: . src
- From: mortenw svn gnome org
- To: svn-commits-list gnome org
- Subject: gnumeric r16776 - in trunk: . src
- Date: Fri, 5 Sep 2008 15:09:01 +0000 (UTC)
Author: mortenw
Date: Fri Sep 5 15:09:00 2008
New Revision: 16776
URL: http://svn.gnome.org/viewvc/gnumeric?rev=16776&view=rev
Log:
2008-09-05 Morten Welinder <terra gnome org>
* src/cell.c (gnm_cell_get_displayed_text): New function.
* src/rendered-value.c (gnm_rendered_value_new): Use
gnm_cell_get_displayed_text. Fixes #550902.
* src/workbook-view.c (wb_view_edit_line_set): Ditto.
Modified:
trunk/ChangeLog
trunk/NEWS
trunk/src/cell.c
trunk/src/cell.h
trunk/src/rendered-value.c
trunk/src/workbook-view.c
Modified: trunk/NEWS
==============================================================================
--- trunk/NEWS (original)
+++ trunk/NEWS Fri Sep 5 15:09:00 2008
@@ -17,6 +17,9 @@
* Understand and ignore byte-order markers for CSV/stf probing and
importing. [#549743]
+Morten:
+ * Fix display of array formulas. [#550902]
+
--------------------------------------------------------------------------
Gnumeric 1.9.2
Modified: trunk/src/cell.c
==============================================================================
--- trunk/src/cell.c (original)
+++ trunk/src/cell.c Fri Sep 5 15:09:00 2008
@@ -26,6 +26,7 @@
#include "sheet-style.h"
#include "parse-util.h"
#include <goffice/utils/go-glib-extras.h>
+#include <goffice/utils/go-locale.h>
/**
* gnm_cell_cleanout :
@@ -564,6 +565,50 @@
}
+char *
+gnm_cell_get_displayed_text (GnmCell const *cell)
+{
+ if (gnm_cell_has_expr (cell)) {
+ GnmExprTop const *texpr = cell->base.texpr;
+ GnmCell const *corner = NULL;
+ int x = 0, y = 0;
+
+ if (gnm_expr_top_is_array_corner (texpr))
+ corner = cell;
+ else if (gnm_expr_top_is_array_elem (texpr, &x, &y)) {
+ corner = sheet_cell_get
+ (cell->base.sheet,
+ cell->pos.col - x,
+ cell->pos.row - y);
+ }
+
+ if (corner) {
+ GnmExprArrayCorner const *ac =
+ gnm_cell_is_array_corner (corner);
+ GnmParsePos pp;
+ GnmConventionsOut out;
+
+ out.accum = g_string_new ("={");
+ out.pp = parse_pos_init_cell (&pp, cell);
+ out.convs = cell->base.sheet->convs;
+
+ gnm_expr_top_as_gstring (cell->base.texpr, &out);
+
+ g_string_append_printf (out.accum,
+ "}(%d%c%d)[%d][%d]",
+ ac->cols,
+ go_locale_get_arg_sep (),
+ ac->rows,
+ x, y);
+
+ return g_string_free (out.accum, FALSE);
+ }
+ }
+
+ return gnm_cell_get_entered_text (cell);
+}
+
+
/*
* Return the height of the rendered layout after rotation.
*/
Modified: trunk/src/cell.h
==============================================================================
--- trunk/src/cell.h (original)
+++ trunk/src/cell.h Fri Sep 5 15:09:00 2008
@@ -83,11 +83,12 @@
void gnm_cell_set_format (GnmCell *cell, char const *format);
void gnm_cell_render_value (GnmCell *cell, gboolean allow_variable_width);
-int gnm_cell_rendered_height (GnmCell const * cell);
-int gnm_cell_rendered_width (GnmCell const * cell); /* excludes offset */
-int gnm_cell_rendered_offset (GnmCell const * cell);
-GOColor gnm_cell_get_render_color (GnmCell const * cell);
-char * gnm_cell_get_entered_text (GnmCell const * cell);
+int gnm_cell_rendered_height (GnmCell const *cell);
+int gnm_cell_rendered_width (GnmCell const *cell); /* excludes offset */
+int gnm_cell_rendered_offset (GnmCell const *cell);
+GOColor gnm_cell_get_render_color (GnmCell const *cell);
+char * gnm_cell_get_entered_text (GnmCell const *cell);
+char * gnm_cell_get_displayed_text (GnmCell const *cell);
char * gnm_cell_get_rendered_text (GnmCell *cell);
G_END_DECLS
Modified: trunk/src/rendered-value.c
==============================================================================
--- trunk/src/rendered-value.c (original)
+++ trunk/src/rendered-value.c Fri Sep 5 15:09:00 2008
@@ -341,17 +341,9 @@
res->numeric_overflow = FALSE;
if (displayed_formula) {
- GnmParsePos pp;
- GnmConventionsOut out;
-
- out.accum = g_string_new ("=");
- out.convs = sheet->convs;
- out.pp = &pp;
-
- parse_pos_init_cell (&pp, cell),
- gnm_expr_top_as_gstring (cell->base.texpr, &out);
- pango_layout_set_text (layout, out.accum->str, out.accum->len);
- g_string_free (out.accum, TRUE);
+ char *text = gnm_cell_get_displayed_text (cell);
+ pango_layout_set_text (layout, text, -1);
+ g_free (text);
fore = 0;
res->might_overflow = FALSE;
} else if (sheet->hide_zero && gnm_cell_is_zero (cell)) {
Modified: trunk/src/workbook-view.c
==============================================================================
--- trunk/src/workbook-view.c (original)
+++ trunk/src/workbook-view.c Fri Sep 5 15:09:00 2008
@@ -54,7 +54,6 @@
#include <goffice/app/io-context.h>
#include <goffice/utils/go-file.h>
#include <goffice/utils/go-glib-extras.h>
-#include <goffice/utils/go-locale.h>
#include <gsf/gsf.h>
#include <gsf/gsf-impl-utils.h>
#include <gsf/gsf-output-stdio.h>
@@ -387,49 +386,12 @@
sv = wbv->current_sheet_view;
if (sv != NULL) {
char *text;
- Sheet *sheet = sv->sheet;
- GnmCell const *cell = sheet_cell_get (sheet,
+ GnmCell const *cell = sheet_cell_get (sv->sheet,
sv->edit_pos.col, sv->edit_pos.row);
- if (NULL != cell) {
- text = gnm_cell_get_entered_text (cell);
-
- if (gnm_cell_has_expr (cell)) {
- GnmExprTop const *texpr = cell->base.texpr;
- GnmCell const *corner = NULL;
- int x = 0, y = 0;
-
- /*
- * If this is part of an array we add '{' '}'
- * and size information to the display. That
- * is not actually part of the parsable
- * expression, but it is a useful extension to
- * the simple '{' '}' that MS excel(tm) uses.
- */
- if (gnm_expr_top_is_array_corner (texpr))
- corner = cell;
- else if (gnm_expr_top_is_array_elem (texpr, &x, &y)) {
- corner = sheet_cell_get
- (sheet,
- cell->pos.col - x,
- cell->pos.row - y);
- }
-
- if (corner) {
- GnmExprArrayCorner const *ac = gnm_cell_is_array_corner (corner);
-
- char *tmp = g_strdup_printf
- ("{%s}(%d%c%d)[%d][%d]",
- text,
- ac->cols,
- go_locale_get_arg_sep (),
- ac->rows,
- x, y);
- g_free (text);
- text = tmp;
- }
- }
- } else
+ if (NULL != cell)
+ text = gnm_cell_get_displayed_text (cell);
+ else
text = g_strdup ("");
if (optional_wbc == NULL) {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]